diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..50cc68a31 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,164 @@ +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 new file mode 100644 index 000000000..03a57326c --- /dev/null +++ b/.codesandbox/ci.json @@ -0,0 +1,4 @@ +{ + "packages": ["packages/*"], + "sandboxes": ["github/algolia/create-instantsearch-app/tree/templates/javascript-client"] +} diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..4464e73ac --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +**/node_modules +**/.DS_Store diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..7db3e337b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +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 new file mode 100644 index 000000000..77abb61b4 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +**/node_modules/** +playground/** +**/dist/** +specs/** +coverage/** diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..e8708839c --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,112 @@ +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-fetch', './packages/requester-fetch/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 deleted file mode 100644 index a97c314ed..000000000 --- a/.github/ISSUE_TEMPLATE/Bug_report.yml +++ /dev/null @@ -1,58 +0,0 @@ -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 - - Agent Studio - - 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 deleted file mode 100644 index e9d19f1c5..000000000 --- a/.github/workflows/do-not-edit-this-repository.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Do not edit files in this repository - -on: - pull_request_target: - types: - - opened - - synchronize - - reopened - branches: - - 'main' - -jobs: - auto_close_pr: - name: Close PR - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - - 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 deleted file mode 100644 index 58ff4d85c..000000000 --- a/.github/workflows/issue.yml +++ /dev/null @@ -1,55 +0,0 @@ -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@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 - 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: 'API-1' - }, - project: { - id: '11316' - }, - 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 deleted file mode 100644 index e1d091b7c..000000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Release packages - -on: - push: - branches: - - main - -permissions: - id-token: write # Required for OIDC - contents: read - -jobs: - release: - name: Publish - runs-on: ubuntu-22.04 - if: "startsWith(github.event.head_commit.message, 'chore: release')" - steps: - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - fetch-depth: 0 - - - name: Install Node - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 - 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 ba0cf37ae..d3371af10 100644 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1,8 @@ -**dist -**.openapi-generator* - .DS_Store -.env - -yarn-error.log -lerna-debug.log - -.yarn/* -!.yarn/releases -!.yarn/plugins - +coverage node_modules - -.nx -.cursor/rules/nx-rules.mdc -.github/instructions/nx.instructions.md +dist +.vscode +*.umd.js +yarn-error.log +.env diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 2346004aa..000000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -//registry.npmjs.org/:_authToken=${NPM_AUTH_TOKEN} \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index 8dfc5cb1a..d494f460a 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -24.18.1 +12.16.2 diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..4cc6aa622 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "trailingComma": "es5", + "singleQuote": true, + "printWidth": 100 +} diff --git a/.yarn/releases/yarn-4.10.3.cjs b/.yarn/releases/yarn-4.10.3.cjs deleted file mode 100755 index b4f42cedf..000000000 --- a/.yarn/releases/yarn-4.10.3.cjs +++ /dev/null @@ -1,942 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable */ -//prettier-ignore -(()=>{var DGe=Object.create;var dU=Object.defineProperty;var PGe=Object.getOwnPropertyDescriptor;var bGe=Object.getOwnPropertyNames;var xGe=Object.getPrototypeOf,kGe=Object.prototype.hasOwnProperty;var Ie=(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 Ze=(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)dU(t,r,{get:e[r],enumerable:!0})},QGe=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of bGe(e))!kGe.call(t,a)&&a!==r&&dU(t,a,{get:()=>e[a],enumerable:!(s=PGe(e,a))||s.enumerable});return t};var ut=(t,e,r)=>(r=t!=null?DGe(xGe(t)):{},QGe(e||!t||!t.__esModule?dU(r,"default",{value:t,enumerable:!0}):r,t));var fi={};Vt(fi,{SAFE_TIME:()=>HX,S_IFDIR:()=>Jb,S_IFLNK:()=>Kb,S_IFMT:()=>Mf,S_IFREG:()=>N2});var Mf,Jb,N2,Kb,HX,jX=Ze(()=>{Mf=61440,Jb=16384,N2=32768,Kb=40960,HX=456789e3});var or={};Vt(or,{EBADF:()=>Mo,EBUSY:()=>RGe,EEXIST:()=>MGe,EINVAL:()=>FGe,EISDIR:()=>LGe,ENOENT:()=>NGe,ENOSYS:()=>TGe,ENOTDIR:()=>OGe,ENOTEMPTY:()=>_Ge,EOPNOTSUPP:()=>HGe,EROFS:()=>UGe,ERR_DIR_CLOSED:()=>mU});function Cc(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function RGe(t){return Cc("EBUSY",t)}function TGe(t,e){return Cc("ENOSYS",`${t}, ${e}`)}function FGe(t){return Cc("EINVAL",`invalid argument, ${t}`)}function Mo(t){return Cc("EBADF",`bad file descriptor, ${t}`)}function NGe(t){return Cc("ENOENT",`no such file or directory, ${t}`)}function OGe(t){return Cc("ENOTDIR",`not a directory, ${t}`)}function LGe(t){return Cc("EISDIR",`illegal operation on a directory, ${t}`)}function MGe(t){return Cc("EEXIST",`file already exists, ${t}`)}function UGe(t){return Cc("EROFS",`read-only filesystem, ${t}`)}function _Ge(t){return Cc("ENOTEMPTY",`directory not empty, ${t}`)}function HGe(t){return Cc("EOPNOTSUPP",`operation not supported, ${t}`)}function mU(){return Cc("ERR_DIR_CLOSED","Directory handle was closed")}var zb=Ze(()=>{});var $a={};Vt($a,{BigIntStatsEntry:()=>iE,DEFAULT_MODE:()=>IU,DirEntry:()=>yU,StatEntry:()=>nE,areStatsEqual:()=>CU,clearStats:()=>Zb,convertToBigIntStats:()=>GGe,makeDefaultStats:()=>GX,makeEmptyStats:()=>jGe});function GX(){return new nE}function jGe(){return Zb(GX())}function Zb(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):EU.types.isDate(r)&&(t[e]=new Date(0))}return t}function GGe(t){let e=new iE;for(let r in t)if(Object.hasOwn(t,r)){let s=t[r];typeof s=="number"?e[r]=BigInt(s):EU.types.isDate(s)&&(e[r]=new Date(s))}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 CU(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,s=e;return!(r.atimeNs!==s.atimeNs||r.mtimeNs!==s.mtimeNs||r.ctimeNs!==s.ctimeNs||r.birthtimeNs!==s.birthtimeNs)}var EU,IU,yU,nE,iE,wU=Ze(()=>{EU=ut(Ie("util")),IU=33188,yU=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}},nE=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=IU;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}},iE=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(IU);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 JGe(t){let e,r;if(e=t.match(YGe))t=e[1];else if(r=t.match(VGe))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function KGe(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(qGe))?t=`/${e[1]}`:(r=t.match(WGe))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function Xb(t,e){return t===fe?WX(e):BU(e)}var O2,vt,Er,fe,J,qX,qGe,WGe,YGe,VGe,BU,WX,el=Ze(()=>{O2=ut(Ie("path")),vt={root:"/",dot:".",parent:".."},Er={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"},fe=Object.create(O2.default),J=Object.create(O2.default.posix);fe.cwd=()=>process.cwd();J.cwd=process.platform==="win32"?()=>BU(process.cwd()):process.cwd;process.platform==="win32"&&(J.resolve=(...t)=>t.length>0&&J.isAbsolute(t[0])?O2.default.posix.resolve(...t):O2.default.posix.resolve(J.cwd(),...t));qX=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)};fe.contains=(t,e)=>qX(fe,t,e);J.contains=(t,e)=>qX(J,t,e);qGe=/^([a-zA-Z]:.*)$/,WGe=/^\/\/(\.\/)?(.*)$/,YGe=/^\/([a-zA-Z]:.*)$/,VGe=/^\/unc\/(\.dot\/)?(.*)$/;BU=process.platform==="win32"?KGe:t=>t,WX=process.platform==="win32"?JGe:t=>t;fe.fromPortablePath=WX;fe.toPortablePath=BU});async function $b(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let s=[];for(let a of r)for(let n of r)s.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(s),e.indexPath}async function YX(t,e,r,s,a){let n=t.pathUtils.normalize(e),c=r.pathUtils.normalize(s),f=[],p=[],{atime:h,mtime:E}=a.stableTime?{atime:dd,mtime:dd}:await r.lstatPromise(c);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,E]}),await vU(f,p,t,n,r,c,{...a,didParentExist:!0});for(let C of f)await C();await Promise.all(p.map(C=>C()))}async function vU(t,e,r,s,a,n,c){let f=c.didParentExist?await VX(r,s):null,p=await a.lstatPromise(n),{atime:h,mtime:E}=c.stableTime?{atime:dd,mtime:dd}:p,C;switch(!0){case p.isDirectory():C=await ZGe(t,e,r,s,f,a,n,p,c);break;case p.isFile():C=await eqe(t,e,r,s,f,a,n,p,c);break;case p.isSymbolicLink():C=await tqe(t,e,r,s,f,a,n,p,c);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(c.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((C||f?.mtime?.getTime()!==E.getTime()||f?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(s,h,E)),C=!0),(f===null||(f.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(s,p.mode&511)),C=!0)),C}async function VX(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function ZGe(t,e,r,s,a,n,c,f,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(s)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(s,{mode:f.mode})}catch(S){if(S.code!=="EEXIST")throw S}}),h=!0);let E=await n.readdirPromise(c),C=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let S of E.sort())await vU(t,e,r,r.pathUtils.join(s,S),n,n.pathUtils.join(c,S),C)&&(h=!0);else(await Promise.all(E.map(async b=>{await vU(t,e,r,r.pathUtils.join(s,b),n,n.pathUtils.join(c,b),C)}))).some(b=>b)&&(h=!0);return h}async function XGe(t,e,r,s,a,n,c,f,p,h){let E=await n.checksumFilePromise(c,{algorithm:"sha1"}),C=420,S=f.mode&511,b=`${E}${S!==C?S.toString(8):""}`,I=r.pathUtils.join(h.indexPath,E.slice(0,2),`${b}.dat`),T;(le=>(le[le.Lock=0]="Lock",le[le.Rename=1]="Rename"))(T||={});let N=1,U=await VX(r,I);if(a){let ie=U&&a.dev===U.dev&&a.ino===U.ino,ue=U?.mtimeMs!==zGe;if(ie&&ue&&h.autoRepair&&(N=0,U=null),!ie)if(p.overwrite)t.push(async()=>r.removePromise(s)),a=null;else return!1}let W=!U&&N===1?`${I}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,ee=!1;return t.push(async()=>{if(!U&&(N===0&&await r.lockPromise(I,async()=>{let ie=await n.readFilePromise(c);await r.writeFilePromise(I,ie)}),N===1&&W)){let ie=await n.readFilePromise(c);await r.writeFilePromise(W,ie);try{await r.linkPromise(W,I)}catch(ue){if(ue.code==="EEXIST")ee=!0,await r.unlinkPromise(W);else throw ue}}a||await r.linkPromise(I,s)}),e.push(async()=>{U||(await r.lutimesPromise(I,dd,dd),S!==C&&await r.chmodPromise(I,S)),W&&!ee&&await r.unlinkPromise(W)}),!1}async function $Ge(t,e,r,s,a,n,c,f,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(s)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(c);await r.writeFilePromise(s,h)}),!0}async function eqe(t,e,r,s,a,n,c,f,p){return p.linkStrategy?.type==="HardlinkFromIndex"?XGe(t,e,r,s,a,n,c,f,p,p.linkStrategy):$Ge(t,e,r,s,a,n,c,f,p)}async function tqe(t,e,r,s,a,n,c,f,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(s)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(Xb(r.pathUtils,await n.readlinkPromise(c)),s)}),!0}var dd,zGe,SU=Ze(()=>{el();dd=new Date(456789e3*1e3),zGe=dd.getTime()});function ex(t,e,r,s){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let c=t.pathUtils.join(e,n);return Object.assign(t.statSync(c),{name:n,path:void 0})};return new L2(e,a,s)}var L2,JX=Ze(()=>{zb();L2=class{constructor(e,r,s={}){this.path=e;this.nextDirent=r;this.opts=s;this.closed=!1}throwIfClosed(){if(this.closed)throw mU()}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 KX(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var zX,tx,ZX=Ze(()=>{zX=Ie("events");wU();tx=class t extends zX.EventEmitter{constructor(r,s,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=s,this.bigint=a,this.lastStats=this.stat()}static create(r,s,a){let n=new t(r,s,a);return n.start(),n}start(){KX(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(){KX(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 iE:new nE;return Zb(r)}}makeInterval(r){let s=setInterval(()=>{let a=this.stat(),n=this.lastStats;CU(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?s:s.unref()}registerChangeListener(r,s){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(s))}unregisterChangeListener(r){this.removeListener("change",r);let s=this.changeListeners.get(r);typeof s<"u"&&clearInterval(s),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 sE(t,e,r,s){let a,n,c,f;switch(typeof r){case"function":a=!1,n=!0,c=5007,f=r;break;default:({bigint:a=!1,persistent:n=!0,interval:c=5007}=r),f=s;break}let p=rx.get(t);typeof p>"u"&&rx.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=tx.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(f,{persistent:n,interval:c}),h}function md(t,e,r){let s=rx.get(t);if(typeof s>"u")return;let a=s.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),s.delete(e)))}function yd(t){let e=rx.get(t);if(!(typeof e>"u"))for(let r of e.keys())md(t,r)}var rx,DU=Ze(()=>{ZX();rx=new WeakMap});function rqe(t){let e=t.match(/\r?\n/g);if(e===null)return $X.EOL;let r=e.filter(a=>a===`\r -`).length,s=e.length-r;return r>s?`\r -`:` -`}function Ed(t,e){return e.replace(/\r?\n/g,rqe(t))}var XX,$X,mp,Uf,Id=Ze(()=>{XX=Ie("crypto"),$X=Ie("os");SU();el();mp=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let s=[e];for(;s.length>0;){let a=s.shift();if((await this.lstatPromise(a)).isDirectory()){let c=await this.readdirPromise(a);if(r)for(let f of c.sort())s.push(this.pathUtils.join(a,f));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let s=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),c=(0,XX.createHash)(r),f=0;for(;(f=await this.readPromise(s,n,0,65536))!==0;)c.update(f===65536?n:n.slice(0,f));return c.digest("hex")}finally{await this.closePromise(s)}}async removePromise(e,{recursive:r=!0,maxRetries:s=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(c=>this.removePromise(this.pathUtils.resolve(e,c))))}for(let n=0;n<=s;n++)try{await this.rmdirPromise(e);break}catch(c){if(c.code!=="EBUSY"&&c.code!=="ENOTEMPTY")throw c;nsetTimeout(f,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let s;try{s=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(s.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:s}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let c=2;c<=a.length;++c){let f=a.slice(0,c).join(this.pathUtils.sep);if(!this.existsSync(f)){try{await this.mkdirPromise(f)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=f,r!=null&&await this.chmodPromise(f,r),s!=null)await this.utimesPromise(f,s[0],s[1]);else{let p=await this.statPromise(this.pathUtils.dirname(f));await this.utimesPromise(f,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:s}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let c=2;c<=a.length;++c){let f=a.slice(0,c).join(this.pathUtils.sep);if(!this.existsSync(f)){try{this.mkdirSync(f)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=f,r!=null&&this.chmodSync(f,r),s!=null)this.utimesSync(f,s[0],s[1]);else{let p=this.statSync(this.pathUtils.dirname(f));this.utimesSync(f,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:s=this,overwrite:a=!0,stableSort:n=!1,stableTime:c=!1,linkStrategy:f=null}={}){return await YX(this,e,s,r,{overwrite:a,stableSort:n,stableTime:c,linkStrategy:f})}copySync(e,r,{baseFs:s=this,overwrite:a=!0}={}){let n=s.lstatSync(r),c=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=s.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),s.pathUtils.join(r,h),{baseFs:s,overwrite:a})}else if(n.isFile()){if(!c||a){c&&this.removeSync(e);let p=s.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!c||a){c&&this.removeSync(e);let p=s.readlinkSync(r);this.symlinkSync(Xb(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let f=n.mode&511;this.chmodSync(e,f)}async changeFilePromise(e,r,s={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,s):this.changeFileTextPromise(e,r,s)}async changeFileBufferPromise(e,r,{mode:s}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:s})}async changeFileTextPromise(e,r,{automaticNewlines:s,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let c=s?Ed(n,r):r;n!==c&&await this.writeFilePromise(e,c,{mode:a})}changeFileSync(e,r,s={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,s):this.changeFileTextSync(e,r,s)}changeFileBufferSync(e,r,{mode:s}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:s})}changeFileTextSync(e,r,{automaticNewlines:s=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let c=s?Ed(n,r):r;n!==c&&this.writeFileSync(e,c,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(s){if(s.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw s}}moveSync(e,r){try{this.renameSync(e,r)}catch(s){if(s.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw s}}async lockPromise(e,r){let s=`${e}.flock`,a=1e3/60,n=Date.now(),c=null,f=async()=>{let p;try{[p]=await this.readJsonPromise(s)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;c===null;)try{c=await this.openPromise(s,"wx")}catch(p){if(p.code==="EEXIST"){if(!await f())try{await this.unlinkPromise(s);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 ${s})`)}else throw p}await this.writePromise(c,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(c),await this.unlinkPromise(s)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(s){throw s.message+=` (in ${e})`,s}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(s){throw s.message+=` (in ${e})`,s}}async writeJsonPromise(e,r,{compact:s=!1}={}){let a=s?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} -`)}writeJsonSync(e,r,{compact:s=!1}={}){let a=s?0:2;return this.writeFileSync(e,`${JSON.stringify(r,null,a)} -`)}async preserveTimePromise(e,r){let s=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,s.atime,s.mtime)}async preserveTimeSync(e,r){let s=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,s.atime,s.mtime)}},Uf=class extends mp{constructor(){super(J)}}});var _s,yp=Ze(()=>{Id();_s=class extends mp{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,s){return this.baseFs.openPromise(this.mapToBase(e),r,s)}openSync(e,r,s){return this.baseFs.openSync(this.mapToBase(e),r,s)}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,s,a,n){return await this.baseFs.readPromise(e,r,s,a,n)}readSync(e,r,s,a,n){return this.baseFs.readSync(e,r,s,a,n)}async writePromise(e,r,s,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,s):await this.baseFs.writePromise(e,r,s,a,n)}writeSync(e,r,s,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,s):this.baseFs.writeSync(e,r,s,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,s){return this.baseFs.fchownPromise(e,r,s)}fchownSync(e,r,s){return this.baseFs.fchownSync(e,r,s)}async chownPromise(e,r,s){return this.baseFs.chownPromise(this.mapToBase(e),r,s)}chownSync(e,r,s){return this.baseFs.chownSync(this.mapToBase(e),r,s)}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,s=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),s)}copyFileSync(e,r,s=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),s)}async appendFilePromise(e,r,s){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,s)}appendFileSync(e,r,s){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,s)}async writeFilePromise(e,r,s){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,s)}writeFileSync(e,r,s){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,s)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,s){return this.baseFs.utimesPromise(this.mapToBase(e),r,s)}utimesSync(e,r,s){return this.baseFs.utimesSync(this.mapToBase(e),r,s)}async lutimesPromise(e,r,s){return this.baseFs.lutimesPromise(this.mapToBase(e),r,s)}lutimesSync(e,r,s){return this.baseFs.lutimesSync(this.mapToBase(e),r,s)}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,s){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,s);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),c=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(c,a,s)}symlinkSync(e,r,s){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,s);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),c=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(c,a,s)}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,s){return this.baseFs.watch(this.mapToBase(e),r,s)}watchFile(e,r,s){return this.baseFs.watchFile(this.mapToBase(e),r,s)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var _f,e$=Ze(()=>{yp();_f=class extends _s{constructor(e,{baseFs:r,pathUtils:s}){super(s),this.target=e,this.baseFs=r}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(e){return e}mapToBase(e){return e}}});function t$(t){let e=t;return typeof t.path=="string"&&(e.path=fe.toPortablePath(t.path)),e}var r$,Yn,Cd=Ze(()=>{r$=ut(Ie("fs"));Id();el();Yn=class extends Uf{constructor(e=r$.default){super(),this.realFs=e}getExtractHint(){return!1}getRealPath(){return vt.root}resolve(e){return J.resolve(e)}async openPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.open(fe.fromPortablePath(e),r,s,this.makeCallback(a,n))})}openSync(e,r,s){return this.realFs.openSync(fe.fromPortablePath(e),r,s)}async opendirPromise(e,r){return await new Promise((s,a)=>{typeof r<"u"?this.realFs.opendir(fe.fromPortablePath(e),r,this.makeCallback(s,a)):this.realFs.opendir(fe.fromPortablePath(e),this.makeCallback(s,a))}).then(s=>{let a=s;return Object.defineProperty(a,"path",{value:e,configurable:!0,writable:!0}),a})}opendirSync(e,r){let a=typeof r<"u"?this.realFs.opendirSync(fe.fromPortablePath(e),r):this.realFs.opendirSync(fe.fromPortablePath(e));return Object.defineProperty(a,"path",{value:e,configurable:!0,writable:!0}),a}async readPromise(e,r,s=0,a=0,n=-1){return await new Promise((c,f)=>{this.realFs.read(e,r,s,a,n,(p,h)=>{p?f(p):c(h)})})}readSync(e,r,s,a,n){return this.realFs.readSync(e,r,s,a,n)}async writePromise(e,r,s,a,n){return await new Promise((c,f)=>typeof r=="string"?this.realFs.write(e,r,s,this.makeCallback(c,f)):this.realFs.write(e,r,s,a,n,this.makeCallback(c,f)))}writeSync(e,r,s,a,n){return typeof r=="string"?this.realFs.writeSync(e,r,s):this.realFs.writeSync(e,r,s,a,n)}async closePromise(e){await new Promise((r,s)=>{this.realFs.close(e,this.makeCallback(r,s))})}closeSync(e){this.realFs.closeSync(e)}createReadStream(e,r){let s=e!==null?fe.fromPortablePath(e):e;return this.realFs.createReadStream(s,r)}createWriteStream(e,r){let s=e!==null?fe.fromPortablePath(e):e;return this.realFs.createWriteStream(s,r)}async realpathPromise(e){return await new Promise((r,s)=>{this.realFs.realpath(fe.fromPortablePath(e),{},this.makeCallback(r,s))}).then(r=>fe.toPortablePath(r))}realpathSync(e){return fe.toPortablePath(this.realFs.realpathSync(fe.fromPortablePath(e),{}))}async existsPromise(e){return await new Promise(r=>{this.realFs.exists(fe.fromPortablePath(e),r)})}accessSync(e,r){return this.realFs.accessSync(fe.fromPortablePath(e),r)}async accessPromise(e,r){return await new Promise((s,a)=>{this.realFs.access(fe.fromPortablePath(e),r,this.makeCallback(s,a))})}existsSync(e){return this.realFs.existsSync(fe.fromPortablePath(e))}async statPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.stat(fe.fromPortablePath(e),r,this.makeCallback(s,a)):this.realFs.stat(fe.fromPortablePath(e),this.makeCallback(s,a))})}statSync(e,r){return r?this.realFs.statSync(fe.fromPortablePath(e),r):this.realFs.statSync(fe.fromPortablePath(e))}async fstatPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.fstat(e,r,this.makeCallback(s,a)):this.realFs.fstat(e,this.makeCallback(s,a))})}fstatSync(e,r){return r?this.realFs.fstatSync(e,r):this.realFs.fstatSync(e)}async lstatPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.lstat(fe.fromPortablePath(e),r,this.makeCallback(s,a)):this.realFs.lstat(fe.fromPortablePath(e),this.makeCallback(s,a))})}lstatSync(e,r){return r?this.realFs.lstatSync(fe.fromPortablePath(e),r):this.realFs.lstatSync(fe.fromPortablePath(e))}async fchmodPromise(e,r){return await new Promise((s,a)=>{this.realFs.fchmod(e,r,this.makeCallback(s,a))})}fchmodSync(e,r){return this.realFs.fchmodSync(e,r)}async chmodPromise(e,r){return await new Promise((s,a)=>{this.realFs.chmod(fe.fromPortablePath(e),r,this.makeCallback(s,a))})}chmodSync(e,r){return this.realFs.chmodSync(fe.fromPortablePath(e),r)}async fchownPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.fchown(e,r,s,this.makeCallback(a,n))})}fchownSync(e,r,s){return this.realFs.fchownSync(e,r,s)}async chownPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.chown(fe.fromPortablePath(e),r,s,this.makeCallback(a,n))})}chownSync(e,r,s){return this.realFs.chownSync(fe.fromPortablePath(e),r,s)}async renamePromise(e,r){return await new Promise((s,a)=>{this.realFs.rename(fe.fromPortablePath(e),fe.fromPortablePath(r),this.makeCallback(s,a))})}renameSync(e,r){return this.realFs.renameSync(fe.fromPortablePath(e),fe.fromPortablePath(r))}async copyFilePromise(e,r,s=0){return await new Promise((a,n)=>{this.realFs.copyFile(fe.fromPortablePath(e),fe.fromPortablePath(r),s,this.makeCallback(a,n))})}copyFileSync(e,r,s=0){return this.realFs.copyFileSync(fe.fromPortablePath(e),fe.fromPortablePath(r),s)}async appendFilePromise(e,r,s){return await new Promise((a,n)=>{let c=typeof e=="string"?fe.fromPortablePath(e):e;s?this.realFs.appendFile(c,r,s,this.makeCallback(a,n)):this.realFs.appendFile(c,r,this.makeCallback(a,n))})}appendFileSync(e,r,s){let a=typeof e=="string"?fe.fromPortablePath(e):e;s?this.realFs.appendFileSync(a,r,s):this.realFs.appendFileSync(a,r)}async writeFilePromise(e,r,s){return await new Promise((a,n)=>{let c=typeof e=="string"?fe.fromPortablePath(e):e;s?this.realFs.writeFile(c,r,s,this.makeCallback(a,n)):this.realFs.writeFile(c,r,this.makeCallback(a,n))})}writeFileSync(e,r,s){let a=typeof e=="string"?fe.fromPortablePath(e):e;s?this.realFs.writeFileSync(a,r,s):this.realFs.writeFileSync(a,r)}async unlinkPromise(e){return await new Promise((r,s)=>{this.realFs.unlink(fe.fromPortablePath(e),this.makeCallback(r,s))})}unlinkSync(e){return this.realFs.unlinkSync(fe.fromPortablePath(e))}async utimesPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.utimes(fe.fromPortablePath(e),r,s,this.makeCallback(a,n))})}utimesSync(e,r,s){this.realFs.utimesSync(fe.fromPortablePath(e),r,s)}async lutimesPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.lutimes(fe.fromPortablePath(e),r,s,this.makeCallback(a,n))})}lutimesSync(e,r,s){this.realFs.lutimesSync(fe.fromPortablePath(e),r,s)}async mkdirPromise(e,r){return await new Promise((s,a)=>{this.realFs.mkdir(fe.fromPortablePath(e),r,this.makeCallback(s,a))})}mkdirSync(e,r){return this.realFs.mkdirSync(fe.fromPortablePath(e),r)}async rmdirPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.rmdir(fe.fromPortablePath(e),r,this.makeCallback(s,a)):this.realFs.rmdir(fe.fromPortablePath(e),this.makeCallback(s,a))})}rmdirSync(e,r){return this.realFs.rmdirSync(fe.fromPortablePath(e),r)}async rmPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.rm(fe.fromPortablePath(e),r,this.makeCallback(s,a)):this.realFs.rm(fe.fromPortablePath(e),this.makeCallback(s,a))})}rmSync(e,r){return this.realFs.rmSync(fe.fromPortablePath(e),r)}async linkPromise(e,r){return await new Promise((s,a)=>{this.realFs.link(fe.fromPortablePath(e),fe.fromPortablePath(r),this.makeCallback(s,a))})}linkSync(e,r){return this.realFs.linkSync(fe.fromPortablePath(e),fe.fromPortablePath(r))}async symlinkPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.symlink(fe.fromPortablePath(e.replace(/\/+$/,"")),fe.fromPortablePath(r),s,this.makeCallback(a,n))})}symlinkSync(e,r,s){return this.realFs.symlinkSync(fe.fromPortablePath(e.replace(/\/+$/,"")),fe.fromPortablePath(r),s)}async readFilePromise(e,r){return await new Promise((s,a)=>{let n=typeof e=="string"?fe.fromPortablePath(e):e;this.realFs.readFile(n,r,this.makeCallback(s,a))})}readFileSync(e,r){let s=typeof e=="string"?fe.fromPortablePath(e):e;return this.realFs.readFileSync(s,r)}async readdirPromise(e,r){return await new Promise((s,a)=>{r?r.recursive&&process.platform==="win32"?r.withFileTypes?this.realFs.readdir(fe.fromPortablePath(e),r,this.makeCallback(n=>s(n.map(t$)),a)):this.realFs.readdir(fe.fromPortablePath(e),r,this.makeCallback(n=>s(n.map(fe.toPortablePath)),a)):this.realFs.readdir(fe.fromPortablePath(e),r,this.makeCallback(s,a)):this.realFs.readdir(fe.fromPortablePath(e),this.makeCallback(s,a))})}readdirSync(e,r){return r?r.recursive&&process.platform==="win32"?r.withFileTypes?this.realFs.readdirSync(fe.fromPortablePath(e),r).map(t$):this.realFs.readdirSync(fe.fromPortablePath(e),r).map(fe.toPortablePath):this.realFs.readdirSync(fe.fromPortablePath(e),r):this.realFs.readdirSync(fe.fromPortablePath(e))}async readlinkPromise(e){return await new Promise((r,s)=>{this.realFs.readlink(fe.fromPortablePath(e),this.makeCallback(r,s))}).then(r=>fe.toPortablePath(r))}readlinkSync(e){return fe.toPortablePath(this.realFs.readlinkSync(fe.fromPortablePath(e)))}async truncatePromise(e,r){return await new Promise((s,a)=>{this.realFs.truncate(fe.fromPortablePath(e),r,this.makeCallback(s,a))})}truncateSync(e,r){return this.realFs.truncateSync(fe.fromPortablePath(e),r)}async ftruncatePromise(e,r){return await new Promise((s,a)=>{this.realFs.ftruncate(e,r,this.makeCallback(s,a))})}ftruncateSync(e,r){return this.realFs.ftruncateSync(e,r)}watch(e,r,s){return this.realFs.watch(fe.fromPortablePath(e),r,s)}watchFile(e,r,s){return this.realFs.watchFile(fe.fromPortablePath(e),r,s)}unwatchFile(e,r){return this.realFs.unwatchFile(fe.fromPortablePath(e),r)}makeCallback(e,r){return(s,a)=>{s?r(s):e(a)}}}});var Sn,n$=Ze(()=>{Cd();yp();el();Sn=class extends _s{constructor(e,{baseFs:r=new Yn}={}){super(J),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)?J.normalize(e):this.baseFs.resolve(J.join(this.target,e))}mapFromBase(e){return e}mapToBase(e){return this.pathUtils.isAbsolute(e)?e:this.pathUtils.join(this.target,e)}}});var i$,Hf,s$=Ze(()=>{Cd();yp();el();i$=vt.root,Hf=class extends _s{constructor(e,{baseFs:r=new Yn}={}){super(J),this.target=this.pathUtils.resolve(vt.root,e),this.baseFs=r}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(vt.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(i$,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(i$,this.pathUtils.relative(this.target,e))}}});var oE,o$=Ze(()=>{yp();oE=class extends _s{constructor(r,s){super(s);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 wd,tl,e0,a$=Ze(()=>{wd=Ie("fs");Id();Cd();DU();zb();el();tl=4278190080,e0=class extends Uf{constructor({baseFs:r=new Yn,filter:s=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:c=!0,maxAge:f=5e3,typeCheck:p=wd.constants.S_IFREG,getMountPoint:h,factoryPromise:E,factorySync:C}){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=c?new Map:null,this.factoryPromise=E,this.factorySync=C,this.filter=s,this.getMountPoint=h,this.magic=a<<24,this.maxAge=f,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(yd(this),this.mountInstances)for(let[r,{childFs:s}]of this.mountInstances.entries())s.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(yd(this),this.mountInstances)for(let[r,{childFs:s}]of this.mountInstances.entries())s.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,s){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,s]),a}async openPromise(r,s,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,s,a),async(n,{subPath:c})=>this.remapFd(n,await n.openPromise(c,s,a)))}openSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,s,a),(n,{subPath:c})=>this.remapFd(n,n.openSync(c,s,a)))}async opendirPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,s),async(a,{subPath:n})=>await a.opendirPromise(n,s),{requireSubpath:!1})}opendirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,s),(a,{subPath:n})=>a.opendirSync(n,s),{requireSubpath:!1})}async readPromise(r,s,a,n,c){if((r&tl)!==this.magic)return await this.baseFs.readPromise(r,s,a,n,c);let f=this.fdMap.get(r);if(typeof f>"u")throw Mo("read");let[p,h]=f;return await p.readPromise(h,s,a,n,c)}readSync(r,s,a,n,c){if((r&tl)!==this.magic)return this.baseFs.readSync(r,s,a,n,c);let f=this.fdMap.get(r);if(typeof f>"u")throw Mo("readSync");let[p,h]=f;return p.readSync(h,s,a,n,c)}async writePromise(r,s,a,n,c){if((r&tl)!==this.magic)return typeof s=="string"?await this.baseFs.writePromise(r,s,a):await this.baseFs.writePromise(r,s,a,n,c);let f=this.fdMap.get(r);if(typeof f>"u")throw Mo("write");let[p,h]=f;return typeof s=="string"?await p.writePromise(h,s,a):await p.writePromise(h,s,a,n,c)}writeSync(r,s,a,n,c){if((r&tl)!==this.magic)return typeof s=="string"?this.baseFs.writeSync(r,s,a):this.baseFs.writeSync(r,s,a,n,c);let f=this.fdMap.get(r);if(typeof f>"u")throw Mo("writeSync");let[p,h]=f;return typeof s=="string"?p.writeSync(h,s,a):p.writeSync(h,s,a,n,c)}async closePromise(r){if((r&tl)!==this.magic)return await this.baseFs.closePromise(r);let s=this.fdMap.get(r);if(typeof s>"u")throw Mo("close");this.fdMap.delete(r);let[a,n]=s;return await a.closePromise(n)}closeSync(r){if((r&tl)!==this.magic)return this.baseFs.closeSync(r);let s=this.fdMap.get(r);if(typeof s>"u")throw Mo("closeSync");this.fdMap.delete(r);let[a,n]=s;return a.closeSync(n)}createReadStream(r,s){return r===null?this.baseFs.createReadStream(r,s):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,s),(a,{archivePath:n,subPath:c})=>{let f=a.createReadStream(c,s);return f.path=fe.fromPortablePath(this.pathUtils.join(n,c)),f})}createWriteStream(r,s){return r===null?this.baseFs.createWriteStream(r,s):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,s),(a,{subPath:n})=>a.createWriteStream(n,s))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(s,{archivePath:a,subPath:n})=>{let c=this.realPaths.get(a);return typeof c>"u"&&(c=await this.baseFs.realpathPromise(a),this.realPaths.set(a,c)),this.pathUtils.join(c,this.pathUtils.relative(vt.root,await s.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(s,{archivePath:a,subPath:n})=>{let c=this.realPaths.get(a);return typeof c>"u"&&(c=this.baseFs.realpathSync(a),this.realPaths.set(a,c)),this.pathUtils.join(c,this.pathUtils.relative(vt.root,s.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(s,{subPath:a})=>await s.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(s,{subPath:a})=>s.existsSync(a))}async accessPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,s),async(a,{subPath:n})=>await a.accessPromise(n,s))}accessSync(r,s){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,s),(a,{subPath:n})=>a.accessSync(n,s))}async statPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,s),async(a,{subPath:n})=>await a.statPromise(n,s))}statSync(r,s){return this.makeCallSync(r,()=>this.baseFs.statSync(r,s),(a,{subPath:n})=>a.statSync(n,s))}async fstatPromise(r,s){if((r&tl)!==this.magic)return this.baseFs.fstatPromise(r,s);let a=this.fdMap.get(r);if(typeof a>"u")throw Mo("fstat");let[n,c]=a;return n.fstatPromise(c,s)}fstatSync(r,s){if((r&tl)!==this.magic)return this.baseFs.fstatSync(r,s);let a=this.fdMap.get(r);if(typeof a>"u")throw Mo("fstatSync");let[n,c]=a;return n.fstatSync(c,s)}async lstatPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,s),async(a,{subPath:n})=>await a.lstatPromise(n,s))}lstatSync(r,s){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,s),(a,{subPath:n})=>a.lstatSync(n,s))}async fchmodPromise(r,s){if((r&tl)!==this.magic)return this.baseFs.fchmodPromise(r,s);let a=this.fdMap.get(r);if(typeof a>"u")throw Mo("fchmod");let[n,c]=a;return n.fchmodPromise(c,s)}fchmodSync(r,s){if((r&tl)!==this.magic)return this.baseFs.fchmodSync(r,s);let a=this.fdMap.get(r);if(typeof a>"u")throw Mo("fchmodSync");let[n,c]=a;return n.fchmodSync(c,s)}async chmodPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,s),async(a,{subPath:n})=>await a.chmodPromise(n,s))}chmodSync(r,s){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,s),(a,{subPath:n})=>a.chmodSync(n,s))}async fchownPromise(r,s,a){if((r&tl)!==this.magic)return this.baseFs.fchownPromise(r,s,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Mo("fchown");let[c,f]=n;return c.fchownPromise(f,s,a)}fchownSync(r,s,a){if((r&tl)!==this.magic)return this.baseFs.fchownSync(r,s,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Mo("fchownSync");let[c,f]=n;return c.fchownSync(f,s,a)}async chownPromise(r,s,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,s,a),async(n,{subPath:c})=>await n.chownPromise(c,s,a))}chownSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,s,a),(n,{subPath:c})=>n.chownSync(c,s,a))}async renamePromise(r,s){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(s,async()=>await this.baseFs.renamePromise(r,s),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(s,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(c,{subPath:f})=>{if(a!==c)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,f)}))}renameSync(r,s){return this.makeCallSync(r,()=>this.makeCallSync(s,()=>this.baseFs.renameSync(r,s),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(s,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(c,{subPath:f})=>{if(a!==c)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,f)}))}async copyFilePromise(r,s,a=0){let n=async(c,f,p,h)=>{if(a&wd.constants.COPYFILE_FICLONE_FORCE)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${f}' -> ${h}'`),{code:"EXDEV"});if(a&wd.constants.COPYFILE_EXCL&&await this.existsPromise(f))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${f}' -> '${h}'`),{code:"EEXIST"});let E;try{E=await c.readFilePromise(f)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${f}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,E)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(s,async()=>await this.baseFs.copyFilePromise(r,s,a),async(c,{subPath:f})=>await n(this.baseFs,r,c,f)),async(c,{subPath:f})=>await this.makeCallPromise(s,async()=>await n(c,f,this.baseFs,s),async(p,{subPath:h})=>c!==p?await n(c,f,p,h):await c.copyFilePromise(f,h,a)))}copyFileSync(r,s,a=0){let n=(c,f,p,h)=>{if(a&wd.constants.COPYFILE_FICLONE_FORCE)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${f}' -> ${h}'`),{code:"EXDEV"});if(a&wd.constants.COPYFILE_EXCL&&this.existsSync(f))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${f}' -> '${h}'`),{code:"EEXIST"});let E;try{E=c.readFileSync(f)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${f}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,E)};return this.makeCallSync(r,()=>this.makeCallSync(s,()=>this.baseFs.copyFileSync(r,s,a),(c,{subPath:f})=>n(this.baseFs,r,c,f)),(c,{subPath:f})=>this.makeCallSync(s,()=>n(c,f,this.baseFs,s),(p,{subPath:h})=>c!==p?n(c,f,p,h):c.copyFileSync(f,h,a)))}async appendFilePromise(r,s,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,s,a),async(n,{subPath:c})=>await n.appendFilePromise(c,s,a))}appendFileSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,s,a),(n,{subPath:c})=>n.appendFileSync(c,s,a))}async writeFilePromise(r,s,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,s,a),async(n,{subPath:c})=>await n.writeFilePromise(c,s,a))}writeFileSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,s,a),(n,{subPath:c})=>n.writeFileSync(c,s,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(s,{subPath:a})=>await s.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(s,{subPath:a})=>s.unlinkSync(a))}async utimesPromise(r,s,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,s,a),async(n,{subPath:c})=>await n.utimesPromise(c,s,a))}utimesSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,s,a),(n,{subPath:c})=>n.utimesSync(c,s,a))}async lutimesPromise(r,s,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,s,a),async(n,{subPath:c})=>await n.lutimesPromise(c,s,a))}lutimesSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,s,a),(n,{subPath:c})=>n.lutimesSync(c,s,a))}async mkdirPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,s),async(a,{subPath:n})=>await a.mkdirPromise(n,s))}mkdirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,s),(a,{subPath:n})=>a.mkdirSync(n,s))}async rmdirPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,s),async(a,{subPath:n})=>await a.rmdirPromise(n,s))}rmdirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,s),(a,{subPath:n})=>a.rmdirSync(n,s))}async rmPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.rmPromise(r,s),async(a,{subPath:n})=>await a.rmPromise(n,s))}rmSync(r,s){return this.makeCallSync(r,()=>this.baseFs.rmSync(r,s),(a,{subPath:n})=>a.rmSync(n,s))}async linkPromise(r,s){return await this.makeCallPromise(s,async()=>await this.baseFs.linkPromise(r,s),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,s){return this.makeCallSync(s,()=>this.baseFs.linkSync(r,s),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,s,a){return await this.makeCallPromise(s,async()=>await this.baseFs.symlinkPromise(r,s,a),async(n,{subPath:c})=>await n.symlinkPromise(r,c))}symlinkSync(r,s,a){return this.makeCallSync(s,()=>this.baseFs.symlinkSync(r,s,a),(n,{subPath:c})=>n.symlinkSync(r,c))}async readFilePromise(r,s){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,s),async(a,{subPath:n})=>await a.readFilePromise(n,s))}readFileSync(r,s){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,s),(a,{subPath:n})=>a.readFileSync(n,s))}async readdirPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,s),async(a,{subPath:n})=>await a.readdirPromise(n,s),{requireSubpath:!1})}readdirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,s),(a,{subPath:n})=>a.readdirSync(n,s),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(s,{subPath:a})=>await s.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(s,{subPath:a})=>s.readlinkSync(a))}async truncatePromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,s),async(a,{subPath:n})=>await a.truncatePromise(n,s))}truncateSync(r,s){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,s),(a,{subPath:n})=>a.truncateSync(n,s))}async ftruncatePromise(r,s){if((r&tl)!==this.magic)return this.baseFs.ftruncatePromise(r,s);let a=this.fdMap.get(r);if(typeof a>"u")throw Mo("ftruncate");let[n,c]=a;return n.ftruncatePromise(c,s)}ftruncateSync(r,s){if((r&tl)!==this.magic)return this.baseFs.ftruncateSync(r,s);let a=this.fdMap.get(r);if(typeof a>"u")throw Mo("ftruncateSync");let[n,c]=a;return n.ftruncateSync(c,s)}watch(r,s,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,s,a),(n,{subPath:c})=>n.watch(c,s,a))}watchFile(r,s,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,s,a),()=>sE(this,r,s,a))}unwatchFile(r,s){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,s),()=>md(this,r,s))}async makeCallPromise(r,s,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await s();let c=this.resolve(r),f=this.findMount(c);return f?n&&f.subPath==="/"?await s():await this.getMountPromise(f.archivePath,async p=>await a(p,f)):await s()}makeCallSync(r,s,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return s();let c=this.resolve(r),f=this.findMount(c);return!f||n&&f.subPath==="/"?s():this.getMountSync(f.archivePath,p=>a(p,f))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let s="";for(;;){let a=r.substring(s.length),n=this.getMountPoint(a,s);if(!n)return null;if(s=this.pathUtils.join(s,n),!this.isMount.has(s)){if(this.notMount.has(s))continue;try{if(this.typeCheck!==null&&(this.baseFs.statSync(s).mode&wd.constants.S_IFMT)!==this.typeCheck){this.notMount.add(s);continue}}catch{return null}this.isMount.add(s)}return{archivePath:s,subPath:this.pathUtils.join(vt.root,r.substring(s.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let s=Date.now(),a=s+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[c,{childFs:f,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||f.hasOpenFileHandles?.())){if(s>=p){f.saveAndClose?.(),this.mountInstances.delete(c),n-=1;continue}else if(r===null||n<=0){a=p;break}f.saveAndClose?.(),this.mountInstances.delete(c),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-s).unref())}async getMountPromise(r,s){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 s(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await s(a)}finally{a.saveAndClose?.()}}}getMountSync(r,s){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,s(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return s(a)}finally{a.saveAndClose?.()}}}}});var er,nx,l$=Ze(()=>{Id();el();er=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),nx=class t extends mp{static{this.instance=new t}constructor(){super(J)}getExtractHint(){throw er()}getRealPath(){throw er()}resolve(){throw er()}async openPromise(){throw er()}openSync(){throw er()}async opendirPromise(){throw er()}opendirSync(){throw er()}async readPromise(){throw er()}readSync(){throw er()}async writePromise(){throw er()}writeSync(){throw er()}async closePromise(){throw er()}closeSync(){throw er()}createWriteStream(){throw er()}createReadStream(){throw er()}async realpathPromise(){throw er()}realpathSync(){throw er()}async readdirPromise(){throw er()}readdirSync(){throw er()}async existsPromise(e){throw er()}existsSync(e){throw er()}async accessPromise(){throw er()}accessSync(){throw er()}async statPromise(){throw er()}statSync(){throw er()}async fstatPromise(e){throw er()}fstatSync(e){throw er()}async lstatPromise(e){throw er()}lstatSync(e){throw er()}async fchmodPromise(){throw er()}fchmodSync(){throw er()}async chmodPromise(){throw er()}chmodSync(){throw er()}async fchownPromise(){throw er()}fchownSync(){throw er()}async chownPromise(){throw er()}chownSync(){throw er()}async mkdirPromise(){throw er()}mkdirSync(){throw er()}async rmdirPromise(){throw er()}rmdirSync(){throw er()}async rmPromise(){throw er()}rmSync(){throw er()}async linkPromise(){throw er()}linkSync(){throw er()}async symlinkPromise(){throw er()}symlinkSync(){throw er()}async renamePromise(){throw er()}renameSync(){throw er()}async copyFilePromise(){throw er()}copyFileSync(){throw er()}async appendFilePromise(){throw er()}appendFileSync(){throw er()}async writeFilePromise(){throw er()}writeFileSync(){throw er()}async unlinkPromise(){throw er()}unlinkSync(){throw er()}async utimesPromise(){throw er()}utimesSync(){throw er()}async lutimesPromise(){throw er()}lutimesSync(){throw er()}async readFilePromise(){throw er()}readFileSync(){throw er()}async readlinkPromise(){throw er()}readlinkSync(){throw er()}async truncatePromise(){throw er()}truncateSync(){throw er()}async ftruncatePromise(e,r){throw er()}ftruncateSync(e,r){throw er()}watch(){throw er()}watchFile(){throw er()}unwatchFile(){throw er()}}});var t0,c$=Ze(()=>{yp();el();t0=class extends _s{constructor(e){super(fe),this.baseFs=e}mapFromBase(e){return fe.fromPortablePath(e)}mapToBase(e){return fe.toPortablePath(e)}}});var nqe,PU,iqe,uo,u$=Ze(()=>{Cd();yp();el();nqe=/^[0-9]+$/,PU=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,iqe=/^([^/]+-)?[a-f0-9]+$/,uo=class t extends _s{static makeVirtualPath(e,r,s){if(J.basename(e)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!J.basename(r).match(iqe))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let n=J.relative(J.dirname(e),s).split("/"),c=0;for(;c{bU=ut(Ie("buffer")),f$=Ie("url"),A$=Ie("util");yp();el();ix=class extends _s{constructor(e){super(fe),this.baseFs=e}mapFromBase(e){return e}mapToBase(e){if(typeof e=="string")return e;if(e instanceof URL)return(0,f$.fileURLToPath)(e);if(Buffer.isBuffer(e)){let r=e.toString();if(!sqe(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,A$.inspect)(e)}`)}}});var y$,Uo,Ep,r0,sx,ox,aE,Tu,Fu,h$,g$,d$,m$,M2,E$=Ze(()=>{y$=Ie("readline"),Uo=Symbol("kBaseFs"),Ep=Symbol("kFd"),r0=Symbol("kClosePromise"),sx=Symbol("kCloseResolve"),ox=Symbol("kCloseReject"),aE=Symbol("kRefs"),Tu=Symbol("kRef"),Fu=Symbol("kUnref"),M2=class{constructor(e,r){this[m$]=1;this[d$]=void 0;this[g$]=void 0;this[h$]=void 0;this[Uo]=r,this[Ep]=e}get fd(){return this[Ep]}async appendFile(e,r){try{this[Tu](this.appendFile);let s=(typeof r=="string"?r:r?.encoding)??void 0;return await this[Uo].appendFilePromise(this.fd,e,s?{encoding:s}:void 0)}finally{this[Fu]()}}async chown(e,r){try{return this[Tu](this.chown),await this[Uo].fchownPromise(this.fd,e,r)}finally{this[Fu]()}}async chmod(e){try{return this[Tu](this.chmod),await this[Uo].fchmodPromise(this.fd,e)}finally{this[Fu]()}}createReadStream(e){return this[Uo].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Uo].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,s,a){try{this[Tu](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,s=e.length??n.byteLength,a=e.position??null),r??=0,s??=0,s===0?{bytesRead:s,buffer:n}:{bytesRead:await this[Uo].readPromise(this.fd,n,r,s,a),buffer:n}}finally{this[Fu]()}}async readFile(e){try{this[Tu](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[Uo].readFilePromise(this.fd,r)}finally{this[Fu]()}}readLines(e){return(0,y$.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Tu](this.stat),await this[Uo].fstatPromise(this.fd,e)}finally{this[Fu]()}}async truncate(e){try{return this[Tu](this.truncate),await this[Uo].ftruncatePromise(this.fd,e)}finally{this[Fu]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[Tu](this.writeFile);let s=(typeof r=="string"?r:r?.encoding)??void 0;await this[Uo].writeFilePromise(this.fd,e,s)}finally{this[Fu]()}}async write(...e){try{if(this[Tu](this.write),ArrayBuffer.isView(e[0])){let[r,s,a,n]=e;return{bytesWritten:await this[Uo].writePromise(this.fd,r,s??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,s,a]=e;return{bytesWritten:await this[Uo].writePromise(this.fd,r,s,a),buffer:r}}}finally{this[Fu]()}}async writev(e,r){try{this[Tu](this.writev);let s=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);s+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);s+=n.bytesWritten}return{buffers:e,bytesWritten:s}}finally{this[Fu]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[Ep]===-1)return Promise.resolve();if(this[r0])return this[r0];if(this[aE]--,this[aE]===0){let e=this[Ep];this[Ep]=-1,this[r0]=this[Uo].closePromise(e).finally(()=>{this[r0]=void 0})}else this[r0]=new Promise((e,r)=>{this[sx]=e,this[ox]=r}).finally(()=>{this[r0]=void 0,this[ox]=void 0,this[sx]=void 0});return this[r0]}[(Uo,Ep,m$=aE,d$=r0,g$=sx,h$=ox,Tu)](e){if(this[Ep]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[aE]++}[Fu](){if(this[aE]--,this[aE]===0){let e=this[Ep];this[Ep]=-1,this[Uo].closePromise(e).then(this[sx],this[ox])}}}});function U2(t,e){e=new ix(e);let r=(s,a,n)=>{let c=s[a];s[a]=n,typeof c?.[lE.promisify.custom]<"u"&&(n[lE.promisify.custom]=c[lE.promisify.custom])};{r(t,"exists",(s,...a)=>{let c=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(s).then(f=>{c(f)},()=>{c(!1)})})}),r(t,"read",(...s)=>{let[a,n,c,f,p,h]=s;if(s.length<=3){let E={};s.length<3?h=s[1]:(E=s[1],h=s[2]),{buffer:n=Buffer.alloc(16384),offset:c=0,length:f=n.byteLength,position:p}=E}if(c==null&&(c=0),f|=0,f===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,c,f,p).then(E=>{h(null,E,n)},E=>{h(E,0,n)})})});for(let s of I$){let a=s.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[s];if(typeof n>"u")continue;r(t,a,(...f)=>{let h=typeof f[f.length-1]=="function"?f.pop():()=>{};process.nextTick(()=>{n.apply(e,f).then(E=>{h(null,E)},E=>{h(E)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",s=>{try{return e.existsSync(s)}catch{return!1}}),r(t,"readSync",(...s)=>{let[a,n,c,f,p]=s;return s.length<=3&&({offset:c=0,length:f=n.byteLength,position:p}=s[2]||{}),c==null&&(c=0),f|=0,f===0?0:(p==null&&(p=-1),e.readSync(a,n,c,f,p))});for(let s of oqe){let a=s;if(typeof t[a]>"u")continue;let n=e[s];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let s=t.promises;for(let a of I$){let n=a.replace(/Promise$/,"");if(typeof s[n]>"u")continue;let c=e[a];typeof c>"u"||a!=="open"&&r(s,n,(f,...p)=>f instanceof M2?f[n].apply(f,p):c.call(e,f,...p))}r(s,"open",async(...a)=>{let n=await e.openPromise(...a);return new M2(n,e)})}t.read[lE.promisify.custom]=async(s,a,...n)=>({bytesRead:await e.readPromise(s,a,...n),buffer:a}),t.write[lE.promisify.custom]=async(s,a,...n)=>({bytesWritten:await e.writePromise(s,a,...n),buffer:a})}function ax(t,e){let r=Object.create(t);return U2(r,e),r}var lE,oqe,I$,C$=Ze(()=>{lE=Ie("util");p$();E$();oqe=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"]),I$=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 w$(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function B$(){if(xU)return xU;let t=fe.toPortablePath(v$.default.tmpdir()),e=ce.realpathSync(t);return process.once("exit",()=>{ce.rmtempSync()}),xU={tmpdir:t,realTmpdir:e}}var v$,Nu,xU,ce,S$=Ze(()=>{v$=ut(Ie("os"));Cd();el();Nu=new Set,xU=null;ce=Object.assign(new Yn,{detachTemp(t){Nu.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=B$();for(;;){let s=w$("xfs-");try{this.mkdirSync(J.join(e,s))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=J.join(r,s);if(Nu.add(a),typeof t>"u")return a;try{return t(a)}finally{if(Nu.has(a)){Nu.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=B$();for(;;){let s=w$("xfs-");try{await this.mkdirPromise(J.join(e,s))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=J.join(r,s);if(Nu.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(Nu.has(a)){Nu.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Nu.values()).map(async t=>{try{await ce.removePromise(t,{maxRetries:0}),Nu.delete(t)}catch{}}))},rmtempSync(){for(let t of Nu)try{ce.removeSync(t),Nu.delete(t)}catch{}}})});var _2={};Vt(_2,{AliasFS:()=>_f,BasePortableFakeFS:()=>Uf,CustomDir:()=>L2,CwdFS:()=>Sn,FakeFS:()=>mp,Filename:()=>Er,JailFS:()=>Hf,LazyFS:()=>oE,MountFS:()=>e0,NoFS:()=>nx,NodeFS:()=>Yn,PortablePath:()=>vt,PosixFS:()=>t0,ProxiedFS:()=>_s,VirtualFS:()=>uo,constants:()=>fi,errors:()=>or,extendFs:()=>ax,normalizeLineEndings:()=>Ed,npath:()=>fe,opendir:()=>ex,patchFs:()=>U2,ppath:()=>J,setupCopyIndex:()=>$b,statUtils:()=>$a,unwatchAllFiles:()=>yd,unwatchFile:()=>md,watchFile:()=>sE,xfs:()=>ce});var Dt=Ze(()=>{jX();zb();wU();SU();JX();DU();Id();el();el();e$();Id();n$();s$();o$();a$();l$();Cd();c$();yp();u$();C$();S$()});var k$=_((mkt,x$)=>{x$.exports=b$;b$.sync=lqe;var D$=Ie("fs");function aqe(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 s=0;s{F$.exports=R$;R$.sync=cqe;var Q$=Ie("fs");function R$(t,e,r){Q$.stat(t,function(s,a){r(s,s?!1:T$(a,e))})}function cqe(t,e){return T$(Q$.statSync(t),e)}function T$(t,e){return t.isFile()&&uqe(t,e)}function uqe(t,e){var r=t.mode,s=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),c=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),f=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),E=f|p,C=r&h||r&p&&a===c||r&f&&s===n||r&E&&n===0;return C}});var L$=_((Ikt,O$)=>{var Ekt=Ie("fs"),lx;process.platform==="win32"||global.TESTING_WINDOWS?lx=k$():lx=N$();O$.exports=kU;kU.sync=fqe;function kU(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(s,a){kU(t,e||{},function(n,c){n?a(n):s(c)})})}lx(t,e||{},function(s,a){s&&(s.code==="EACCES"||e&&e.ignoreErrors)&&(s=null,a=!1),r(s,a)})}function fqe(t,e){try{return lx.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var q$=_((Ckt,G$)=>{var cE=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",M$=Ie("path"),Aqe=cE?";":":",U$=L$(),_$=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),H$=(t,e)=>{let r=e.colon||Aqe,s=t.match(/\//)||cE&&t.match(/\\/)?[""]:[...cE?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=cE?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=cE?a.split(r):[""];return cE&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:s,pathExt:n,pathExtExe:a}},j$=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:s,pathExt:a,pathExtExe:n}=H$(t,e),c=[],f=h=>new Promise((E,C)=>{if(h===s.length)return e.all&&c.length?E(c):C(_$(t));let S=s[h],b=/^".*"$/.test(S)?S.slice(1,-1):S,I=M$.join(b,t),T=!b&&/^\.[\\\/]/.test(t)?t.slice(0,2)+I:I;E(p(T,h,0))}),p=(h,E,C)=>new Promise((S,b)=>{if(C===a.length)return S(f(E+1));let I=a[C];U$(h+I,{pathExt:n},(T,N)=>{if(!T&&N)if(e.all)c.push(h+I);else return S(h+I);return S(p(h,E,C+1))})});return r?f(0).then(h=>r(null,h),r):f(0)},pqe=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:s,pathExtExe:a}=H$(t,e),n=[];for(let c=0;c{"use strict";var W$=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(s=>s.toUpperCase()==="PATH")||"Path"};QU.exports=W$;QU.exports.default=W$});var z$=_((Bkt,K$)=>{"use strict";var V$=Ie("path"),hqe=q$(),gqe=Y$();function J$(t,e){let r=t.options.env||process.env,s=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 c;try{c=hqe.sync(t.command,{path:r[gqe({env:r})],pathExt:e?V$.delimiter:void 0})}catch{}finally{n&&process.chdir(s)}return c&&(c=V$.resolve(a?t.options.cwd:"",c)),c}function dqe(t){return J$(t)||J$(t,!0)}K$.exports=dqe});var Z$=_((vkt,TU)=>{"use strict";var RU=/([()\][%!^"`<>&|;, *?])/g;function mqe(t){return t=t.replace(RU,"^$1"),t}function yqe(t,e){return t=`${t}`,t=t.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),t=t.replace(/(?=(\\+?)?)\1$/,"$1$1"),t=`"${t}"`,t=t.replace(RU,"^$1"),e&&(t=t.replace(RU,"^$1")),t}TU.exports.command=mqe;TU.exports.argument=yqe});var $$=_((Skt,X$)=>{"use strict";X$.exports=/^#!(.*)/});var tee=_((Dkt,eee)=>{"use strict";var Eqe=$$();eee.exports=(t="")=>{let e=t.match(Eqe);if(!e)return null;let[r,s]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?s:s?`${a} ${s}`:a}});var nee=_((Pkt,ree)=>{"use strict";var FU=Ie("fs"),Iqe=tee();function Cqe(t){let r=Buffer.alloc(150),s;try{s=FU.openSync(t,"r"),FU.readSync(s,r,0,150,0),FU.closeSync(s)}catch{}return Iqe(r.toString())}ree.exports=Cqe});var aee=_((bkt,oee)=>{"use strict";var wqe=Ie("path"),iee=z$(),see=Z$(),Bqe=nee(),vqe=process.platform==="win32",Sqe=/\.(?:com|exe)$/i,Dqe=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function Pqe(t){t.file=iee(t);let e=t.file&&Bqe(t.file);return e?(t.args.unshift(t.file),t.command=e,iee(t)):t.file}function bqe(t){if(!vqe)return t;let e=Pqe(t),r=!Sqe.test(e);if(t.options.forceShell||r){let s=Dqe.test(e);t.command=wqe.normalize(t.command),t.command=see.command(t.command),t.args=t.args.map(n=>see.argument(n,s));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 xqe(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let s={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?s:bqe(s)}oee.exports=xqe});var uee=_((xkt,cee)=>{"use strict";var NU=process.platform==="win32";function OU(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 kqe(t,e){if(!NU)return;let r=t.emit;t.emit=function(s,a){if(s==="exit"){let n=lee(a,e);if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function lee(t,e){return NU&&t===1&&!e.file?OU(e.original,"spawn"):null}function Qqe(t,e){return NU&&t===1&&!e.file?OU(e.original,"spawnSync"):null}cee.exports={hookChildProcess:kqe,verifyENOENT:lee,verifyENOENTSync:Qqe,notFoundError:OU}});var UU=_((kkt,uE)=>{"use strict";var fee=Ie("child_process"),LU=aee(),MU=uee();function Aee(t,e,r){let s=LU(t,e,r),a=fee.spawn(s.command,s.args,s.options);return MU.hookChildProcess(a,s),a}function Rqe(t,e,r){let s=LU(t,e,r),a=fee.spawnSync(s.command,s.args,s.options);return a.error=a.error||MU.verifyENOENTSync(a.status,s),a}uE.exports=Aee;uE.exports.spawn=Aee;uE.exports.sync=Rqe;uE.exports._parse=LU;uE.exports._enoent=MU});var hee=_((Qkt,pee)=>{"use strict";function Tqe(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Bd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.location=s,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Bd)}Tqe(Bd,Error);Bd.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",C;for(C=0;C0){for(C=1,S=1;C>",P=ur(">>",!1),y=">&",F=ur(">&",!1),z=">",Z=ur(">",!1),$="<<<",oe=ur("<<<",!1),xe="<&",Re=ur("<&",!1),lt="<",Ct=ur("<",!1),qt=function(O){return{type:"argument",segments:[].concat(...O)}},ir=function(O){return O},bt="$'",gn=ur("$'",!1),br="'",Ir=ur("'",!1),Or=function(O){return[{type:"text",text:O}]},nn='""',ai=ur('""',!1),Io=function(){return{type:"text",text:""}},ts='"',$s=ur('"',!1),Co=function(O){return O},Hi=function(O){return{type:"arithmetic",arithmetic:O,quoted:!0}},eo=function(O){return{type:"shell",shell:O,quoted:!0}},wo=function(O){return{type:"variable",...O,quoted:!0}},QA=function(O){return{type:"text",text:O}},Af=function(O){return{type:"arithmetic",arithmetic:O,quoted:!1}},dh=function(O){return{type:"shell",shell:O,quoted:!1}},mh=function(O){return{type:"variable",...O,quoted:!1}},to=function(O){return{type:"glob",pattern:O}},jn=/^[^']/,Rs=Ki(["'"],!0,!1),ro=function(O){return O.join("")},ou=/^[^$"]/,au=Ki(["$",'"'],!0,!1),lu=`\\ -`,RA=ur(`\\ -`,!1),TA=function(){return""},oa="\\",aa=ur("\\",!1),FA=/^[\\$"`]/,gr=Ki(["\\","$",'"',"`"],!1,!1),Bo=function(O){return O},Me="\\a",cu=ur("\\a",!1),Cr=function(){return"a"},pf="\\b",NA=ur("\\b",!1),OA=function(){return"\b"},uu=/^[Ee]/,fu=Ki(["E","e"],!1,!1),oc=function(){return"\x1B"},ve="\\f",Nt=ur("\\f",!1),ac=function(){return"\f"},Oi="\\n",no=ur("\\n",!1),Tt=function(){return` -`},xn="\\r",la=ur("\\r",!1),ji=function(){return"\r"},Li="\\t",Na=ur("\\t",!1),dn=function(){return" "},Kn="\\v",Au=ur("\\v",!1),yh=function(){return"\v"},Oa=/^[\\'"?]/,La=Ki(["\\","'",'"',"?"],!1,!1),Ma=function(O){return String.fromCharCode(parseInt(O,16))},$e="\\x",Ua=ur("\\x",!1),hf="\\u",lc=ur("\\u",!1),wn="\\U",ca=ur("\\U",!1),LA=function(O){return String.fromCodePoint(parseInt(O,16))},MA=/^[0-7]/,ua=Ki([["0","7"]],!1,!1),Bl=/^[0-9a-fA-f]/,Mt=Ki([["0","9"],["a","f"],["A","f"]],!1,!1),kn=yf(),fa="{}",Ha=ur("{}",!1),rs=function(){return"{}"},cc="-",pu=ur("-",!1),uc="+",ja=ur("+",!1),Mi=".",Is=ur(".",!1),vl=function(O,K,re){return{type:"number",value:(O==="-"?-1:1)*parseFloat(K.join("")+"."+re.join(""))}},gf=function(O,K){return{type:"number",value:(O==="-"?-1:1)*parseInt(K.join(""))}},fc=function(O){return{type:"variable",...O}},wi=function(O){return{type:"variable",name:O}},Qn=function(O){return O},Ac="*",Ke=ur("*",!1),st="/",St=ur("/",!1),lr=function(O,K,re){return{type:K==="*"?"multiplication":"division",right:re}},te=function(O,K){return K.reduce((re,de)=>({left:re,...de}),O)},Ee=function(O,K,re){return{type:K==="+"?"addition":"subtraction",right:re}},Oe="$((",dt=ur("$((",!1),Et="))",Pt=ur("))",!1),tr=function(O){return O},An="$(",li=ur("$(",!1),Gi=function(O){return O},Rn="${",Ga=ur("${",!1),my=":-",X1=ur(":-",!1),vo=function(O,K){return{name:O,defaultValue:K}},yy=":-}",Eh=ur(":-}",!1),$1=function(O){return{name:O,defaultValue:[]}},So=":+",Ih=ur(":+",!1),Ch=function(O,K){return{name:O,alternativeValue:K}},hu=":+}",wh=ur(":+}",!1),Fg=function(O){return{name:O,alternativeValue:[]}},Ng=function(O){return{name:O}},Og="$",Ey=ur("$",!1),df=function(O){return e.isGlobPattern(O)},Do=function(O){return O},Sl=/^[a-zA-Z0-9_]/,Bh=Ki([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Lg=function(){return By()},Dl=/^[$@*?#a-zA-Z0-9_\-]/,Pl=Ki(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),Iy=/^[()}<>$|&; \t"']/,UA=Ki(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),Cy=/^[<>&; \t"']/,wy=Ki(["<",">","&",";"," "," ",'"',"'"],!1,!1),_A=/^[ \t]/,HA=Ki([" "," "],!1,!1),Y=0,xt=0,jA=[{line:1,column:1}],Po=0,mf=[],yt=0,gu;if("startRule"in e){if(!(e.startRule in s))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=s[e.startRule]}function By(){return t.substring(xt,Y)}function Mg(){return Ef(xt,Y)}function e2(O,K){throw K=K!==void 0?K:Ef(xt,Y),GA([Ug(O)],t.substring(xt,Y),K)}function vh(O,K){throw K=K!==void 0?K:Ef(xt,Y),di(O,K)}function ur(O,K){return{type:"literal",text:O,ignoreCase:K}}function Ki(O,K,re){return{type:"class",parts:O,inverted:K,ignoreCase:re}}function yf(){return{type:"any"}}function qa(){return{type:"end"}}function Ug(O){return{type:"other",description:O}}function du(O){var K=jA[O],re;if(K)return K;for(re=O-1;!jA[re];)re--;for(K=jA[re],K={line:K.line,column:K.column};rePo&&(Po=Y,mf=[]),mf.push(O))}function di(O,K){return new Bd(O,null,null,K)}function GA(O,K,re){return new Bd(Bd.buildMessage(O,K),O,K,re)}function Wa(){var O,K,re;for(O=Y,K=[],re=kt();re!==r;)K.push(re),re=kt();return K!==r?(re=Aa(),re===r&&(re=null),re!==r?(xt=O,K=n(re),O=K):(Y=O,O=r)):(Y=O,O=r),O}function Aa(){var O,K,re,de,Je;if(O=Y,K=Sh(),K!==r){for(re=[],de=kt();de!==r;)re.push(de),de=kt();re!==r?(de=_g(),de!==r?(Je=Ya(),Je===r&&(Je=null),Je!==r?(xt=O,K=c(K,de,Je),O=K):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r)}else Y=O,O=r;if(O===r)if(O=Y,K=Sh(),K!==r){for(re=[],de=kt();de!==r;)re.push(de),de=kt();re!==r?(de=_g(),de===r&&(de=null),de!==r?(xt=O,K=f(K,de),O=K):(Y=O,O=r)):(Y=O,O=r)}else Y=O,O=r;return O}function Ya(){var O,K,re,de,Je;for(O=Y,K=[],re=kt();re!==r;)K.push(re),re=kt();if(K!==r)if(re=Aa(),re!==r){for(de=[],Je=kt();Je!==r;)de.push(Je),Je=kt();de!==r?(xt=O,K=p(re),O=K):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r;return O}function _g(){var O;return t.charCodeAt(Y)===59?(O=h,Y++):(O=r,yt===0&&wt(E)),O===r&&(t.charCodeAt(Y)===38?(O=C,Y++):(O=r,yt===0&&wt(S))),O}function Sh(){var O,K,re;return O=Y,K=qA(),K!==r?(re=Hg(),re===r&&(re=null),re!==r?(xt=O,K=b(K,re),O=K):(Y=O,O=r)):(Y=O,O=r),O}function Hg(){var O,K,re,de,Je,At,dr;for(O=Y,K=[],re=kt();re!==r;)K.push(re),re=kt();if(K!==r)if(re=vy(),re!==r){for(de=[],Je=kt();Je!==r;)de.push(Je),Je=kt();if(de!==r)if(Je=Sh(),Je!==r){for(At=[],dr=kt();dr!==r;)At.push(dr),dr=kt();At!==r?(xt=O,K=I(re,Je),O=K):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;else Y=O,O=r;return O}function vy(){var O;return t.substr(Y,2)===T?(O=T,Y+=2):(O=r,yt===0&&wt(N)),O===r&&(t.substr(Y,2)===U?(O=U,Y+=2):(O=r,yt===0&&wt(W))),O}function qA(){var O,K,re;return O=Y,K=If(),K!==r?(re=jg(),re===r&&(re=null),re!==r?(xt=O,K=ee(K,re),O=K):(Y=O,O=r)):(Y=O,O=r),O}function jg(){var O,K,re,de,Je,At,dr;for(O=Y,K=[],re=kt();re!==r;)K.push(re),re=kt();if(K!==r)if(re=mu(),re!==r){for(de=[],Je=kt();Je!==r;)de.push(Je),Je=kt();if(de!==r)if(Je=qA(),Je!==r){for(At=[],dr=kt();dr!==r;)At.push(dr),dr=kt();At!==r?(xt=O,K=ie(re,Je),O=K):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;else Y=O,O=r;return O}function mu(){var O;return t.substr(Y,2)===ue?(O=ue,Y+=2):(O=r,yt===0&&wt(le)),O===r&&(t.charCodeAt(Y)===124?(O=me,Y++):(O=r,yt===0&&wt(pe))),O}function yu(){var O,K,re,de,Je,At;if(O=Y,K=bh(),K!==r)if(t.charCodeAt(Y)===61?(re=Be,Y++):(re=r,yt===0&&wt(Ce)),re!==r)if(de=WA(),de!==r){for(Je=[],At=kt();At!==r;)Je.push(At),At=kt();Je!==r?(xt=O,K=g(K,de),O=K):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r;else Y=O,O=r;if(O===r)if(O=Y,K=bh(),K!==r)if(t.charCodeAt(Y)===61?(re=Be,Y++):(re=r,yt===0&&wt(Ce)),re!==r){for(de=[],Je=kt();Je!==r;)de.push(Je),Je=kt();de!==r?(xt=O,K=we(K),O=K):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r;return O}function If(){var O,K,re,de,Je,At,dr,vr,Un,mi,Cs;for(O=Y,K=[],re=kt();re!==r;)K.push(re),re=kt();if(K!==r)if(t.charCodeAt(Y)===40?(re=ye,Y++):(re=r,yt===0&&wt(Ae)),re!==r){for(de=[],Je=kt();Je!==r;)de.push(Je),Je=kt();if(de!==r)if(Je=Aa(),Je!==r){for(At=[],dr=kt();dr!==r;)At.push(dr),dr=kt();if(At!==r)if(t.charCodeAt(Y)===41?(dr=se,Y++):(dr=r,yt===0&&wt(X)),dr!==r){for(vr=[],Un=kt();Un!==r;)vr.push(Un),Un=kt();if(vr!==r){for(Un=[],mi=Gn();mi!==r;)Un.push(mi),mi=Gn();if(Un!==r){for(mi=[],Cs=kt();Cs!==r;)mi.push(Cs),Cs=kt();mi!==r?(xt=O,K=De(Je,Un),O=K):(Y=O,O=r)}else Y=O,O=r}else Y=O,O=r}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;else Y=O,O=r;if(O===r){for(O=Y,K=[],re=kt();re!==r;)K.push(re),re=kt();if(K!==r)if(t.charCodeAt(Y)===123?(re=Te,Y++):(re=r,yt===0&&wt(mt)),re!==r){for(de=[],Je=kt();Je!==r;)de.push(Je),Je=kt();if(de!==r)if(Je=Aa(),Je!==r){for(At=[],dr=kt();dr!==r;)At.push(dr),dr=kt();if(At!==r)if(t.charCodeAt(Y)===125?(dr=j,Y++):(dr=r,yt===0&&wt(rt)),dr!==r){for(vr=[],Un=kt();Un!==r;)vr.push(Un),Un=kt();if(vr!==r){for(Un=[],mi=Gn();mi!==r;)Un.push(mi),mi=Gn();if(Un!==r){for(mi=[],Cs=kt();Cs!==r;)mi.push(Cs),Cs=kt();mi!==r?(xt=O,K=Fe(Je,Un),O=K):(Y=O,O=r)}else Y=O,O=r}else Y=O,O=r}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;else Y=O,O=r;if(O===r){for(O=Y,K=[],re=kt();re!==r;)K.push(re),re=kt();if(K!==r){for(re=[],de=yu();de!==r;)re.push(de),de=yu();if(re!==r){for(de=[],Je=kt();Je!==r;)de.push(Je),Je=kt();if(de!==r){if(Je=[],At=Eu(),At!==r)for(;At!==r;)Je.push(At),At=Eu();else Je=r;if(Je!==r){for(At=[],dr=kt();dr!==r;)At.push(dr),dr=kt();At!==r?(xt=O,K=Ne(re,Je),O=K):(Y=O,O=r)}else Y=O,O=r}else Y=O,O=r}else Y=O,O=r}else Y=O,O=r;if(O===r){for(O=Y,K=[],re=kt();re!==r;)K.push(re),re=kt();if(K!==r){if(re=[],de=yu(),de!==r)for(;de!==r;)re.push(de),de=yu();else re=r;if(re!==r){for(de=[],Je=kt();Je!==r;)de.push(Je),Je=kt();de!==r?(xt=O,K=be(re),O=K):(Y=O,O=r)}else Y=O,O=r}else Y=O,O=r}}}return O}function Ts(){var O,K,re,de,Je;for(O=Y,K=[],re=kt();re!==r;)K.push(re),re=kt();if(K!==r){if(re=[],de=bi(),de!==r)for(;de!==r;)re.push(de),de=bi();else re=r;if(re!==r){for(de=[],Je=kt();Je!==r;)de.push(Je),Je=kt();de!==r?(xt=O,K=Ve(re),O=K):(Y=O,O=r)}else Y=O,O=r}else Y=O,O=r;return O}function Eu(){var O,K,re;for(O=Y,K=[],re=kt();re!==r;)K.push(re),re=kt();if(K!==r?(re=Gn(),re!==r?(xt=O,K=ke(re),O=K):(Y=O,O=r)):(Y=O,O=r),O===r){for(O=Y,K=[],re=kt();re!==r;)K.push(re),re=kt();K!==r?(re=bi(),re!==r?(xt=O,K=ke(re),O=K):(Y=O,O=r)):(Y=O,O=r)}return O}function Gn(){var O,K,re,de,Je;for(O=Y,K=[],re=kt();re!==r;)K.push(re),re=kt();return K!==r?(it.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(Ue)),re===r&&(re=null),re!==r?(de=ns(),de!==r?(Je=bi(),Je!==r?(xt=O,K=x(re,de,Je),O=K):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O}function ns(){var O;return t.substr(Y,2)===w?(O=w,Y+=2):(O=r,yt===0&&wt(P)),O===r&&(t.substr(Y,2)===y?(O=y,Y+=2):(O=r,yt===0&&wt(F)),O===r&&(t.charCodeAt(Y)===62?(O=z,Y++):(O=r,yt===0&&wt(Z)),O===r&&(t.substr(Y,3)===$?(O=$,Y+=3):(O=r,yt===0&&wt(oe)),O===r&&(t.substr(Y,2)===xe?(O=xe,Y+=2):(O=r,yt===0&&wt(Re)),O===r&&(t.charCodeAt(Y)===60?(O=lt,Y++):(O=r,yt===0&&wt(Ct))))))),O}function bi(){var O,K,re;for(O=Y,K=[],re=kt();re!==r;)K.push(re),re=kt();return K!==r?(re=WA(),re!==r?(xt=O,K=ke(re),O=K):(Y=O,O=r)):(Y=O,O=r),O}function WA(){var O,K,re;if(O=Y,K=[],re=Cf(),re!==r)for(;re!==r;)K.push(re),re=Cf();else K=r;return K!==r&&(xt=O,K=qt(K)),O=K,O}function Cf(){var O,K;return O=Y,K=mn(),K!==r&&(xt=O,K=ir(K)),O=K,O===r&&(O=Y,K=Gg(),K!==r&&(xt=O,K=ir(K)),O=K,O===r&&(O=Y,K=qg(),K!==r&&(xt=O,K=ir(K)),O=K,O===r&&(O=Y,K=is(),K!==r&&(xt=O,K=ir(K)),O=K))),O}function mn(){var O,K,re,de;return O=Y,t.substr(Y,2)===bt?(K=bt,Y+=2):(K=r,yt===0&&wt(gn)),K!==r?(re=yn(),re!==r?(t.charCodeAt(Y)===39?(de=br,Y++):(de=r,yt===0&&wt(Ir)),de!==r?(xt=O,K=Or(re),O=K):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O}function Gg(){var O,K,re,de;return O=Y,t.charCodeAt(Y)===39?(K=br,Y++):(K=r,yt===0&&wt(Ir)),K!==r?(re=wf(),re!==r?(t.charCodeAt(Y)===39?(de=br,Y++):(de=r,yt===0&&wt(Ir)),de!==r?(xt=O,K=Or(re),O=K):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O}function qg(){var O,K,re,de;if(O=Y,t.substr(Y,2)===nn?(K=nn,Y+=2):(K=r,yt===0&&wt(ai)),K!==r&&(xt=O,K=Io()),O=K,O===r)if(O=Y,t.charCodeAt(Y)===34?(K=ts,Y++):(K=r,yt===0&&wt($s)),K!==r){for(re=[],de=bl();de!==r;)re.push(de),de=bl();re!==r?(t.charCodeAt(Y)===34?(de=ts,Y++):(de=r,yt===0&&wt($s)),de!==r?(xt=O,K=Co(re),O=K):(Y=O,O=r)):(Y=O,O=r)}else Y=O,O=r;return O}function is(){var O,K,re;if(O=Y,K=[],re=bo(),re!==r)for(;re!==r;)K.push(re),re=bo();else K=r;return K!==r&&(xt=O,K=Co(K)),O=K,O}function bl(){var O,K;return O=Y,K=Xr(),K!==r&&(xt=O,K=Hi(K)),O=K,O===r&&(O=Y,K=Ph(),K!==r&&(xt=O,K=eo(K)),O=K,O===r&&(O=Y,K=VA(),K!==r&&(xt=O,K=wo(K)),O=K,O===r&&(O=Y,K=Bf(),K!==r&&(xt=O,K=QA(K)),O=K))),O}function bo(){var O,K;return O=Y,K=Xr(),K!==r&&(xt=O,K=Af(K)),O=K,O===r&&(O=Y,K=Ph(),K!==r&&(xt=O,K=dh(K)),O=K,O===r&&(O=Y,K=VA(),K!==r&&(xt=O,K=mh(K)),O=K,O===r&&(O=Y,K=Sy(),K!==r&&(xt=O,K=to(K)),O=K,O===r&&(O=Y,K=Dh(),K!==r&&(xt=O,K=QA(K)),O=K)))),O}function wf(){var O,K,re;for(O=Y,K=[],jn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(Rs));re!==r;)K.push(re),jn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(Rs));return K!==r&&(xt=O,K=ro(K)),O=K,O}function Bf(){var O,K,re;if(O=Y,K=[],re=xl(),re===r&&(ou.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(au))),re!==r)for(;re!==r;)K.push(re),re=xl(),re===r&&(ou.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(au)));else K=r;return K!==r&&(xt=O,K=ro(K)),O=K,O}function xl(){var O,K,re;return O=Y,t.substr(Y,2)===lu?(K=lu,Y+=2):(K=r,yt===0&&wt(RA)),K!==r&&(xt=O,K=TA()),O=K,O===r&&(O=Y,t.charCodeAt(Y)===92?(K=oa,Y++):(K=r,yt===0&&wt(aa)),K!==r?(FA.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(gr)),re!==r?(xt=O,K=Bo(re),O=K):(Y=O,O=r)):(Y=O,O=r)),O}function yn(){var O,K,re;for(O=Y,K=[],re=xo(),re===r&&(jn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(Rs)));re!==r;)K.push(re),re=xo(),re===r&&(jn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(Rs)));return K!==r&&(xt=O,K=ro(K)),O=K,O}function xo(){var O,K,re;return O=Y,t.substr(Y,2)===Me?(K=Me,Y+=2):(K=r,yt===0&&wt(cu)),K!==r&&(xt=O,K=Cr()),O=K,O===r&&(O=Y,t.substr(Y,2)===pf?(K=pf,Y+=2):(K=r,yt===0&&wt(NA)),K!==r&&(xt=O,K=OA()),O=K,O===r&&(O=Y,t.charCodeAt(Y)===92?(K=oa,Y++):(K=r,yt===0&&wt(aa)),K!==r?(uu.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(fu)),re!==r?(xt=O,K=oc(),O=K):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===ve?(K=ve,Y+=2):(K=r,yt===0&&wt(Nt)),K!==r&&(xt=O,K=ac()),O=K,O===r&&(O=Y,t.substr(Y,2)===Oi?(K=Oi,Y+=2):(K=r,yt===0&&wt(no)),K!==r&&(xt=O,K=Tt()),O=K,O===r&&(O=Y,t.substr(Y,2)===xn?(K=xn,Y+=2):(K=r,yt===0&&wt(la)),K!==r&&(xt=O,K=ji()),O=K,O===r&&(O=Y,t.substr(Y,2)===Li?(K=Li,Y+=2):(K=r,yt===0&&wt(Na)),K!==r&&(xt=O,K=dn()),O=K,O===r&&(O=Y,t.substr(Y,2)===Kn?(K=Kn,Y+=2):(K=r,yt===0&&wt(Au)),K!==r&&(xt=O,K=yh()),O=K,O===r&&(O=Y,t.charCodeAt(Y)===92?(K=oa,Y++):(K=r,yt===0&&wt(aa)),K!==r?(Oa.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(La)),re!==r?(xt=O,K=Bo(re),O=K):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Iu()))))))))),O}function Iu(){var O,K,re,de,Je,At,dr,vr,Un,mi,Cs,JA;return O=Y,t.charCodeAt(Y)===92?(K=oa,Y++):(K=r,yt===0&&wt(aa)),K!==r?(re=pa(),re!==r?(xt=O,K=Ma(re),O=K):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===$e?(K=$e,Y+=2):(K=r,yt===0&&wt(Ua)),K!==r?(re=Y,de=Y,Je=pa(),Je!==r?(At=Fs(),At!==r?(Je=[Je,At],de=Je):(Y=de,de=r)):(Y=de,de=r),de===r&&(de=pa()),de!==r?re=t.substring(re,Y):re=de,re!==r?(xt=O,K=Ma(re),O=K):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===hf?(K=hf,Y+=2):(K=r,yt===0&&wt(lc)),K!==r?(re=Y,de=Y,Je=Fs(),Je!==r?(At=Fs(),At!==r?(dr=Fs(),dr!==r?(vr=Fs(),vr!==r?(Je=[Je,At,dr,vr],de=Je):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r),de!==r?re=t.substring(re,Y):re=de,re!==r?(xt=O,K=Ma(re),O=K):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===wn?(K=wn,Y+=2):(K=r,yt===0&&wt(ca)),K!==r?(re=Y,de=Y,Je=Fs(),Je!==r?(At=Fs(),At!==r?(dr=Fs(),dr!==r?(vr=Fs(),vr!==r?(Un=Fs(),Un!==r?(mi=Fs(),mi!==r?(Cs=Fs(),Cs!==r?(JA=Fs(),JA!==r?(Je=[Je,At,dr,vr,Un,mi,Cs,JA],de=Je):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r),de!==r?re=t.substring(re,Y):re=de,re!==r?(xt=O,K=LA(re),O=K):(Y=O,O=r)):(Y=O,O=r)))),O}function pa(){var O;return MA.test(t.charAt(Y))?(O=t.charAt(Y),Y++):(O=r,yt===0&&wt(ua)),O}function Fs(){var O;return Bl.test(t.charAt(Y))?(O=t.charAt(Y),Y++):(O=r,yt===0&&wt(Mt)),O}function Dh(){var O,K,re,de,Je;if(O=Y,K=[],re=Y,t.charCodeAt(Y)===92?(de=oa,Y++):(de=r,yt===0&&wt(aa)),de!==r?(t.length>Y?(Je=t.charAt(Y),Y++):(Je=r,yt===0&&wt(kn)),Je!==r?(xt=re,de=Bo(Je),re=de):(Y=re,re=r)):(Y=re,re=r),re===r&&(re=Y,t.substr(Y,2)===fa?(de=fa,Y+=2):(de=r,yt===0&&wt(Ha)),de!==r&&(xt=re,de=rs()),re=de,re===r&&(re=Y,de=Y,yt++,Je=Dy(),yt--,Je===r?de=void 0:(Y=de,de=r),de!==r?(t.length>Y?(Je=t.charAt(Y),Y++):(Je=r,yt===0&&wt(kn)),Je!==r?(xt=re,de=Bo(Je),re=de):(Y=re,re=r)):(Y=re,re=r))),re!==r)for(;re!==r;)K.push(re),re=Y,t.charCodeAt(Y)===92?(de=oa,Y++):(de=r,yt===0&&wt(aa)),de!==r?(t.length>Y?(Je=t.charAt(Y),Y++):(Je=r,yt===0&&wt(kn)),Je!==r?(xt=re,de=Bo(Je),re=de):(Y=re,re=r)):(Y=re,re=r),re===r&&(re=Y,t.substr(Y,2)===fa?(de=fa,Y+=2):(de=r,yt===0&&wt(Ha)),de!==r&&(xt=re,de=rs()),re=de,re===r&&(re=Y,de=Y,yt++,Je=Dy(),yt--,Je===r?de=void 0:(Y=de,de=r),de!==r?(t.length>Y?(Je=t.charAt(Y),Y++):(Je=r,yt===0&&wt(kn)),Je!==r?(xt=re,de=Bo(Je),re=de):(Y=re,re=r)):(Y=re,re=r)));else K=r;return K!==r&&(xt=O,K=ro(K)),O=K,O}function YA(){var O,K,re,de,Je,At;if(O=Y,t.charCodeAt(Y)===45?(K=cc,Y++):(K=r,yt===0&&wt(pu)),K===r&&(t.charCodeAt(Y)===43?(K=uc,Y++):(K=r,yt===0&&wt(ja))),K===r&&(K=null),K!==r){if(re=[],it.test(t.charAt(Y))?(de=t.charAt(Y),Y++):(de=r,yt===0&&wt(Ue)),de!==r)for(;de!==r;)re.push(de),it.test(t.charAt(Y))?(de=t.charAt(Y),Y++):(de=r,yt===0&&wt(Ue));else re=r;if(re!==r)if(t.charCodeAt(Y)===46?(de=Mi,Y++):(de=r,yt===0&&wt(Is)),de!==r){if(Je=[],it.test(t.charAt(Y))?(At=t.charAt(Y),Y++):(At=r,yt===0&&wt(Ue)),At!==r)for(;At!==r;)Je.push(At),it.test(t.charAt(Y))?(At=t.charAt(Y),Y++):(At=r,yt===0&&wt(Ue));else Je=r;Je!==r?(xt=O,K=vl(K,re,Je),O=K):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;if(O===r){if(O=Y,t.charCodeAt(Y)===45?(K=cc,Y++):(K=r,yt===0&&wt(pu)),K===r&&(t.charCodeAt(Y)===43?(K=uc,Y++):(K=r,yt===0&&wt(ja))),K===r&&(K=null),K!==r){if(re=[],it.test(t.charAt(Y))?(de=t.charAt(Y),Y++):(de=r,yt===0&&wt(Ue)),de!==r)for(;de!==r;)re.push(de),it.test(t.charAt(Y))?(de=t.charAt(Y),Y++):(de=r,yt===0&&wt(Ue));else re=r;re!==r?(xt=O,K=gf(K,re),O=K):(Y=O,O=r)}else Y=O,O=r;if(O===r&&(O=Y,K=VA(),K!==r&&(xt=O,K=fc(K)),O=K,O===r&&(O=Y,K=pc(),K!==r&&(xt=O,K=wi(K)),O=K,O===r)))if(O=Y,t.charCodeAt(Y)===40?(K=ye,Y++):(K=r,yt===0&&wt(Ae)),K!==r){for(re=[],de=kt();de!==r;)re.push(de),de=kt();if(re!==r)if(de=io(),de!==r){for(Je=[],At=kt();At!==r;)Je.push(At),At=kt();Je!==r?(t.charCodeAt(Y)===41?(At=se,Y++):(At=r,yt===0&&wt(X)),At!==r?(xt=O,K=Qn(de),O=K):(Y=O,O=r)):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r}return O}function vf(){var O,K,re,de,Je,At,dr,vr;if(O=Y,K=YA(),K!==r){for(re=[],de=Y,Je=[],At=kt();At!==r;)Je.push(At),At=kt();if(Je!==r)if(t.charCodeAt(Y)===42?(At=Ac,Y++):(At=r,yt===0&&wt(Ke)),At===r&&(t.charCodeAt(Y)===47?(At=st,Y++):(At=r,yt===0&&wt(St))),At!==r){for(dr=[],vr=kt();vr!==r;)dr.push(vr),vr=kt();dr!==r?(vr=YA(),vr!==r?(xt=de,Je=lr(K,At,vr),de=Je):(Y=de,de=r)):(Y=de,de=r)}else Y=de,de=r;else Y=de,de=r;for(;de!==r;){for(re.push(de),de=Y,Je=[],At=kt();At!==r;)Je.push(At),At=kt();if(Je!==r)if(t.charCodeAt(Y)===42?(At=Ac,Y++):(At=r,yt===0&&wt(Ke)),At===r&&(t.charCodeAt(Y)===47?(At=st,Y++):(At=r,yt===0&&wt(St))),At!==r){for(dr=[],vr=kt();vr!==r;)dr.push(vr),vr=kt();dr!==r?(vr=YA(),vr!==r?(xt=de,Je=lr(K,At,vr),de=Je):(Y=de,de=r)):(Y=de,de=r)}else Y=de,de=r;else Y=de,de=r}re!==r?(xt=O,K=te(K,re),O=K):(Y=O,O=r)}else Y=O,O=r;return O}function io(){var O,K,re,de,Je,At,dr,vr;if(O=Y,K=vf(),K!==r){for(re=[],de=Y,Je=[],At=kt();At!==r;)Je.push(At),At=kt();if(Je!==r)if(t.charCodeAt(Y)===43?(At=uc,Y++):(At=r,yt===0&&wt(ja)),At===r&&(t.charCodeAt(Y)===45?(At=cc,Y++):(At=r,yt===0&&wt(pu))),At!==r){for(dr=[],vr=kt();vr!==r;)dr.push(vr),vr=kt();dr!==r?(vr=vf(),vr!==r?(xt=de,Je=Ee(K,At,vr),de=Je):(Y=de,de=r)):(Y=de,de=r)}else Y=de,de=r;else Y=de,de=r;for(;de!==r;){for(re.push(de),de=Y,Je=[],At=kt();At!==r;)Je.push(At),At=kt();if(Je!==r)if(t.charCodeAt(Y)===43?(At=uc,Y++):(At=r,yt===0&&wt(ja)),At===r&&(t.charCodeAt(Y)===45?(At=cc,Y++):(At=r,yt===0&&wt(pu))),At!==r){for(dr=[],vr=kt();vr!==r;)dr.push(vr),vr=kt();dr!==r?(vr=vf(),vr!==r?(xt=de,Je=Ee(K,At,vr),de=Je):(Y=de,de=r)):(Y=de,de=r)}else Y=de,de=r;else Y=de,de=r}re!==r?(xt=O,K=te(K,re),O=K):(Y=O,O=r)}else Y=O,O=r;return O}function Xr(){var O,K,re,de,Je,At;if(O=Y,t.substr(Y,3)===Oe?(K=Oe,Y+=3):(K=r,yt===0&&wt(dt)),K!==r){for(re=[],de=kt();de!==r;)re.push(de),de=kt();if(re!==r)if(de=io(),de!==r){for(Je=[],At=kt();At!==r;)Je.push(At),At=kt();Je!==r?(t.substr(Y,2)===Et?(At=Et,Y+=2):(At=r,yt===0&&wt(Pt)),At!==r?(xt=O,K=tr(de),O=K):(Y=O,O=r)):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;return O}function Ph(){var O,K,re,de;return O=Y,t.substr(Y,2)===An?(K=An,Y+=2):(K=r,yt===0&&wt(li)),K!==r?(re=Aa(),re!==r?(t.charCodeAt(Y)===41?(de=se,Y++):(de=r,yt===0&&wt(X)),de!==r?(xt=O,K=Gi(re),O=K):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O}function VA(){var O,K,re,de,Je,At;return O=Y,t.substr(Y,2)===Rn?(K=Rn,Y+=2):(K=r,yt===0&&wt(Ga)),K!==r?(re=pc(),re!==r?(t.substr(Y,2)===my?(de=my,Y+=2):(de=r,yt===0&&wt(X1)),de!==r?(Je=Ts(),Je!==r?(t.charCodeAt(Y)===125?(At=j,Y++):(At=r,yt===0&&wt(rt)),At!==r?(xt=O,K=vo(re,Je),O=K):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===Rn?(K=Rn,Y+=2):(K=r,yt===0&&wt(Ga)),K!==r?(re=pc(),re!==r?(t.substr(Y,3)===yy?(de=yy,Y+=3):(de=r,yt===0&&wt(Eh)),de!==r?(xt=O,K=$1(re),O=K):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===Rn?(K=Rn,Y+=2):(K=r,yt===0&&wt(Ga)),K!==r?(re=pc(),re!==r?(t.substr(Y,2)===So?(de=So,Y+=2):(de=r,yt===0&&wt(Ih)),de!==r?(Je=Ts(),Je!==r?(t.charCodeAt(Y)===125?(At=j,Y++):(At=r,yt===0&&wt(rt)),At!==r?(xt=O,K=Ch(re,Je),O=K):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===Rn?(K=Rn,Y+=2):(K=r,yt===0&&wt(Ga)),K!==r?(re=pc(),re!==r?(t.substr(Y,3)===hu?(de=hu,Y+=3):(de=r,yt===0&&wt(wh)),de!==r?(xt=O,K=Fg(re),O=K):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===Rn?(K=Rn,Y+=2):(K=r,yt===0&&wt(Ga)),K!==r?(re=pc(),re!==r?(t.charCodeAt(Y)===125?(de=j,Y++):(de=r,yt===0&&wt(rt)),de!==r?(xt=O,K=Ng(re),O=K):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.charCodeAt(Y)===36?(K=Og,Y++):(K=r,yt===0&&wt(Ey)),K!==r?(re=pc(),re!==r?(xt=O,K=Ng(re),O=K):(Y=O,O=r)):(Y=O,O=r)))))),O}function Sy(){var O,K,re;return O=Y,K=Wg(),K!==r?(xt=Y,re=df(K),re?re=void 0:re=r,re!==r?(xt=O,K=Do(K),O=K):(Y=O,O=r)):(Y=O,O=r),O}function Wg(){var O,K,re,de,Je;if(O=Y,K=[],re=Y,de=Y,yt++,Je=xh(),yt--,Je===r?de=void 0:(Y=de,de=r),de!==r?(t.length>Y?(Je=t.charAt(Y),Y++):(Je=r,yt===0&&wt(kn)),Je!==r?(xt=re,de=Bo(Je),re=de):(Y=re,re=r)):(Y=re,re=r),re!==r)for(;re!==r;)K.push(re),re=Y,de=Y,yt++,Je=xh(),yt--,Je===r?de=void 0:(Y=de,de=r),de!==r?(t.length>Y?(Je=t.charAt(Y),Y++):(Je=r,yt===0&&wt(kn)),Je!==r?(xt=re,de=Bo(Je),re=de):(Y=re,re=r)):(Y=re,re=r);else K=r;return K!==r&&(xt=O,K=ro(K)),O=K,O}function bh(){var O,K,re;if(O=Y,K=[],Sl.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(Bh)),re!==r)for(;re!==r;)K.push(re),Sl.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(Bh));else K=r;return K!==r&&(xt=O,K=Lg()),O=K,O}function pc(){var O,K,re;if(O=Y,K=[],Dl.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(Pl)),re!==r)for(;re!==r;)K.push(re),Dl.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,yt===0&&wt(Pl));else K=r;return K!==r&&(xt=O,K=Lg()),O=K,O}function Dy(){var O;return Iy.test(t.charAt(Y))?(O=t.charAt(Y),Y++):(O=r,yt===0&&wt(UA)),O}function xh(){var O;return Cy.test(t.charAt(Y))?(O=t.charAt(Y),Y++):(O=r,yt===0&&wt(wy)),O}function kt(){var O,K;if(O=[],_A.test(t.charAt(Y))?(K=t.charAt(Y),Y++):(K=r,yt===0&&wt(HA)),K!==r)for(;K!==r;)O.push(K),_A.test(t.charAt(Y))?(K=t.charAt(Y),Y++):(K=r,yt===0&&wt(HA));else O=r;return O}if(gu=a(),gu!==r&&Y===t.length)return gu;throw gu!==r&&Y!1}){try{return(0,gee.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 fE(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:s},a)=>`${fx(r)}${s===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function fx(t){return`${AE(t.chain)}${t.then?` ${_U(t.then)}`:""}`}function _U(t){return`${t.type} ${fx(t.line)}`}function AE(t){return`${jU(t)}${t.then?` ${HU(t.then)}`:""}`}function HU(t){return`${t.type} ${AE(t.chain)}`}function jU(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>cx(e)).join(" ")} `:""}${t.args.map(e=>GU(e)).join(" ")}`;case"subshell":return`(${fE(t.subshell)})${t.args.length>0?` ${t.args.map(e=>H2(e)).join(" ")}`:""}`;case"group":return`{ ${fE(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>H2(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>cx(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function cx(t){return`${t.name}=${t.args[0]?vd(t.args[0]):""}`}function GU(t){switch(t.type){case"redirection":return H2(t);case"argument":return vd(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function H2(t){return`${t.subtype} ${t.args.map(e=>vd(e)).join(" ")}`}function vd(t){return t.segments.map(e=>qU(e)).join("")}function qU(t){let e=(s,a)=>a?`"${s}"`:s,r=s=>s===""?"''":s.match(/[()}<>$|&;"'\n\t ]/)?s.match(/['\t\p{C}]/u)?s.match(/'/)?`"${s.replace(/["$\t\p{C}]/u,Oqe)}"`:`$'${s.replace(/[\t\p{C}]/u,mee)}'`:`'${s}'`:s;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`$(${fE(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(s=>vd(s)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(s=>vd(s)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${Ax(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function Ax(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,s=a=>r(Ax(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${s(t.left)} ${e(t.type)} ${s(t.right)}`}}var gee,dee,Nqe,mee,Oqe,yee=Ze(()=>{gee=ut(hee());dee=new Map([["\f","\\f"],[` -`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),Nqe=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(dee,([t,e])=>[t,`"$'${e}'"`])]),mee=t=>dee.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,Oqe=t=>Nqe.get(t)??`"$'${mee(t)}'"`});var Iee=_((Wkt,Eee)=>{"use strict";function Lqe(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Sd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.location=s,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Sd)}Lqe(Sd,Error);Sd.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",C;for(C=0;C0){for(C=1,S=1;Cue&&(ue=W,le=[]),le.push(Ue))}function rt(Ue,x){return new Sd(Ue,null,null,x)}function Fe(Ue,x,w){return new Sd(Sd.buildMessage(Ue,x),Ue,x,w)}function Ne(){var Ue,x,w,P;return Ue=W,x=be(),x!==r?(t.charCodeAt(W)===47?(w=n,W++):(w=r,me===0&&j(c)),w!==r?(P=be(),P!==r?(ee=Ue,x=f(x,P),Ue=x):(W=Ue,Ue=r)):(W=Ue,Ue=r)):(W=Ue,Ue=r),Ue===r&&(Ue=W,x=be(),x!==r&&(ee=Ue,x=p(x)),Ue=x),Ue}function be(){var Ue,x,w,P;return Ue=W,x=Ve(),x!==r?(t.charCodeAt(W)===64?(w=h,W++):(w=r,me===0&&j(E)),w!==r?(P=it(),P!==r?(ee=Ue,x=C(x,P),Ue=x):(W=Ue,Ue=r)):(W=Ue,Ue=r)):(W=Ue,Ue=r),Ue===r&&(Ue=W,x=Ve(),x!==r&&(ee=Ue,x=S(x)),Ue=x),Ue}function Ve(){var Ue,x,w,P,y;return Ue=W,t.charCodeAt(W)===64?(x=h,W++):(x=r,me===0&&j(E)),x!==r?(w=ke(),w!==r?(t.charCodeAt(W)===47?(P=n,W++):(P=r,me===0&&j(c)),P!==r?(y=ke(),y!==r?(ee=Ue,x=b(),Ue=x):(W=Ue,Ue=r)):(W=Ue,Ue=r)):(W=Ue,Ue=r)):(W=Ue,Ue=r),Ue===r&&(Ue=W,x=ke(),x!==r&&(ee=Ue,x=b()),Ue=x),Ue}function ke(){var Ue,x,w;if(Ue=W,x=[],I.test(t.charAt(W))?(w=t.charAt(W),W++):(w=r,me===0&&j(T)),w!==r)for(;w!==r;)x.push(w),I.test(t.charAt(W))?(w=t.charAt(W),W++):(w=r,me===0&&j(T));else x=r;return x!==r&&(ee=Ue,x=b()),Ue=x,Ue}function it(){var Ue,x,w;if(Ue=W,x=[],N.test(t.charAt(W))?(w=t.charAt(W),W++):(w=r,me===0&&j(U)),w!==r)for(;w!==r;)x.push(w),N.test(t.charAt(W))?(w=t.charAt(W),W++):(w=r,me===0&&j(U));else x=r;return x!==r&&(ee=Ue,x=b()),Ue=x,Ue}if(pe=a(),pe!==r&&W===t.length)return pe;throw pe!==r&&W{Cee=ut(Iee())});var Pd=_((Vkt,Dd)=>{"use strict";function Bee(t){return typeof t>"u"||t===null}function Uqe(t){return typeof t=="object"&&t!==null}function _qe(t){return Array.isArray(t)?t:Bee(t)?[]:[t]}function Hqe(t,e){var r,s,a,n;if(e)for(n=Object.keys(e),r=0,s=n.length;r{"use strict";function j2(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||""}j2.prototype=Object.create(Error.prototype);j2.prototype.constructor=j2;j2.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};vee.exports=j2});var Pee=_((Kkt,Dee)=>{"use strict";var See=Pd();function WU(t,e,r,s,a){this.name=t,this.buffer=e,this.position=r,this.line=s,this.column=a}WU.prototype.getSnippet=function(e,r){var s,a,n,c,f;if(!this.buffer)return null;for(e=e||4,r=r||75,s="",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){s=" ... ",a+=5;break}for(n="",c=this.position;cr/2-1){n=" ... ",c-=5;break}return f=this.buffer.slice(a,c),See.repeat(" ",e)+s+f+n+` -`+See.repeat(" ",e+this.position-a+s.length)+"^"};WU.prototype.toString=function(e){var r,s="";return this.name&&(s+='in "'+this.name+'" '),s+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(s+=`: -`+r)),s};Dee.exports=WU});var Ss=_((zkt,xee)=>{"use strict";var bee=pE(),qqe=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],Wqe=["scalar","sequence","mapping"];function Yqe(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(s){e[String(s)]=r})}),e}function Vqe(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(qqe.indexOf(r)===-1)throw new bee('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=Yqe(e.styleAliases||null),Wqe.indexOf(this.kind)===-1)throw new bee('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}xee.exports=Vqe});var bd=_((Zkt,Qee)=>{"use strict";var kee=Pd(),gx=pE(),Jqe=Ss();function YU(t,e,r){var s=[];return t.include.forEach(function(a){r=YU(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,c){n.tag===a.tag&&n.kind===a.kind&&s.push(c)}),r.push(a)}),r.filter(function(a,n){return s.indexOf(n)===-1})}function Kqe(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function s(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var zqe=Ss();Ree.exports=new zqe("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var Nee=_(($kt,Fee)=>{"use strict";var Zqe=Ss();Fee.exports=new Zqe("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var Lee=_((eQt,Oee)=>{"use strict";var Xqe=Ss();Oee.exports=new Xqe("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var dx=_((tQt,Mee)=>{"use strict";var $qe=bd();Mee.exports=new $qe({explicit:[Tee(),Nee(),Lee()]})});var _ee=_((rQt,Uee)=>{"use strict";var e5e=Ss();function t5e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function r5e(){return null}function n5e(t){return t===null}Uee.exports=new e5e("tag:yaml.org,2002:null",{kind:"scalar",resolve:t5e,construct:r5e,predicate:n5e,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var jee=_((nQt,Hee)=>{"use strict";var i5e=Ss();function s5e(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 o5e(t){return t==="true"||t==="True"||t==="TRUE"}function a5e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}Hee.exports=new i5e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:s5e,construct:o5e,predicate:a5e,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 qee=_((iQt,Gee)=>{"use strict";var l5e=Pd(),c5e=Ss();function u5e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function f5e(t){return 48<=t&&t<=55}function A5e(t){return 48<=t&&t<=57}function p5e(t){if(t===null)return!1;var e=t.length,r=0,s=!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 Vee=_((sQt,Yee)=>{"use strict";var Wee=Pd(),d5e=Ss(),m5e=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 y5e(t){return!(t===null||!m5e.test(t)||t[t.length-1]==="_")}function E5e(t){var e,r,s,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,s=1,a.forEach(function(n){e+=n*s,s*=60}),r*e):r*parseFloat(e,10)}var I5e=/^[-+]?[0-9]+e/;function C5e(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(Wee.isNegativeZero(t))return"-0.0";return r=t.toString(10),I5e.test(r)?r.replace("e",".e"):r}function w5e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||Wee.isNegativeZero(t))}Yee.exports=new d5e("tag:yaml.org,2002:float",{kind:"scalar",resolve:y5e,construct:E5e,predicate:w5e,represent:C5e,defaultStyle:"lowercase"})});var VU=_((oQt,Jee)=>{"use strict";var B5e=bd();Jee.exports=new B5e({include:[dx()],implicit:[_ee(),jee(),qee(),Vee()]})});var JU=_((aQt,Kee)=>{"use strict";var v5e=bd();Kee.exports=new v5e({include:[VU()]})});var $ee=_((lQt,Xee)=>{"use strict";var S5e=Ss(),zee=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Zee=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 D5e(t){return t===null?!1:zee.exec(t)!==null||Zee.exec(t)!==null}function P5e(t){var e,r,s,a,n,c,f,p=0,h=null,E,C,S;if(e=zee.exec(t),e===null&&(e=Zee.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],s=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,s,a));if(n=+e[4],c=+e[5],f=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(E=+e[10],C=+(e[11]||0),h=(E*60+C)*6e4,e[9]==="-"&&(h=-h)),S=new Date(Date.UTC(r,s,a,n,c,f,p)),h&&S.setTime(S.getTime()-h),S}function b5e(t){return t.toISOString()}Xee.exports=new S5e("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:D5e,construct:P5e,instanceOf:Date,represent:b5e})});var tte=_((cQt,ete)=>{"use strict";var x5e=Ss();function k5e(t){return t==="<<"||t===null}ete.exports=new x5e("tag:yaml.org,2002:merge",{kind:"scalar",resolve:k5e})});var ite=_((uQt,nte)=>{"use strict";var xd;try{rte=Ie,xd=rte("buffer").Buffer}catch{}var rte,Q5e=Ss(),KU=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function R5e(t){if(t===null)return!1;var e,r,s=0,a=t.length,n=KU;for(r=0;r64)){if(e<0)return!1;s+=6}return s%8===0}function T5e(t){var e,r,s=t.replace(/[\r\n=]/g,""),a=s.length,n=KU,c=0,f=[];for(e=0;e>16&255),f.push(c>>8&255),f.push(c&255)),c=c<<6|n.indexOf(s.charAt(e));return r=a%4*6,r===0?(f.push(c>>16&255),f.push(c>>8&255),f.push(c&255)):r===18?(f.push(c>>10&255),f.push(c>>2&255)):r===12&&f.push(c>>4&255),xd?xd.from?xd.from(f):new xd(f):f}function F5e(t){var e="",r=0,s,a,n=t.length,c=KU;for(s=0;s>18&63],e+=c[r>>12&63],e+=c[r>>6&63],e+=c[r&63]),r=(r<<8)+t[s];return a=n%3,a===0?(e+=c[r>>18&63],e+=c[r>>12&63],e+=c[r>>6&63],e+=c[r&63]):a===2?(e+=c[r>>10&63],e+=c[r>>4&63],e+=c[r<<2&63],e+=c[64]):a===1&&(e+=c[r>>2&63],e+=c[r<<4&63],e+=c[64],e+=c[64]),e}function N5e(t){return xd&&xd.isBuffer(t)}nte.exports=new Q5e("tag:yaml.org,2002:binary",{kind:"scalar",resolve:R5e,construct:T5e,predicate:N5e,represent:F5e})});var ote=_((AQt,ste)=>{"use strict";var O5e=Ss(),L5e=Object.prototype.hasOwnProperty,M5e=Object.prototype.toString;function U5e(t){if(t===null)return!0;var e=[],r,s,a,n,c,f=t;for(r=0,s=f.length;r{"use strict";var H5e=Ss(),j5e=Object.prototype.toString;function G5e(t){if(t===null)return!0;var e,r,s,a,n,c=t;for(n=new Array(c.length),e=0,r=c.length;e{"use strict";var W5e=Ss(),Y5e=Object.prototype.hasOwnProperty;function V5e(t){if(t===null)return!0;var e,r=t;for(e in r)if(Y5e.call(r,e)&&r[e]!==null)return!1;return!0}function J5e(t){return t!==null?t:{}}cte.exports=new W5e("tag:yaml.org,2002:set",{kind:"mapping",resolve:V5e,construct:J5e})});var gE=_((gQt,fte)=>{"use strict";var K5e=bd();fte.exports=new K5e({include:[JU()],implicit:[$ee(),tte()],explicit:[ite(),ote(),lte(),ute()]})});var pte=_((dQt,Ate)=>{"use strict";var z5e=Ss();function Z5e(){return!0}function X5e(){}function $5e(){return""}function e9e(t){return typeof t>"u"}Ate.exports=new z5e("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:Z5e,construct:X5e,predicate:e9e,represent:$5e})});var gte=_((mQt,hte)=>{"use strict";var t9e=Ss();function r9e(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),s="";return!(e[0]==="/"&&(r&&(s=r[1]),s.length>3||e[e.length-s.length-1]!=="/"))}function n9e(t){var e=t,r=/\/([gim]*)$/.exec(t),s="";return e[0]==="/"&&(r&&(s=r[1]),e=e.slice(1,e.length-s.length-1)),new RegExp(e,s)}function i9e(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function s9e(t){return Object.prototype.toString.call(t)==="[object RegExp]"}hte.exports=new t9e("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:r9e,construct:n9e,predicate:s9e,represent:i9e})});var yte=_((yQt,mte)=>{"use strict";var mx;try{dte=Ie,mx=dte("esprima")}catch{typeof window<"u"&&(mx=window.esprima)}var dte,o9e=Ss();function a9e(t){if(t===null)return!1;try{var e="("+t+")",r=mx.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 l9e(t){var e="("+t+")",r=mx.parse(e,{range:!0}),s=[],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){s.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(s,e.slice(a[0]+1,a[1]-1)):new Function(s,"return "+e.slice(a[0],a[1]))}function c9e(t){return t.toString()}function u9e(t){return Object.prototype.toString.call(t)==="[object Function]"}mte.exports=new o9e("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:a9e,construct:l9e,predicate:u9e,represent:c9e})});var G2=_((IQt,Ite)=>{"use strict";var Ete=bd();Ite.exports=Ete.DEFAULT=new Ete({include:[gE()],explicit:[pte(),gte(),yte()]})});var Ute=_((CQt,q2)=>{"use strict";var Ip=Pd(),Pte=pE(),f9e=Pee(),bte=gE(),A9e=G2(),i0=Object.prototype.hasOwnProperty,yx=1,xte=2,kte=3,Ex=4,zU=1,p9e=2,Cte=3,h9e=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,g9e=/[\x85\u2028\u2029]/,d9e=/[,\[\]\{\}]/,Qte=/^(?:!|!!|![a-z\-]+!)$/i,Rte=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function wte(t){return Object.prototype.toString.call(t)}function jf(t){return t===10||t===13}function Qd(t){return t===9||t===32}function rl(t){return t===9||t===32||t===10||t===13}function dE(t){return t===44||t===91||t===93||t===123||t===125}function m9e(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function y9e(t){return t===120?2:t===117?4:t===85?8:0}function E9e(t){return 48<=t&&t<=57?t-48:-1}function Bte(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 I9e(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var Tte=new Array(256),Fte=new Array(256);for(kd=0;kd<256;kd++)Tte[kd]=Bte(kd)?1:0,Fte[kd]=Bte(kd);var kd;function C9e(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||A9e,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 Nte(t,e){return new Pte(e,new f9e(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Tr(t,e){throw Nte(t,e)}function Ix(t,e){t.onWarning&&t.onWarning.call(null,Nte(t,e))}var vte={YAML:function(e,r,s){var a,n,c;e.version!==null&&Tr(e,"duplication of %YAML directive"),s.length!==1&&Tr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(s[0]),a===null&&Tr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),c=parseInt(a[2],10),n!==1&&Tr(e,"unacceptable YAML version of the document"),e.version=s[0],e.checkLineBreaks=c<2,c!==1&&c!==2&&Ix(e,"unsupported YAML version of the document")},TAG:function(e,r,s){var a,n;s.length!==2&&Tr(e,"TAG directive accepts exactly two arguments"),a=s[0],n=s[1],Qte.test(a)||Tr(e,"ill-formed tag handle (first argument) of the TAG directive"),i0.call(e.tagMap,a)&&Tr(e,'there is a previously declared suffix for "'+a+'" tag handle'),Rte.test(n)||Tr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function n0(t,e,r,s){var a,n,c,f;if(e1&&(t.result+=Ip.repeat(` -`,e-1))}function w9e(t,e,r){var s,a,n,c,f,p,h,E,C=t.kind,S=t.result,b;if(b=t.input.charCodeAt(t.position),rl(b)||dE(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),rl(a)||r&&dE(a)))return!1;for(t.kind="scalar",t.result="",n=c=t.position,f=!1;b!==0;){if(b===58){if(a=t.input.charCodeAt(t.position+1),rl(a)||r&&dE(a))break}else if(b===35){if(s=t.input.charCodeAt(t.position-1),rl(s))break}else{if(t.position===t.lineStart&&Cx(t)||r&&dE(b))break;if(jf(b))if(p=t.line,h=t.lineStart,E=t.lineIndent,os(t,!1,-1),t.lineIndent>=e){f=!0,b=t.input.charCodeAt(t.position);continue}else{t.position=c,t.line=p,t.lineStart=h,t.lineIndent=E;break}}f&&(n0(t,n,c,!1),XU(t,t.line-p),n=c=t.position,f=!1),Qd(b)||(c=t.position+1),b=t.input.charCodeAt(++t.position)}return n0(t,n,c,!1),t.result?!0:(t.kind=C,t.result=S,!1)}function B9e(t,e){var r,s,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,s=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(n0(t,s,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)s=t.position,t.position++,a=t.position;else return!0;else jf(r)?(n0(t,s,a,!0),XU(t,os(t,!1,e)),s=a=t.position):t.position===t.lineStart&&Cx(t)?Tr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Tr(t,"unexpected end of the stream within a single quoted scalar")}function v9e(t,e){var r,s,a,n,c,f;if(f=t.input.charCodeAt(t.position),f!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=s=t.position;(f=t.input.charCodeAt(t.position))!==0;){if(f===34)return n0(t,r,t.position,!0),t.position++,!0;if(f===92){if(n0(t,r,t.position,!0),f=t.input.charCodeAt(++t.position),jf(f))os(t,!1,e);else if(f<256&&Tte[f])t.result+=Fte[f],t.position++;else if((c=y9e(f))>0){for(a=c,n=0;a>0;a--)f=t.input.charCodeAt(++t.position),(c=m9e(f))>=0?n=(n<<4)+c:Tr(t,"expected hexadecimal character");t.result+=I9e(n),t.position++}else Tr(t,"unknown escape sequence");r=s=t.position}else jf(f)?(n0(t,r,s,!0),XU(t,os(t,!1,e)),r=s=t.position):t.position===t.lineStart&&Cx(t)?Tr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,s=t.position)}Tr(t,"unexpected end of the stream within a double quoted scalar")}function S9e(t,e){var r=!0,s,a=t.tag,n,c=t.anchor,f,p,h,E,C,S={},b,I,T,N;if(N=t.input.charCodeAt(t.position),N===91)p=93,C=!1,n=[];else if(N===123)p=125,C=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),N=t.input.charCodeAt(++t.position);N!==0;){if(os(t,!0,e),N=t.input.charCodeAt(t.position),N===p)return t.position++,t.tag=a,t.anchor=c,t.kind=C?"mapping":"sequence",t.result=n,!0;r||Tr(t,"missed comma between flow collection entries"),I=b=T=null,h=E=!1,N===63&&(f=t.input.charCodeAt(t.position+1),rl(f)&&(h=E=!0,t.position++,os(t,!0,e))),s=t.line,yE(t,e,yx,!1,!0),I=t.tag,b=t.result,os(t,!0,e),N=t.input.charCodeAt(t.position),(E||t.line===s)&&N===58&&(h=!0,N=t.input.charCodeAt(++t.position),os(t,!0,e),yE(t,e,yx,!1,!0),T=t.result),C?mE(t,n,S,I,b,T):h?n.push(mE(t,null,S,I,b,T)):n.push(b),os(t,!0,e),N=t.input.charCodeAt(t.position),N===44?(r=!0,N=t.input.charCodeAt(++t.position)):r=!1}Tr(t,"unexpected end of the stream within a flow collection")}function D9e(t,e){var r,s,a=zU,n=!1,c=!1,f=e,p=0,h=!1,E,C;if(C=t.input.charCodeAt(t.position),C===124)s=!1;else if(C===62)s=!0;else return!1;for(t.kind="scalar",t.result="";C!==0;)if(C=t.input.charCodeAt(++t.position),C===43||C===45)zU===a?a=C===43?Cte:p9e:Tr(t,"repeat of a chomping mode identifier");else if((E=E9e(C))>=0)E===0?Tr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?Tr(t,"repeat of an indentation width identifier"):(f=e+E-1,c=!0);else break;if(Qd(C)){do C=t.input.charCodeAt(++t.position);while(Qd(C));if(C===35)do C=t.input.charCodeAt(++t.position);while(!jf(C)&&C!==0)}for(;C!==0;){for(ZU(t),t.lineIndent=0,C=t.input.charCodeAt(t.position);(!c||t.lineIndentf&&(f=t.lineIndent),jf(C)){p++;continue}if(t.lineIndente)&&p!==0)Tr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(yE(t,e,Ex,!0,a)&&(I?S=t.result:b=t.result),I||(mE(t,h,E,C,S,b,n,c),C=S=b=null),os(t,!0,-1),N=t.input.charCodeAt(t.position)),t.lineIndent>e&&N!==0)Tr(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+'"'),C=0,S=t.implicitTypes.length;C 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)):Tr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Tr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||E}function Q9e(t){var e=t.position,r,s,a,n=!1,c;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(c=t.input.charCodeAt(t.position))!==0&&(os(t,!0,-1),c=t.input.charCodeAt(t.position),!(t.lineIndent>0||c!==37));){for(n=!0,c=t.input.charCodeAt(++t.position),r=t.position;c!==0&&!rl(c);)c=t.input.charCodeAt(++t.position);for(s=t.input.slice(r,t.position),a=[],s.length<1&&Tr(t,"directive name must not be less than one character in length");c!==0;){for(;Qd(c);)c=t.input.charCodeAt(++t.position);if(c===35){do c=t.input.charCodeAt(++t.position);while(c!==0&&!jf(c));break}if(jf(c))break;for(r=t.position;c!==0&&!rl(c);)c=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}c!==0&&ZU(t),i0.call(vte,s)?vte[s](t,s,a):Ix(t,'unknown document directive "'+s+'"')}if(os(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,os(t,!0,-1)):n&&Tr(t,"directives end mark is expected"),yE(t,t.lineIndent-1,Ex,!1,!0),os(t,!0,-1),t.checkLineBreaks&&g9e.test(t.input.slice(e,t.position))&&Ix(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Cx(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,os(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var s=Ote(t,r);if(typeof e!="function")return s;for(var a=0,n=s.length;a"u"&&(r=e,e=null),Lte(t,e,Ip.extend({schema:bte},r))}function T9e(t,e){return Mte(t,Ip.extend({schema:bte},e))}q2.exports.loadAll=Lte;q2.exports.load=Mte;q2.exports.safeLoadAll=R9e;q2.exports.safeLoad=T9e});var lre=_((wQt,r_)=>{"use strict";var Y2=Pd(),V2=pE(),F9e=G2(),N9e=gE(),Vte=Object.prototype.toString,Jte=Object.prototype.hasOwnProperty,O9e=9,W2=10,L9e=13,M9e=32,U9e=33,_9e=34,Kte=35,H9e=37,j9e=38,G9e=39,q9e=42,zte=44,W9e=45,Zte=58,Y9e=61,V9e=62,J9e=63,K9e=64,Xte=91,$te=93,z9e=96,ere=123,Z9e=124,tre=125,_o={};_o[0]="\\0";_o[7]="\\a";_o[8]="\\b";_o[9]="\\t";_o[10]="\\n";_o[11]="\\v";_o[12]="\\f";_o[13]="\\r";_o[27]="\\e";_o[34]='\\"';_o[92]="\\\\";_o[133]="\\N";_o[160]="\\_";_o[8232]="\\L";_o[8233]="\\P";var X9e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function $9e(t,e){var r,s,a,n,c,f,p;if(e===null)return{};for(r={},s=Object.keys(e),a=0,n=s.length;a0?t.charCodeAt(n-1):null,S=S&&jte(c,f)}else{for(n=0;ns&&t[C+1]!==" ",C=n);else if(!EE(c))return wx;f=n>0?t.charCodeAt(n-1):null,S=S&&jte(c,f)}h=h||E&&n-C-1>s&&t[C+1]!==" "}return!p&&!h?S&&!a(t)?nre:ire:r>9&&rre(t)?wx:h?ore:sre}function sWe(t,e,r,s){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&X9e.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),c=s||t.flowLevel>-1&&r>=t.flowLevel;function f(p){return tWe(t,p)}switch(iWe(e,c,t.indent,n,f)){case nre:return e;case ire:return"'"+e.replace(/'/g,"''")+"'";case sre:return"|"+Gte(e,t.indent)+qte(Hte(e,a));case ore:return">"+Gte(e,t.indent)+qte(Hte(oWe(e,n),a));case wx:return'"'+aWe(e,n)+'"';default:throw new V2("impossible error: invalid scalar style")}}()}function Gte(t,e){var r=rre(t)?String(e):"",s=t[t.length-1]===` -`,a=s&&(t[t.length-2]===` -`||t===` -`),n=a?"+":s?"":"-";return r+n+` -`}function qte(t){return t[t.length-1]===` -`?t.slice(0,-1):t}function oWe(t,e){for(var r=/(\n+)([^\n]*)/g,s=function(){var h=t.indexOf(` -`);return h=h!==-1?h:t.length,r.lastIndex=h,Wte(t.slice(0,h),e)}(),a=t[0]===` -`||t[0]===" ",n,c;c=r.exec(t);){var f=c[1],p=c[2];n=p[0]===" ",s+=f+(!a&&!n&&p!==""?` -`:"")+Wte(p,e),a=n}return s}function Wte(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,s,a=0,n,c=0,f=0,p="";s=r.exec(t);)f=s.index,f-a>e&&(n=c>a?c:f,p+=` -`+t.slice(a,n),a=n+1),c=f;return p+=` -`,t.length-a>e&&c>a?p+=t.slice(a,c)+` -`+t.slice(c+1):p+=t.slice(a),p.slice(1)}function aWe(t){for(var e="",r,s,a,n=0;n=55296&&r<=56319&&(s=t.charCodeAt(n+1),s>=56320&&s<=57343)){e+=_te((r-55296)*1024+s-56320+65536),n++;continue}a=_o[r],e+=!a&&EE(r)?t[n]:a||_te(r)}return e}function lWe(t,e,r){var s="",a=t.tag,n,c;for(n=0,c=r.length;n1024&&(E+="? "),E+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Rd(t,e,h,!1,!1)&&(E+=t.dump,s+=E));t.tag=a,t.dump="{"+s+"}"}function fWe(t,e,r,s){var a="",n=t.tag,c=Object.keys(r),f,p,h,E,C,S;if(t.sortKeys===!0)c.sort();else if(typeof t.sortKeys=="function")c.sort(t.sortKeys);else if(t.sortKeys)throw new V2("sortKeys must be a boolean or a function");for(f=0,p=c.length;f1024,C&&(t.dump&&W2===t.dump.charCodeAt(0)?S+="?":S+="? "),S+=t.dump,C&&(S+=$U(t,e)),Rd(t,e+1,E,!0,C)&&(t.dump&&W2===t.dump.charCodeAt(0)?S+=":":S+=": ",S+=t.dump,a+=S));t.tag=n,t.dump=a||"{}"}function Yte(t,e,r){var s,a,n,c,f,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,c=a.length;n tag resolver accepts not "'+p+'" style');t.dump=s}return!0}return!1}function Rd(t,e,r,s,a,n){t.tag=null,t.dump=r,Yte(t,r,!1)||Yte(t,r,!0);var c=Vte.call(t.dump);s&&(s=t.flowLevel<0||t.flowLevel>e);var f=c==="[object Object]"||c==="[object Array]",p,h;if(f&&(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(f&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),c==="[object Object]")s&&Object.keys(t.dump).length!==0?(fWe(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(uWe(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(c==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;s&&t.dump.length!==0?(cWe(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(lWe(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(c==="[object String]")t.tag!=="?"&&sWe(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new V2("unacceptable kind of an object to dump "+c)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function AWe(t,e){var r=[],s=[],a,n;for(e_(t,r,s),a=0,n=s.length;a{"use strict";var Bx=Ute(),cre=lre();function vx(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}qi.exports.Type=Ss();qi.exports.Schema=bd();qi.exports.FAILSAFE_SCHEMA=dx();qi.exports.JSON_SCHEMA=VU();qi.exports.CORE_SCHEMA=JU();qi.exports.DEFAULT_SAFE_SCHEMA=gE();qi.exports.DEFAULT_FULL_SCHEMA=G2();qi.exports.load=Bx.load;qi.exports.loadAll=Bx.loadAll;qi.exports.safeLoad=Bx.safeLoad;qi.exports.safeLoadAll=Bx.safeLoadAll;qi.exports.dump=cre.dump;qi.exports.safeDump=cre.safeDump;qi.exports.YAMLException=pE();qi.exports.MINIMAL_SCHEMA=dx();qi.exports.SAFE_SCHEMA=gE();qi.exports.DEFAULT_SCHEMA=G2();qi.exports.scan=vx("scan");qi.exports.parse=vx("parse");qi.exports.compose=vx("compose");qi.exports.addConstructor=vx("addConstructor")});var Are=_((vQt,fre)=>{"use strict";var hWe=ure();fre.exports=hWe});var hre=_((SQt,pre)=>{"use strict";function gWe(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Td(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.location=s,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Td)}gWe(Td,Error);Td.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",C;for(C=0;C0){for(C=1,S=1;C({[dt]:Oe})))},ue=function(te){return te},le=function(te){return te},me=Oa("correct indentation"),pe=" ",Be=dn(" ",!1),Ce=function(te){return te.length===lr*St},g=function(te){return te.length===(lr+1)*St},we=function(){return lr++,!0},ye=function(){return lr--,!0},Ae=function(){return la()},se=Oa("pseudostring"),X=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,De=Kn(["\r",` -`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),Te=/^[^\r\n\t ,\][{}:#"']/,mt=Kn(["\r",` -`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),j=function(){return la().replace(/^ *| *$/g,"")},rt="--",Fe=dn("--",!1),Ne=/^[a-zA-Z\/0-9]/,be=Kn([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),Ve=/^[^\r\n\t :,]/,ke=Kn(["\r",` -`," "," ",":",","],!0,!1),it="null",Ue=dn("null",!1),x=function(){return null},w="true",P=dn("true",!1),y=function(){return!0},F="false",z=dn("false",!1),Z=function(){return!1},$=Oa("string"),oe='"',xe=dn('"',!1),Re=function(){return""},lt=function(te){return te},Ct=function(te){return te.join("")},qt=/^[^"\\\0-\x1F\x7F]/,ir=Kn(['"',"\\",["\0",""],"\x7F"],!0,!1),bt='\\"',gn=dn('\\"',!1),br=function(){return'"'},Ir="\\\\",Or=dn("\\\\",!1),nn=function(){return"\\"},ai="\\/",Io=dn("\\/",!1),ts=function(){return"/"},$s="\\b",Co=dn("\\b",!1),Hi=function(){return"\b"},eo="\\f",wo=dn("\\f",!1),QA=function(){return"\f"},Af="\\n",dh=dn("\\n",!1),mh=function(){return` -`},to="\\r",jn=dn("\\r",!1),Rs=function(){return"\r"},ro="\\t",ou=dn("\\t",!1),au=function(){return" "},lu="\\u",RA=dn("\\u",!1),TA=function(te,Ee,Oe,dt){return String.fromCharCode(parseInt(`0x${te}${Ee}${Oe}${dt}`))},oa=/^[0-9a-fA-F]/,aa=Kn([["0","9"],["a","f"],["A","F"]],!1,!1),FA=Oa("blank space"),gr=/^[ \t]/,Bo=Kn([" "," "],!1,!1),Me=Oa("white space"),cu=/^[ \t\n\r]/,Cr=Kn([" "," ",` -`,"\r"],!1,!1),pf=`\r -`,NA=dn(`\r -`,!1),OA=` -`,uu=dn(` -`,!1),fu="\r",oc=dn("\r",!1),ve=0,Nt=0,ac=[{line:1,column:1}],Oi=0,no=[],Tt=0,xn;if("startRule"in e){if(!(e.startRule in s))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=s[e.startRule]}function la(){return t.substring(Nt,ve)}function ji(){return Ma(Nt,ve)}function Li(te,Ee){throw Ee=Ee!==void 0?Ee:Ma(Nt,ve),hf([Oa(te)],t.substring(Nt,ve),Ee)}function Na(te,Ee){throw Ee=Ee!==void 0?Ee:Ma(Nt,ve),Ua(te,Ee)}function dn(te,Ee){return{type:"literal",text:te,ignoreCase:Ee}}function Kn(te,Ee,Oe){return{type:"class",parts:te,inverted:Ee,ignoreCase:Oe}}function Au(){return{type:"any"}}function yh(){return{type:"end"}}function Oa(te){return{type:"other",description:te}}function La(te){var Ee=ac[te],Oe;if(Ee)return Ee;for(Oe=te-1;!ac[Oe];)Oe--;for(Ee=ac[Oe],Ee={line:Ee.line,column:Ee.column};OeOi&&(Oi=ve,no=[]),no.push(te))}function Ua(te,Ee){return new Td(te,null,null,Ee)}function hf(te,Ee,Oe){return new Td(Td.buildMessage(te,Ee),te,Ee,Oe)}function lc(){var te;return te=LA(),te}function wn(){var te,Ee,Oe;for(te=ve,Ee=[],Oe=ca();Oe!==r;)Ee.push(Oe),Oe=ca();return Ee!==r&&(Nt=te,Ee=n(Ee)),te=Ee,te}function ca(){var te,Ee,Oe,dt,Et;return te=ve,Ee=Bl(),Ee!==r?(t.charCodeAt(ve)===45?(Oe=c,ve++):(Oe=r,Tt===0&&$e(f)),Oe!==r?(dt=Qn(),dt!==r?(Et=ua(),Et!==r?(Nt=te,Ee=p(Et),te=Ee):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r),te}function LA(){var te,Ee,Oe;for(te=ve,Ee=[],Oe=MA();Oe!==r;)Ee.push(Oe),Oe=MA();return Ee!==r&&(Nt=te,Ee=h(Ee)),te=Ee,te}function MA(){var te,Ee,Oe,dt,Et,Pt,tr,An,li;if(te=ve,Ee=Qn(),Ee===r&&(Ee=null),Ee!==r){if(Oe=ve,t.charCodeAt(ve)===35?(dt=E,ve++):(dt=r,Tt===0&&$e(C)),dt!==r){if(Et=[],Pt=ve,tr=ve,Tt++,An=st(),Tt--,An===r?tr=void 0:(ve=tr,tr=r),tr!==r?(t.length>ve?(An=t.charAt(ve),ve++):(An=r,Tt===0&&$e(S)),An!==r?(tr=[tr,An],Pt=tr):(ve=Pt,Pt=r)):(ve=Pt,Pt=r),Pt!==r)for(;Pt!==r;)Et.push(Pt),Pt=ve,tr=ve,Tt++,An=st(),Tt--,An===r?tr=void 0:(ve=tr,tr=r),tr!==r?(t.length>ve?(An=t.charAt(ve),ve++):(An=r,Tt===0&&$e(S)),An!==r?(tr=[tr,An],Pt=tr):(ve=Pt,Pt=r)):(ve=Pt,Pt=r);else Et=r;Et!==r?(dt=[dt,Et],Oe=dt):(ve=Oe,Oe=r)}else ve=Oe,Oe=r;if(Oe===r&&(Oe=null),Oe!==r){if(dt=[],Et=Ke(),Et!==r)for(;Et!==r;)dt.push(Et),Et=Ke();else dt=r;dt!==r?(Nt=te,Ee=b(),te=Ee):(ve=te,te=r)}else ve=te,te=r}else ve=te,te=r;if(te===r&&(te=ve,Ee=Bl(),Ee!==r?(Oe=Ha(),Oe!==r?(dt=Qn(),dt===r&&(dt=null),dt!==r?(t.charCodeAt(ve)===58?(Et=I,ve++):(Et=r,Tt===0&&$e(T)),Et!==r?(Pt=Qn(),Pt===r&&(Pt=null),Pt!==r?(tr=ua(),tr!==r?(Nt=te,Ee=N(Oe,tr),te=Ee):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r),te===r&&(te=ve,Ee=Bl(),Ee!==r?(Oe=rs(),Oe!==r?(dt=Qn(),dt===r&&(dt=null),dt!==r?(t.charCodeAt(ve)===58?(Et=I,ve++):(Et=r,Tt===0&&$e(T)),Et!==r?(Pt=Qn(),Pt===r&&(Pt=null),Pt!==r?(tr=ua(),tr!==r?(Nt=te,Ee=N(Oe,tr),te=Ee):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r),te===r))){if(te=ve,Ee=Bl(),Ee!==r)if(Oe=rs(),Oe!==r)if(dt=Qn(),dt!==r)if(Et=pu(),Et!==r){if(Pt=[],tr=Ke(),tr!==r)for(;tr!==r;)Pt.push(tr),tr=Ke();else Pt=r;Pt!==r?(Nt=te,Ee=N(Oe,Et),te=Ee):(ve=te,te=r)}else ve=te,te=r;else ve=te,te=r;else ve=te,te=r;else ve=te,te=r;if(te===r)if(te=ve,Ee=Bl(),Ee!==r)if(Oe=rs(),Oe!==r){if(dt=[],Et=ve,Pt=Qn(),Pt===r&&(Pt=null),Pt!==r?(t.charCodeAt(ve)===44?(tr=U,ve++):(tr=r,Tt===0&&$e(W)),tr!==r?(An=Qn(),An===r&&(An=null),An!==r?(li=rs(),li!==r?(Nt=Et,Pt=ee(Oe,li),Et=Pt):(ve=Et,Et=r)):(ve=Et,Et=r)):(ve=Et,Et=r)):(ve=Et,Et=r),Et!==r)for(;Et!==r;)dt.push(Et),Et=ve,Pt=Qn(),Pt===r&&(Pt=null),Pt!==r?(t.charCodeAt(ve)===44?(tr=U,ve++):(tr=r,Tt===0&&$e(W)),tr!==r?(An=Qn(),An===r&&(An=null),An!==r?(li=rs(),li!==r?(Nt=Et,Pt=ee(Oe,li),Et=Pt):(ve=Et,Et=r)):(ve=Et,Et=r)):(ve=Et,Et=r)):(ve=Et,Et=r);else dt=r;dt!==r?(Et=Qn(),Et===r&&(Et=null),Et!==r?(t.charCodeAt(ve)===58?(Pt=I,ve++):(Pt=r,Tt===0&&$e(T)),Pt!==r?(tr=Qn(),tr===r&&(tr=null),tr!==r?(An=ua(),An!==r?(Nt=te,Ee=ie(Oe,dt,An),te=Ee):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)}else ve=te,te=r;else ve=te,te=r}return te}function ua(){var te,Ee,Oe,dt,Et,Pt,tr;if(te=ve,Ee=ve,Tt++,Oe=ve,dt=st(),dt!==r?(Et=Mt(),Et!==r?(t.charCodeAt(ve)===45?(Pt=c,ve++):(Pt=r,Tt===0&&$e(f)),Pt!==r?(tr=Qn(),tr!==r?(dt=[dt,Et,Pt,tr],Oe=dt):(ve=Oe,Oe=r)):(ve=Oe,Oe=r)):(ve=Oe,Oe=r)):(ve=Oe,Oe=r),Tt--,Oe!==r?(ve=Ee,Ee=void 0):Ee=r,Ee!==r?(Oe=Ke(),Oe!==r?(dt=kn(),dt!==r?(Et=wn(),Et!==r?(Pt=fa(),Pt!==r?(Nt=te,Ee=ue(Et),te=Ee):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r),te===r&&(te=ve,Ee=st(),Ee!==r?(Oe=kn(),Oe!==r?(dt=LA(),dt!==r?(Et=fa(),Et!==r?(Nt=te,Ee=ue(dt),te=Ee):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r),te===r))if(te=ve,Ee=cc(),Ee!==r){if(Oe=[],dt=Ke(),dt!==r)for(;dt!==r;)Oe.push(dt),dt=Ke();else Oe=r;Oe!==r?(Nt=te,Ee=le(Ee),te=Ee):(ve=te,te=r)}else ve=te,te=r;return te}function Bl(){var te,Ee,Oe;for(Tt++,te=ve,Ee=[],t.charCodeAt(ve)===32?(Oe=pe,ve++):(Oe=r,Tt===0&&$e(Be));Oe!==r;)Ee.push(Oe),t.charCodeAt(ve)===32?(Oe=pe,ve++):(Oe=r,Tt===0&&$e(Be));return Ee!==r?(Nt=ve,Oe=Ce(Ee),Oe?Oe=void 0:Oe=r,Oe!==r?(Ee=[Ee,Oe],te=Ee):(ve=te,te=r)):(ve=te,te=r),Tt--,te===r&&(Ee=r,Tt===0&&$e(me)),te}function Mt(){var te,Ee,Oe;for(te=ve,Ee=[],t.charCodeAt(ve)===32?(Oe=pe,ve++):(Oe=r,Tt===0&&$e(Be));Oe!==r;)Ee.push(Oe),t.charCodeAt(ve)===32?(Oe=pe,ve++):(Oe=r,Tt===0&&$e(Be));return Ee!==r?(Nt=ve,Oe=g(Ee),Oe?Oe=void 0:Oe=r,Oe!==r?(Ee=[Ee,Oe],te=Ee):(ve=te,te=r)):(ve=te,te=r),te}function kn(){var te;return Nt=ve,te=we(),te?te=void 0:te=r,te}function fa(){var te;return Nt=ve,te=ye(),te?te=void 0:te=r,te}function Ha(){var te;return te=vl(),te===r&&(te=uc()),te}function rs(){var te,Ee,Oe;if(te=vl(),te===r){if(te=ve,Ee=[],Oe=ja(),Oe!==r)for(;Oe!==r;)Ee.push(Oe),Oe=ja();else Ee=r;Ee!==r&&(Nt=te,Ee=Ae()),te=Ee}return te}function cc(){var te;return te=Mi(),te===r&&(te=Is(),te===r&&(te=vl(),te===r&&(te=uc()))),te}function pu(){var te;return te=Mi(),te===r&&(te=vl(),te===r&&(te=ja())),te}function uc(){var te,Ee,Oe,dt,Et,Pt;if(Tt++,te=ve,X.test(t.charAt(ve))?(Ee=t.charAt(ve),ve++):(Ee=r,Tt===0&&$e(De)),Ee!==r){for(Oe=[],dt=ve,Et=Qn(),Et===r&&(Et=null),Et!==r?(Te.test(t.charAt(ve))?(Pt=t.charAt(ve),ve++):(Pt=r,Tt===0&&$e(mt)),Pt!==r?(Et=[Et,Pt],dt=Et):(ve=dt,dt=r)):(ve=dt,dt=r);dt!==r;)Oe.push(dt),dt=ve,Et=Qn(),Et===r&&(Et=null),Et!==r?(Te.test(t.charAt(ve))?(Pt=t.charAt(ve),ve++):(Pt=r,Tt===0&&$e(mt)),Pt!==r?(Et=[Et,Pt],dt=Et):(ve=dt,dt=r)):(ve=dt,dt=r);Oe!==r?(Nt=te,Ee=j(),te=Ee):(ve=te,te=r)}else ve=te,te=r;return Tt--,te===r&&(Ee=r,Tt===0&&$e(se)),te}function ja(){var te,Ee,Oe,dt,Et;if(te=ve,t.substr(ve,2)===rt?(Ee=rt,ve+=2):(Ee=r,Tt===0&&$e(Fe)),Ee===r&&(Ee=null),Ee!==r)if(Ne.test(t.charAt(ve))?(Oe=t.charAt(ve),ve++):(Oe=r,Tt===0&&$e(be)),Oe!==r){for(dt=[],Ve.test(t.charAt(ve))?(Et=t.charAt(ve),ve++):(Et=r,Tt===0&&$e(ke));Et!==r;)dt.push(Et),Ve.test(t.charAt(ve))?(Et=t.charAt(ve),ve++):(Et=r,Tt===0&&$e(ke));dt!==r?(Nt=te,Ee=j(),te=Ee):(ve=te,te=r)}else ve=te,te=r;else ve=te,te=r;return te}function Mi(){var te,Ee;return te=ve,t.substr(ve,4)===it?(Ee=it,ve+=4):(Ee=r,Tt===0&&$e(Ue)),Ee!==r&&(Nt=te,Ee=x()),te=Ee,te}function Is(){var te,Ee;return te=ve,t.substr(ve,4)===w?(Ee=w,ve+=4):(Ee=r,Tt===0&&$e(P)),Ee!==r&&(Nt=te,Ee=y()),te=Ee,te===r&&(te=ve,t.substr(ve,5)===F?(Ee=F,ve+=5):(Ee=r,Tt===0&&$e(z)),Ee!==r&&(Nt=te,Ee=Z()),te=Ee),te}function vl(){var te,Ee,Oe,dt;return Tt++,te=ve,t.charCodeAt(ve)===34?(Ee=oe,ve++):(Ee=r,Tt===0&&$e(xe)),Ee!==r?(t.charCodeAt(ve)===34?(Oe=oe,ve++):(Oe=r,Tt===0&&$e(xe)),Oe!==r?(Nt=te,Ee=Re(),te=Ee):(ve=te,te=r)):(ve=te,te=r),te===r&&(te=ve,t.charCodeAt(ve)===34?(Ee=oe,ve++):(Ee=r,Tt===0&&$e(xe)),Ee!==r?(Oe=gf(),Oe!==r?(t.charCodeAt(ve)===34?(dt=oe,ve++):(dt=r,Tt===0&&$e(xe)),dt!==r?(Nt=te,Ee=lt(Oe),te=Ee):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)),Tt--,te===r&&(Ee=r,Tt===0&&$e($)),te}function gf(){var te,Ee,Oe;if(te=ve,Ee=[],Oe=fc(),Oe!==r)for(;Oe!==r;)Ee.push(Oe),Oe=fc();else Ee=r;return Ee!==r&&(Nt=te,Ee=Ct(Ee)),te=Ee,te}function fc(){var te,Ee,Oe,dt,Et,Pt;return qt.test(t.charAt(ve))?(te=t.charAt(ve),ve++):(te=r,Tt===0&&$e(ir)),te===r&&(te=ve,t.substr(ve,2)===bt?(Ee=bt,ve+=2):(Ee=r,Tt===0&&$e(gn)),Ee!==r&&(Nt=te,Ee=br()),te=Ee,te===r&&(te=ve,t.substr(ve,2)===Ir?(Ee=Ir,ve+=2):(Ee=r,Tt===0&&$e(Or)),Ee!==r&&(Nt=te,Ee=nn()),te=Ee,te===r&&(te=ve,t.substr(ve,2)===ai?(Ee=ai,ve+=2):(Ee=r,Tt===0&&$e(Io)),Ee!==r&&(Nt=te,Ee=ts()),te=Ee,te===r&&(te=ve,t.substr(ve,2)===$s?(Ee=$s,ve+=2):(Ee=r,Tt===0&&$e(Co)),Ee!==r&&(Nt=te,Ee=Hi()),te=Ee,te===r&&(te=ve,t.substr(ve,2)===eo?(Ee=eo,ve+=2):(Ee=r,Tt===0&&$e(wo)),Ee!==r&&(Nt=te,Ee=QA()),te=Ee,te===r&&(te=ve,t.substr(ve,2)===Af?(Ee=Af,ve+=2):(Ee=r,Tt===0&&$e(dh)),Ee!==r&&(Nt=te,Ee=mh()),te=Ee,te===r&&(te=ve,t.substr(ve,2)===to?(Ee=to,ve+=2):(Ee=r,Tt===0&&$e(jn)),Ee!==r&&(Nt=te,Ee=Rs()),te=Ee,te===r&&(te=ve,t.substr(ve,2)===ro?(Ee=ro,ve+=2):(Ee=r,Tt===0&&$e(ou)),Ee!==r&&(Nt=te,Ee=au()),te=Ee,te===r&&(te=ve,t.substr(ve,2)===lu?(Ee=lu,ve+=2):(Ee=r,Tt===0&&$e(RA)),Ee!==r?(Oe=wi(),Oe!==r?(dt=wi(),dt!==r?(Et=wi(),Et!==r?(Pt=wi(),Pt!==r?(Nt=te,Ee=TA(Oe,dt,Et,Pt),te=Ee):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)):(ve=te,te=r)))))))))),te}function wi(){var te;return oa.test(t.charAt(ve))?(te=t.charAt(ve),ve++):(te=r,Tt===0&&$e(aa)),te}function Qn(){var te,Ee;if(Tt++,te=[],gr.test(t.charAt(ve))?(Ee=t.charAt(ve),ve++):(Ee=r,Tt===0&&$e(Bo)),Ee!==r)for(;Ee!==r;)te.push(Ee),gr.test(t.charAt(ve))?(Ee=t.charAt(ve),ve++):(Ee=r,Tt===0&&$e(Bo));else te=r;return Tt--,te===r&&(Ee=r,Tt===0&&$e(FA)),te}function Ac(){var te,Ee;if(Tt++,te=[],cu.test(t.charAt(ve))?(Ee=t.charAt(ve),ve++):(Ee=r,Tt===0&&$e(Cr)),Ee!==r)for(;Ee!==r;)te.push(Ee),cu.test(t.charAt(ve))?(Ee=t.charAt(ve),ve++):(Ee=r,Tt===0&&$e(Cr));else te=r;return Tt--,te===r&&(Ee=r,Tt===0&&$e(Me)),te}function Ke(){var te,Ee,Oe,dt,Et,Pt;if(te=ve,Ee=st(),Ee!==r){for(Oe=[],dt=ve,Et=Qn(),Et===r&&(Et=null),Et!==r?(Pt=st(),Pt!==r?(Et=[Et,Pt],dt=Et):(ve=dt,dt=r)):(ve=dt,dt=r);dt!==r;)Oe.push(dt),dt=ve,Et=Qn(),Et===r&&(Et=null),Et!==r?(Pt=st(),Pt!==r?(Et=[Et,Pt],dt=Et):(ve=dt,dt=r)):(ve=dt,dt=r);Oe!==r?(Ee=[Ee,Oe],te=Ee):(ve=te,te=r)}else ve=te,te=r;return te}function st(){var te;return t.substr(ve,2)===pf?(te=pf,ve+=2):(te=r,Tt===0&&$e(NA)),te===r&&(t.charCodeAt(ve)===10?(te=OA,ve++):(te=r,Tt===0&&$e(uu)),te===r&&(t.charCodeAt(ve)===13?(te=fu,ve++):(te=r,Tt===0&&$e(oc)))),te}let St=2,lr=0;if(xn=a(),xn!==r&&ve===t.length)return xn;throw xn!==r&&ve"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>yre(t[e])):!1}function n_(t,e,r){if(t===null)return`null -`;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} -`;if(typeof t=="string")return`${dre(t)} -`;if(Array.isArray(t)){if(t.length===0)return`[] -`;let s=" ".repeat(e);return` -${t.map(n=>`${s}- ${n_(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[s,a]=t instanceof Sx?[t.data,!1]:[t,!0],n=" ".repeat(e),c=Object.keys(s);a&&c.sort((p,h)=>{let E=gre.indexOf(p),C=gre.indexOf(h);return E===-1&&C===-1?ph?1:0:E!==-1&&C===-1?-1:E===-1&&C!==-1?1:E-C});let f=c.filter(p=>!yre(s[p])).map((p,h)=>{let E=s[p],C=dre(p),S=n_(E,e+1,!0),b=h>0||r?n:"",I=C.length>1024?`? ${C} -${b}:`:`${C}:`,T=S.startsWith(` -`)?S:` ${S}`;return`${b}${I}${T}`}).join(e===0?` -`:"")||` -`;return r?` -${f}`:`${f}`}throw new Error(`Unsupported value type (${t})`)}function nl(t){try{let e=n_(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 yWe(t){return t.endsWith(` -`)||(t+=` -`),(0,mre.parse)(t)}function IWe(t){if(EWe.test(t))return yWe(t);let e=(0,Dx.safeLoad)(t,{schema:Dx.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 as(t){return IWe(t)}var Dx,mre,mWe,gre,Sx,EWe,Ere=Ze(()=>{Dx=ut(Are()),mre=ut(hre()),mWe=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,gre=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],Sx=class{constructor(e){this.data=e}};nl.PreserveOrdering=Sx;EWe=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var J2={};Vt(J2,{parseResolution:()=>px,parseShell:()=>ux,parseSyml:()=>as,stringifyArgument:()=>GU,stringifyArgumentSegment:()=>qU,stringifyArithmeticExpression:()=>Ax,stringifyCommand:()=>jU,stringifyCommandChain:()=>AE,stringifyCommandChainThen:()=>HU,stringifyCommandLine:()=>fx,stringifyCommandLineThen:()=>_U,stringifyEnvSegment:()=>cx,stringifyRedirectArgument:()=>H2,stringifyResolution:()=>hx,stringifyShell:()=>fE,stringifyShellLine:()=>fE,stringifySyml:()=>nl,stringifyValueArgument:()=>vd});var wc=Ze(()=>{yee();wee();Ere()});var Cre=_((kQt,i_)=>{"use strict";var CWe=t=>{let e=!1,r=!1,s=!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=CWe(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};i_.exports=Ire;i_.exports.default=Ire});var wre=_((QQt,wWe)=>{wWe.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 Fd=_(Ml=>{"use strict";var vre=wre(),Ds=process.env;Object.defineProperty(Ml,"_vendors",{value:vre.map(function(t){return t.constant})});Ml.name=null;Ml.isPR=null;vre.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(s){return Bre(s)});if(Ml[t.constant]=r,!!r)switch(Ml.name=t.name,typeof t.pr){case"string":Ml.isPR=!!Ds[t.pr];break;case"object":"env"in t.pr?Ml.isPR=t.pr.env in Ds&&Ds[t.pr.env]!==t.pr.ne:"any"in t.pr?Ml.isPR=t.pr.any.some(function(s){return!!Ds[s]}):Ml.isPR=Bre(t.pr);break;default:Ml.isPR=null}});Ml.isCI=!!(Ds.CI!=="false"&&(Ds.BUILD_ID||Ds.BUILD_NUMBER||Ds.CI||Ds.CI_APP_ID||Ds.CI_BUILD_ID||Ds.CI_BUILD_NUMBER||Ds.CI_NAME||Ds.CONTINUOUS_INTEGRATION||Ds.RUN_ID||Ml.name));function Bre(t){return typeof t=="string"?!!Ds[t]:"env"in t?Ds[t.env]&&Ds[t.env].includes(t.includes):"any"in t?t.any.some(function(e){return!!Ds[e]}):Object.keys(t).every(function(e){return Ds[e]===t[e]})}});var ei,En,Nd,s_,Px,Sre,o_,a_,bx=Ze(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(ei||(ei={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(En||(En={}));Nd=-1,s_=/^(-h|--help)(?:=([0-9]+))?$/,Px=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,Sre=/^-[a-zA-Z]{2,}$/,o_=/^([^=]+)=([\s\S]*)$/,a_=process.env.DEBUG_CLI==="1"});var nt,IE,xx,l_,kx=Ze(()=>{bx();nt=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},IE=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(s=>s.reason!==null&&s.reason===r[0].reason)){let[{reason:s}]=this.candidates;this.message=`${s} - -${this.candidates.map(({usage:a})=>`$ ${a}`).join(` -`)}`}else if(this.candidates.length===1){let[{usage:s}]=this.candidates;this.message=`Command not found; did you mean: - -$ ${s} -${l_(e)}`}else this.message=`Command not found; did you mean one of: - -${this.candidates.map(({usage:s},a)=>`${`${a}.`.padStart(4)} ${s}`).join(` -`)} - -${l_(e)}`}},xx=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((s,a)=>`${`${a}.`.padStart(4)} ${s}`).join(` -`)} - -${l_(e)}`}},l_=t=>`While running ${t.filter(e=>e!==ei.EndOfInput&&e!==ei.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function BWe(t){let e=t.split(` -`),r=e.filter(a=>a.match(/\S/)),s=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(s).trimRight()).join(` -`)}function Ho(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` -`),t=BWe(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 - -`),t=t.replace(/\n(\n)?\n*/g,(s,a)=>a||" "),r&&(t=t.split(/\n/).map(s=>{let a=s.match(/^\s*[*-][\t ]+(.*)/);if(!a)return s.match(/(.{1,80})(?: |$)/g).join(` -`);let n=s.length-s.trimStart().length;return a[1].match(new RegExp(`(.{1,${78-n}})(?: |$)`,"g")).map((c,f)=>" ".repeat(n)+(f===0?"- ":" ")+c).join(` -`)}).join(` - -`)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(s,a,n)=>e.code(a+n+a)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(s,a,n)=>e.bold(a+n+a)),t?`${t} -`:""}var c_,Dre,Pre,u_=Ze(()=>{c_=Array(80).fill("\u2501");for(let t=0;t<=24;++t)c_[c_.length-t]=`\x1B[38;5;${232+t}m\u2501`;Dre={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<75?` ${c_.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`},Pre={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function ya(t){return{...t,[K2]:!0}}function Gf(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function Qx(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,s,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=s!=="."||!e?`${s.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function z2(t,e){return e.length===1?new nt(`${t}${Qx(e[0],{mergeName:!0})}`):new nt(`${t}: -${e.map(r=>` -- ${Qx(r)}`).join("")}`)}function Od(t,e,r){if(typeof r>"u")return e;let s=[],a=[],n=f=>{let p=e;return e=f,n.bind(null,p)};if(!r(e,{errors:s,coercions:a,coercion:n}))throw z2(`Invalid value for ${t}`,s);for(let[,f]of a)f();return e}var K2,Cp=Ze(()=>{kx();K2=Symbol("clipanion/isOption")});var Ea={};Vt(Ea,{KeyRelationship:()=>qf,TypeAssertionError:()=>o0,applyCascade:()=>$2,as:()=>jWe,assert:()=>UWe,assertWithErrors:()=>_We,cascade:()=>Nx,fn:()=>GWe,hasAtLeastOneKey:()=>m_,hasExactLength:()=>Rre,hasForbiddenKeys:()=>lYe,hasKeyRelationship:()=>tB,hasMaxLength:()=>WWe,hasMinLength:()=>qWe,hasMutuallyExclusiveKeys:()=>cYe,hasRequiredKeys:()=>aYe,hasUniqueItems:()=>YWe,isArray:()=>Rx,isAtLeast:()=>g_,isAtMost:()=>KWe,isBase64:()=>nYe,isBoolean:()=>QWe,isDate:()=>TWe,isDict:()=>OWe,isEnum:()=>fo,isHexColor:()=>rYe,isISO8601:()=>tYe,isInExclusiveRange:()=>ZWe,isInInclusiveRange:()=>zWe,isInstanceOf:()=>MWe,isInteger:()=>d_,isJSON:()=>iYe,isLiteral:()=>xre,isLowerCase:()=>XWe,isMap:()=>NWe,isNegative:()=>VWe,isNullable:()=>oYe,isNumber:()=>p_,isObject:()=>kre,isOneOf:()=>h_,isOptional:()=>sYe,isPartial:()=>LWe,isPayload:()=>RWe,isPositive:()=>JWe,isRecord:()=>Fx,isSet:()=>FWe,isString:()=>wE,isTuple:()=>Tx,isUUID4:()=>eYe,isUnknown:()=>A_,isUpperCase:()=>$We,makeTrait:()=>Qre,makeValidator:()=>Wr,matchesRegExp:()=>X2,softAssert:()=>HWe});function ti(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 CE(t,e){if(t.length===0)return"nothing";if(t.length===1)return ti(t[0]);let r=t.slice(0,-1),s=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>ti(n)).join(", ")}${a}${ti(s)}`}function s0(t,e){var r,s,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:vWe.test(e)?`${(s=t?.p)!==null&&s!==void 0?s:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function f_(t,e,r){return t===1?e:r}function mr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function xWe(t,e){return r=>{t[e]=r}}function Wf(t,e){return r=>{let s=t[e];return t[e]=r,Wf(t,e).bind(null,s)}}function Z2(t,e,r){let s=()=>(t(r()),a),a=()=>(t(e),s);return s}function A_(){return Wr({test:(t,e)=>!0})}function xre(t){return Wr({test:(e,r)=>e!==t?mr(r,`Expected ${ti(t)} (got ${ti(e)})`):!0})}function wE(){return Wr({test:(t,e)=>typeof t!="string"?mr(e,`Expected a string (got ${ti(t)})`):!0})}function fo(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),s=new Set(e);return s.size===1?xre([...s][0]):Wr({test:(a,n)=>s.has(a)?!0:r?mr(n,`Expected one of ${CE(e,"or")} (got ${ti(a)})`):mr(n,`Expected a valid enumeration value (got ${ti(a)})`)})}function QWe(){return Wr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return mr(e,"Unbound coercion result");let s=kWe.get(t);if(typeof s<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,s)]),!0}return mr(e,`Expected a boolean (got ${ti(t)})`)}return!0}})}function p_(){return Wr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return mr(e,"Unbound coercion result");let s;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)s=a;else return mr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof s<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,s)]),!0}return mr(e,`Expected a number (got ${ti(t)})`)}return!0}})}function RWe(t){return Wr({test:(e,r)=>{var s;if(typeof r?.coercions>"u")return mr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return mr(r,"Unbound coercion result");if(typeof e!="string")return mr(r,`Expected a string (got ${ti(e)})`);let a;try{a=JSON.parse(e)}catch{return mr(r,`Expected a JSON string (got ${ti(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Wf(n,"value")}))?(r.coercions.push([(s=r.p)!==null&&s!==void 0?s:".",r.coercion.bind(null,n.value)]),!0):!1}})}function TWe(){return Wr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return mr(e,"Unbound coercion result");let s;if(typeof t=="string"&&bre.test(t))s=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))s=new Date(a*1e3);else return mr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof s<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,s)]),!0}return mr(e,`Expected a date (got ${ti(t)})`)}return!0}})}function Rx(t,{delimiter:e}={}){return Wr({test:(r,s)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof s?.coercions<"u"){if(typeof s?.coercion>"u")return mr(s,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return mr(s,`Expected an array (got ${ti(r)})`);let c=!0;for(let f=0,p=r.length;f{var n,c;if(Object.getPrototypeOf(s).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return mr(a,"Unbound coercion result");let f=[...s],p=[...s];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,C)=>E!==f[C])?new Set(p):s;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",Z2(a.coercion,s,h)]),!0}else{let f=!0;for(let p of s)if(f=t(p,Object.assign({},a))&&f,!f&&a?.errors==null)break;return f}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return mr(a,"Unbound coercion result");let f={value:s};return r(s,Object.assign(Object.assign({},a),{coercion:Wf(f,"value")}))?(a.coercions.push([(c=a.p)!==null&&c!==void 0?c:".",Z2(a.coercion,s,()=>new Set(f.value))]),!0):!1}return mr(a,`Expected a set (got ${ti(s)})`)}})}function NWe(t,e){let r=Rx(Tx([t,e])),s=Fx(e,{keys:t});return Wr({test:(a,n)=>{var c,f,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return mr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let C=()=>E.some((S,b)=>S[0]!==h[b][0]||S[1]!==h[b][1])?new Map(E):a;return n.coercions.push([(c=n.p)!==null&&c!==void 0?c:".",Z2(n.coercion,a,C)]),!0}else{let h=!0;for(let[E,C]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(C,Object.assign(Object.assign({},n),{p:s0(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return mr(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([(f=n.p)!==null&&f!==void 0?f:".",Z2(n.coercion,a,()=>new Map(h.value))]),!0):!1:s(a,Object.assign(Object.assign({},n),{coercion:Wf(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",Z2(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return mr(n,`Expected a map (got ${ti(a)})`)}})}function Tx(t,{delimiter:e}={}){let r=Rre(t.length);return Wr({test:(s,a)=>{var n;if(typeof s=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return mr(a,"Unbound coercion result");s=s.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,s)])}if(!Array.isArray(s))return mr(a,`Expected a tuple (got ${ti(s)})`);let c=r(s,Object.assign({},a));for(let f=0,p=s.length;f{var n;if(Array.isArray(s)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?mr(a,"Unbound coercion result"):r(s,Object.assign(Object.assign({},a),{coercion:void 0}))?(s=Object.fromEntries(s),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,s)]),!0):!1;if(typeof s!="object"||s===null)return mr(a,`Expected an object (got ${ti(s)})`);let c=Object.keys(s),f=!0;for(let p=0,h=c.length;p{if(typeof a!="object"||a===null)return mr(n,`Expected an object (got ${ti(a)})`);let c=new Set([...r,...Object.keys(a)]),f={},p=!0;for(let h of c){if(h==="constructor"||h==="__proto__")p=mr(Object.assign(Object.assign({},n),{p:s0(n,h)}),"Unsafe property name");else{let E=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,C=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof E<"u"?p=E(C,Object.assign(Object.assign({},n),{p:s0(n,h),coercion:Wf(a,h)}))&&p:e===null?p=mr(Object.assign(Object.assign({},n),{p:s0(n,h)}),`Extraneous property (got ${ti(C)})`):Object.defineProperty(f,h,{enumerable:!0,get:()=>C,set:xWe(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(f,n)&&p),p}});return Object.assign(s,{properties:t})}function LWe(t){return kre(t,{extra:Fx(A_())})}function Qre(t){return()=>t}function Wr({test:t}){return Qre(t)()}function UWe(t,e){if(!e(t))throw new o0}function _We(t,e){let r=[];if(!e(t,{errors:r}))throw new o0({errors:r})}function HWe(t,e){}function jWe(t,e,{coerce:r=!1,errors:s,throw:a}={}){let n=s?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new o0({errors:n});return{value:void 0,errors:n??!0}}let c={value:t},f=Wf(c,"value"),p=[];if(!e(t,{errors:n,coercion:f,coercions:p})){if(a)throw new o0({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?c.value:{value:c.value,errors:void 0}}function GWe(t,e){let r=Tx(t);return(...s)=>{if(!r(s))throw new o0;return e(...s)}}function qWe(t){return Wr({test:(e,r)=>e.length>=t?!0:mr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function WWe(t){return Wr({test:(e,r)=>e.length<=t?!0:mr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function Rre(t){return Wr({test:(e,r)=>e.length!==t?mr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function YWe({map:t}={}){return Wr({test:(e,r)=>{let s=new Set,a=new Set;for(let n=0,c=e.length;nt<=0?!0:mr(e,`Expected to be negative (got ${t})`)})}function JWe(){return Wr({test:(t,e)=>t>=0?!0:mr(e,`Expected to be positive (got ${t})`)})}function g_(t){return Wr({test:(e,r)=>e>=t?!0:mr(r,`Expected to be at least ${t} (got ${e})`)})}function KWe(t){return Wr({test:(e,r)=>e<=t?!0:mr(r,`Expected to be at most ${t} (got ${e})`)})}function zWe(t,e){return Wr({test:(r,s)=>r>=t&&r<=e?!0:mr(s,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function ZWe(t,e){return Wr({test:(r,s)=>r>=t&&re!==Math.round(e)?mr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?mr(r,`Expected to be a safe integer (got ${e})`):!0})}function X2(t){return Wr({test:(e,r)=>t.test(e)?!0:mr(r,`Expected to match the pattern ${t.toString()} (got ${ti(e)})`)})}function XWe(){return Wr({test:(t,e)=>t!==t.toLowerCase()?mr(e,`Expected to be all-lowercase (got ${t})`):!0})}function $We(){return Wr({test:(t,e)=>t!==t.toUpperCase()?mr(e,`Expected to be all-uppercase (got ${t})`):!0})}function eYe(){return Wr({test:(t,e)=>bWe.test(t)?!0:mr(e,`Expected to be a valid UUID v4 (got ${ti(t)})`)})}function tYe(){return Wr({test:(t,e)=>bre.test(t)?!0:mr(e,`Expected to be a valid ISO 8601 date string (got ${ti(t)})`)})}function rYe({alpha:t=!1}){return Wr({test:(e,r)=>(t?SWe.test(e):DWe.test(e))?!0:mr(r,`Expected to be a valid hexadecimal color string (got ${ti(e)})`)})}function nYe(){return Wr({test:(t,e)=>PWe.test(t)?!0:mr(e,`Expected to be a valid base 64 string (got ${ti(t)})`)})}function iYe(t=A_()){return Wr({test:(e,r)=>{let s;try{s=JSON.parse(e)}catch{return mr(r,`Expected to be a valid JSON string (got ${ti(e)})`)}return t(s,r)}})}function Nx(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Wr({test:(s,a)=>{var n,c;let f={value:s},p=typeof a?.coercions<"u"?Wf(f,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(s,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let E=[];if(typeof h<"u")for(let[,C]of h)E.push(C());try{if(typeof a?.coercions<"u"){if(f.value!==s){if(typeof a?.coercion>"u")return mr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,f.value)])}(c=a?.coercions)===null||c===void 0||c.push(...h)}return r.every(C=>C(f.value,a))}finally{for(let C of E)C()}}})}function $2(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Nx(t,r)}function sYe(t){return Wr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function oYe(t){return Wr({test:(e,r)=>e===null?!0:t(e,r)})}function aYe(t,e){var r;let s=new Set(t),a=eB[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Wr({test:(n,c)=>{let f=new Set(Object.keys(n)),p=[];for(let h of s)a(f,h,n)||p.push(h);return p.length>0?mr(c,`Missing required ${f_(p.length,"property","properties")} ${CE(p,"and")}`):!0}})}function m_(t,e){var r;let s=new Set(t),a=eB[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Wr({test:(n,c)=>Object.keys(n).some(h=>a(s,h,n))?!0:mr(c,`Missing at least one property from ${CE(Array.from(s),"or")}`)})}function lYe(t,e){var r;let s=new Set(t),a=eB[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Wr({test:(n,c)=>{let f=new Set(Object.keys(n)),p=[];for(let h of s)a(f,h,n)&&p.push(h);return p.length>0?mr(c,`Forbidden ${f_(p.length,"property","properties")} ${CE(p,"and")}`):!0}})}function cYe(t,e){var r;let s=new Set(t),a=eB[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Wr({test:(n,c)=>{let f=new Set(Object.keys(n)),p=[];for(let h of s)a(f,h,n)&&p.push(h);return p.length>1?mr(c,`Mutually exclusive properties ${CE(p,"and")}`):!0}})}function tB(t,e,r,s){var a,n;let c=new Set((a=s?.ignore)!==null&&a!==void 0?a:[]),f=eB[(n=s?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=uYe[e],E=e===qf.Forbids?"or":"and";return Wr({test:(C,S)=>{let b=new Set(Object.keys(C));if(!f(b,t,C)||c.has(C[t]))return!0;let I=[];for(let T of p)(f(b,T,C)&&!c.has(C[T]))!==h.expect&&I.push(T);return I.length>=1?mr(S,`Property "${t}" ${h.message} ${f_(I.length,"property","properties")} ${CE(I,E)}`):!0}})}var vWe,SWe,DWe,PWe,bWe,bre,kWe,MWe,h_,o0,eB,qf,uYe,Ul=Ze(()=>{vWe=/^[a-zA-Z_][a-zA-Z0-9_]*$/;SWe=/^#[0-9a-f]{6}$/i,DWe=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,PWe=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,bWe=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,bre=/^(?:[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)?)$/;kWe=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);MWe=t=>Wr({test:(e,r)=>e instanceof t?!0:mr(r,`Expected an instance of ${t.name} (got ${ti(e)})`)}),h_=(t,{exclusive:e=!1}={})=>Wr({test:(r,s)=>{var a,n,c;let f=[],p=typeof s?.errors<"u"?[]:void 0;for(let h=0,E=t.length;h1?mr(s,`Expected to match exactly a single predicate (matched ${f.join(", ")})`):(c=s?.errors)===null||c===void 0||c.push(...p),!1}});o0=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` -`;for(let s of e)r+=` -- ${s}`}super(r)}};eB={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"})(qf||(qf={}));uYe={[qf.Forbids]:{expect:!1,message:"forbids using"},[qf.Requires]:{expect:!0,message:"requires using"}}});var ot,a0=Ze(()=>{Cp();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:c}=await Promise.resolve().then(()=>(Ul(),Ea)),f=c(a(n()),r),p=[],h=[];if(!f(this,{errors:p,coercions:h}))throw z2("Invalid option schema",p);for(let[,C]of h)C()}else if(r!=null)throw new Error("Invalid command schema");let s=await this.execute();return typeof s<"u"?s:0}};ot.isOption=K2;ot.Default=[]});function il(t){a_&&console.log(t)}function Fre(){let t={nodes:[]};for(let e=0;e{if(e.has(s))return;e.add(s);let a=t.nodes[s];for(let c of Object.values(a.statics))for(let{to:f}of c)r(f);for(let[,{to:c}]of a.dynamics)r(c);for(let{to:c}of a.shortcuts)r(c);let n=new Set(a.shortcuts.map(({to:c})=>c));for(;a.shortcuts.length>0;){let{to:c}=a.shortcuts.shift(),f=t.nodes[c];for(let[p,h]of Object.entries(f.statics)){let E=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let C of h)E.some(({to:S})=>C.to===S)||E.push(C)}for(let[p,h]of f.dynamics)a.dynamics.some(([E,{to:C}])=>p===E&&h.to===C)||a.dynamics.push([p,h]);for(let p of f.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(En.InitialNode)}function pYe(t,{prefix:e=""}={}){if(a_){il(`${e}Nodes are:`);for(let r=0;rE!==En.ErrorNode).map(({state:E})=>({usage:E.candidateUsage,reason:null})));if(h.every(({node:E})=>E===En.ErrorNode))throw new IE(e,h.map(({state:E})=>({usage:E.candidateUsage,reason:E.errorMessage})));s=dYe(h)}if(s.length>0){il(" Results:");for(let n of s)il(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else il(" No results");return s}function gYe(t,e,{endToken:r=ei.EndOfInput}={}){let s=hYe(t,[...e,r]);return mYe(e,s.map(({state:a})=>a))}function dYe(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 mYe(t,e){let r=e.filter(S=>S.selectedIndex!==null),s=r.filter(S=>!S.partial);if(s.length>0&&(r=s),r.length===0)throw new Error;let a=r.filter(S=>S.selectedIndex===Nd||S.requiredOptions.every(b=>b.some(I=>S.options.find(T=>T.name===I))));if(a.length===0)throw new IE(t,r.map(S=>({usage:S.candidateUsage,reason:null})));let n=0;for(let S of a)S.path.length>n&&(n=S.path.length);let c=a.filter(S=>S.path.length===n),f=S=>S.positionals.filter(({extra:b})=>!b).length+S.options.length,p=c.map(S=>({state:S,positionalCount:f(S)})),h=0;for(let{positionalCount:S}of p)S>h&&(h=S);let E=p.filter(({positionalCount:S})=>S===h).map(({state:S})=>S),C=yYe(E);if(C.length>1)throw new xx(t,C.map(S=>S.candidateUsage));return C[0]}function yYe(t){let e=[],r=[];for(let s of t)s.selectedIndex===Nd?r.push(s):e.push(s);return r.length>0&&e.push({...Tre,path:Nre(...r.map(s=>s.path)),options:r.reduce((s,a)=>s.concat(a.options),[])}),e}function Nre(t,e,...r){return e===void 0?Array.from(t):Nre(t.filter((s,a)=>s===e[a]),...r)}function _l(){return{dynamics:[],shortcuts:[],statics:{}}}function Ore(t){return t===En.SuccessNode||t===En.ErrorNode}function y_(t,e=0){return{to:Ore(t.to)?t.to:t.to>=En.CustomNode?t.to+e-En.CustomNode+1:t.to+e,reducer:t.reducer}}function EYe(t,e=0){let r=_l();for(let[s,a]of t.dynamics)r.dynamics.push([s,y_(a,e)]);for(let s of t.shortcuts)r.shortcuts.push(y_(s,e));for(let[s,a]of Object.entries(t.statics))r.statics[s]=a.map(n=>y_(n,e));return r}function Hs(t,e,r,s,a){t.nodes[e].dynamics.push([r,{to:s,reducer:a}])}function BE(t,e,r,s){t.nodes[e].shortcuts.push({to:r,reducer:s})}function Ia(t,e,r,s,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:s,reducer:a})}function Ox(t,e,r,s,a){if(Array.isArray(e)){let[n,...c]=e;return t[n](r,s,a,...c)}else return t[e](r,s,a)}var Tre,IYe,E_,Hl,I_,Lx,Mx=Ze(()=>{bx();kx();Tre={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:Nd,partial:!1,tokens:[]};IYe={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,s)=>!t.ignoreOptions&&e===s,isBatchOption:(t,e,r,s)=>!t.ignoreOptions&&Sre.test(e)&&[...e.slice(1)].every(a=>s.has(`-${a}`)),isBoundOption:(t,e,r,s,a)=>{let n=e.match(o_);return!t.ignoreOptions&&!!n&&Px.test(n[1])&&s.has(n[1])&&a.filter(c=>c.nameSet.includes(n[1])).every(c=>c.allowBinding)},isNegatedOption:(t,e,r,s)=>!t.ignoreOptions&&e===`--no-${s.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&s_.test(e),isUnsupportedOption:(t,e,r,s)=>!t.ignoreOptions&&e.startsWith("-")&&Px.test(e)&&!s.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!Px.test(e)},E_={setCandidateState:(t,e,r,s)=>({...t,...s}),setSelectedIndex:(t,e,r,s)=>({...t,selectedIndex:s}),setPartialIndex:(t,e,r,s)=>({...t,selectedIndex:s,partial:!0}),pushBatch:(t,e,r,s)=>{let a=t.options.slice(),n=t.tokens.slice();for(let c=1;c{let[,s,a]=e.match(o_),n=t.options.concat({name:s,value:a}),c=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,s.length],option:s},{segmentIndex:r,type:"assign",slice:[s.length,s.length+1]},{segmentIndex:r,type:"value",slice:[s.length+1,s.length+a.length+1]}]);return{...t,options:n,tokens:c}},pushPath:(t,e,r)=>{let s=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:s,tokens:a}},pushPositional:(t,e,r)=>{let s=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:s,tokens:a}},pushExtra:(t,e,r)=>{let s=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:s,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let s=t.positionals.concat({value:e,extra:Hl}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:s,tokens:a}},pushTrue:(t,e,r,s)=>{let a=t.options.concat({name:s,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:s});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,s)=>{let a=t.options.concat({name:s,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:s});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,s)=>{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 s;let a=t.options[t.options.length-1],n=t.options.slice(),c=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((s=a.value)!==null&&s!==void 0?s:[]).concat([e]),{...t,options:n,tokens:c}},setStringValue:(t,e,r)=>{let s=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return s.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,s)=>{let[,,a]=e.match(s_);return typeof a<"u"?{...t,options:[{name:"-c",value:String(s)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(s)}]}},setError:(t,e,r,s)=>e===ei.EndOfInput||e===ei.EndOfPartialInput?{...t,errorMessage:`${s}.`}:{...t,errorMessage:`${s} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},Hl=Symbol(),I_=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:s=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:s,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===Hl)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!==Hl?this.arity.extra.push(e):this.arity.extra!==Hl&&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===Hl)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 s=0;s1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(s))throw new Error(`The arity must be an integer, got ${s}`);if(s<0)throw new Error(`The arity must be positive, got ${s}`);let f=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,f);this.options.push({preferredName:f,nameSet:e,description:r,arity:s,hidden:a,required:n,allowBinding:c})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let s=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&s.push(...this.paths[0]),e){for(let{preferredName:c,nameSet:f,arity:p,hidden:h,description:E,required:C}of this.options){if(h)continue;let S=[];for(let I=0;I`:`[${b}]`)}s.push(...this.arity.leading.map(c=>`<${c}>`)),this.arity.extra===Hl?s.push("..."):s.push(...this.arity.extra.map(c=>`[${c}]`)),s.push(...this.arity.trailing.map(c=>`<${c}>`))}return{usage:s.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=Fre(),r=En.InitialNode,s=this.usage().usage,a=this.options.filter(f=>f.required).map(f=>f.nameSet);r=Ou(e,_l()),Ia(e,En.InitialNode,ei.StartOfInput,r,["setCandidateState",{candidateUsage:s,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",c=this.paths.length>0?this.paths:[[]];for(let f of c){let p=r;if(f.length>0){let S=Ou(e,_l());BE(e,p,S),this.registerOptions(e,S),p=S}for(let S=0;S0||!this.arity.proxy){let S=Ou(e,_l());Hs(e,p,"isHelp",S,["useHelp",this.cliIndex]),Hs(e,S,"always",S,"pushExtra"),Ia(e,S,ei.EndOfInput,En.SuccessNode,["setSelectedIndex",Nd]),this.registerOptions(e,p)}this.arity.leading.length>0&&(Ia(e,p,ei.EndOfInput,En.ErrorNode,["setError","Not enough positional arguments"]),Ia(e,p,ei.EndOfPartialInput,En.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let S=0;S0||S+1!==this.arity.leading.length)&&(Ia(e,b,ei.EndOfInput,En.ErrorNode,["setError","Not enough positional arguments"]),Ia(e,b,ei.EndOfPartialInput,En.SuccessNode,["setPartialIndex",this.cliIndex])),Hs(e,h,"isNotOptionLike",b,"pushPositional"),h=b}let E=h;if(this.arity.extra===Hl||this.arity.extra.length>0){let S=Ou(e,_l());if(BE(e,h,S),this.arity.extra===Hl){let b=Ou(e,_l());this.arity.proxy||this.registerOptions(e,b),Hs(e,h,n,b,"pushExtraNoLimits"),Hs(e,b,n,b,"pushExtraNoLimits"),BE(e,b,S)}else for(let b=0;b0)&&this.registerOptions(e,I),Hs(e,E,n,I,"pushExtra"),BE(e,I,S),E=I}E=S}this.arity.trailing.length>0&&(Ia(e,E,ei.EndOfInput,En.ErrorNode,["setError","Not enough positional arguments"]),Ia(e,E,ei.EndOfPartialInput,En.SuccessNode,["setPartialIndex",this.cliIndex]));let C=E;for(let S=0;S=0&&e{let c=n?ei.EndOfPartialInput:ei.EndOfInput;return gYe(s,a,{endToken:c})}}}}});function Mre(){return Ux.default&&"getColorDepth"in Ux.default.WriteStream.prototype?Ux.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 Ure(t){let e=Lre;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=Ie("async_hooks");e=Lre=new r;let s=process.stdout._write;process.stdout._write=function(n,c,f){let p=e.getStore();return typeof p>"u"?s.call(this,n,c,f):p.stdout.write(n,c,f)};let a=process.stderr._write;process.stderr._write=function(n,c,f){let p=e.getStore();return typeof p>"u"?a.call(this,n,c,f):p.stderr.write(n,c,f)}}return r=>e.run(t,r)}var Ux,Lre,_re=Ze(()=>{Ux=ut(Ie("tty"),1)});var _x,Hre=Ze(()=>{a0();_x=class t extends ot{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let s=new t(r);s.path=e.path;for(let a of e.options)switch(a.name){case"-c":s.commands.push(Number(a.value));break;case"-i":s.index=Number(a.value);break}return s}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 s of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[s].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 qre(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:s,resolvedContext:a}=Yre(t);return Ca.from(r,e).runExit(s,a)}async function Wre(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:s,resolvedContext:a}=Yre(t);return Ca.from(r,e).run(s,a)}function Yre(t){let e,r,s,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(s=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])?s=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],s=t[2]):t[0]&&t[0].prototype instanceof ot||Array.isArray(t[0])?(r=t[0],s=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],s=t[2],a=t[3];break}if(typeof s>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:s,resolvedContext:a}}function Gre(t){return t()}var jre,Ca,Vre=Ze(()=>{bx();Mx();u_();_re();a0();Hre();jre=Symbol("clipanion/errorCommand");Ca=class t{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:s,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new Lx({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=s,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let s=new t(r),a=Array.isArray(e)?e:[e];for(let n of a)s.register(n);return s}register(e){var r;let s=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[ot.isOption]&&s.set(p,h)}let n=this.builder.command(),c=n.cliIndex,f=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof f<"u")for(let p of f)n.addPath(p);this.registrations.set(e,{specs:s,builder:n,index:c});for(let[p,{definition:h}]of s.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:s,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:c,process:f}=this.builder.compile(),p=f(s,{partial:n}),h={...t.defaultContext,...a};switch(p.selectedIndex){case Nd:{let E=_x.from(p,c);return E.context=h,E.tokens=p.tokens,E}default:{let{commandClass:E}=c[p.selectedIndex],C=this.registrations.get(E);if(typeof C>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let S=new E;S.context=h,S.tokens=p.tokens,S.path=p.path;try{for(let[b,{transformer:I}]of C.specs.entries())S[b]=I(C.builder,b,p,h);return S}catch(b){throw b[jre]=S,b}}break}}async run(e,r){var s,a;let n,c={...t.defaultContext,...r},f=(s=this.enableColors)!==null&&s!==void 0?s:c.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,c)}catch(E){return c.stdout.write(this.error(E,{colored:f})),1}if(n.help)return c.stdout.write(this.usage(n,{colored:f,detailed:!0})),0;n.context=c,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,C)=>this.error(E,C),format:E=>this.format(E),process:(E,C)=>this.process(E,{...c,...C}),run:(E,C)=>this.run(E,{...c,...C}),usage:(E,C)=>this.usage(E,C)};let p=this.enableCapture&&(a=Ure(c))!==null&&a!==void 0?a:Gre,h;try{h=await p(()=>n.validateAndExecute().catch(E=>n.catch(E).then(()=>0)))}catch(E){return c.stdout.write(this.error(E,{colored:f,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:s}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),c=typeof e.usage.category<"u"?Ho(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,f=typeof e.usage.description<"u"?Ho(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?Ho(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([E,C])=>[Ho(E,{format:this.format(r),paragraphs:!1}),C.replace(/\$0/g,this.binaryName)]):void 0;return{path:s,usage:a,category:c,description:f,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let s of this.registrations.keys()){let a=this.definition(s,{colored:e});a&&r.push(a)}return r}usage(e=null,{colored:r,detailed:s=!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&&(s=!0)}let c=e!==null&&e instanceof ot?e.constructor:e,f="";if(c)if(s){let{description:p="",details:h="",examples:E=[]}=c.usage||{};p!==""&&(f+=Ho(p,{format:this.format(r),paragraphs:!1}).replace(/^./,b=>b.toUpperCase()),f+=` -`),(h!==""||E.length>0)&&(f+=`${this.format(r).header("Usage")} -`,f+=` -`);let{usage:C,options:S}=this.getUsageByRegistration(c,{inlineOptions:!1});if(f+=`${this.format(r).bold(a)}${C} -`,S.length>0){f+=` -`,f+=`${this.format(r).header("Options")} -`;let b=S.reduce((I,T)=>Math.max(I,T.definition.length),0);f+=` -`;for(let{definition:I,description:T}of S)f+=` ${this.format(r).bold(I.padEnd(b))} ${Ho(T,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(f+=` -`,f+=`${this.format(r).header("Details")} -`,f+=` -`,f+=Ho(h,{format:this.format(r),paragraphs:!0})),E.length>0){f+=` -`,f+=`${this.format(r).header("Examples")} -`;for(let[b,I]of E)f+=` -`,f+=Ho(b,{format:this.format(r),paragraphs:!1}),f+=`${I.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} -`}}else{let{usage:p}=this.getUsageByRegistration(c);f+=`${this.format(r).bold(a)}${p} -`}else{let p=new Map;for(let[S,{index:b}]of this.registrations.entries()){if(typeof S.usage>"u")continue;let I=typeof S.usage.category<"u"?Ho(S.usage.category,{format:this.format(r),paragraphs:!1}):null,T=p.get(I);typeof T>"u"&&p.set(I,T=[]);let{usage:N}=this.getUsageByIndex(b);T.push({commandClass:S,usage:N})}let h=Array.from(p.keys()).sort((S,b)=>S===null?-1:b===null?1:S.localeCompare(b,"en",{usage:"sort",caseFirst:"upper"})),E=typeof this.binaryLabel<"u",C=typeof this.binaryVersion<"u";E||C?(E&&C?f+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} - -`:E?f+=`${this.format(r).header(`${this.binaryLabel}`)} -`:f+=`${this.format(r).header(`${this.binaryVersion}`)} -`,f+=` ${this.format(r).bold(a)}${this.binaryName} -`):f+=`${this.format(r).bold(a)}${this.binaryName} -`;for(let S of h){let b=p.get(S).slice().sort((T,N)=>T.usage.localeCompare(N.usage,"en",{usage:"sort",caseFirst:"upper"})),I=S!==null?S.trim():"General commands";f+=` -`,f+=`${this.format(r).header(`${I}`)} -`;for(let{commandClass:T,usage:N}of b){let U=T.usage.description||"undocumented";f+=` -`,f+=` ${this.format(r).bold(N)} -`,f+=` ${Ho(U,{format:this.format(r),paragraphs:!1})}`}}f+=` -`,f+=Ho("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 f}error(e,r){var s,{colored:a,command:n=(s=e[jre])!==null&&s!==void 0?s: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 c="",f=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");f==="Error"&&(f="Internal Error"),c+=`${this.format(a).error(f)}: ${e.message} -`;let p=e.clipanion;return typeof p<"u"?p.type==="usage"&&(c+=` -`,c+=this.usage(n)):e.stack&&(c+=`${e.stack.replace(/^.*\n/,"")} -`),c}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:t.defaultContext.colorDepth>1)?Dre:Pre}getUsageByRegistration(e,r){let s=this.registrations.get(e);if(typeof s>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(s.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};Ca.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:Mre()}});var rB,Jre=Ze(()=>{a0();rB=class extends ot{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} -`)}};rB.paths=[["--clipanion=definitions"]]});var nB,Kre=Ze(()=>{a0();nB=class extends ot{async execute(){this.context.stdout.write(this.cli.usage())}};nB.paths=[["-h"],["--help"]]});function Hx(t={}){return ya({definition(e,r){var s;e.addProxy({name:(s=t.name)!==null&&s!==void 0?s:r,required:t.required})},transformer(e,r,s){return s.positionals.map(({value:a})=>a)}})}var C_=Ze(()=>{Cp()});var iB,zre=Ze(()=>{a0();C_();iB=class extends ot{constructor(){super(...arguments),this.args=Hx()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} -`)}};iB.paths=[["--clipanion=tokens"]]});var sB,Zre=Ze(()=>{a0();sB=class extends ot{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} -`)}};sB.paths=[["-v"],["--version"]]});var w_={};Vt(w_,{DefinitionsCommand:()=>rB,HelpCommand:()=>nB,TokensCommand:()=>iB,VersionCommand:()=>sB});var Xre=Ze(()=>{Jre();Kre();zre();Zre()});function $re(t,e,r){let[s,a]=Gf(e,r??{}),{arity:n=1}=a,c=t.split(","),f=new Set(c);return ya({definition(p){p.addOption({names:c,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,E){let C,S=typeof s<"u"?[...s]:void 0;for(let{name:b,value:I}of E.options)f.has(b)&&(C=b,S=S??[],S.push(I));return typeof S<"u"?Od(C??h,S,a.validator):S}})}var ene=Ze(()=>{Cp()});function tne(t,e,r){let[s,a]=Gf(e,r??{}),n=t.split(","),c=new Set(n);return ya({definition(f){f.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(f,p,h){let E=s;for(let{name:C,value:S}of h.options)c.has(C)&&(E=S);return E}})}var rne=Ze(()=>{Cp()});function nne(t,e,r){let[s,a]=Gf(e,r??{}),n=t.split(","),c=new Set(n);return ya({definition(f){f.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(f,p,h){let E=s;for(let{name:C,value:S}of h.options)c.has(C)&&(E??(E=0),S?E+=1:E=0);return E}})}var ine=Ze(()=>{Cp()});function sne(t={}){return ya({definition(e,r){var s;e.addRest({name:(s=t.name)!==null&&s!==void 0?s:r,required:t.required})},transformer(e,r,s){let a=c=>{let f=s.positionals[c];return f.extra===Hl||f.extra===!1&&cc)}})}var one=Ze(()=>{Mx();Cp()});function CYe(t,e,r){let[s,a]=Gf(e,r??{}),{arity:n=1}=a,c=t.split(","),f=new Set(c);return ya({definition(p){p.addOption({names:c,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,E,C){let S,b=s;typeof a.env<"u"&&C.env[a.env]&&(S=a.env,b=C.env[a.env]);for(let{name:I,value:T}of E.options)f.has(I)&&(S=I,b=T);return typeof b=="string"?Od(S??h,b,a.validator):b}})}function wYe(t={}){let{required:e=!0}=t;return ya({definition(r,s){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:s,required:t.required})},transformer(r,s,a){var n;for(let c=0;c{Mx();Cp()});var ge={};Vt(ge,{Array:()=>$re,Boolean:()=>tne,Counter:()=>nne,Proxy:()=>Hx,Rest:()=>sne,String:()=>ane,applyValidator:()=>Od,cleanValidationError:()=>Qx,formatError:()=>z2,isOptionSymbol:()=>K2,makeCommandOption:()=>ya,rerouteArguments:()=>Gf});var cne=Ze(()=>{Cp();C_();ene();rne();ine();one();lne()});var oB={};Vt(oB,{Builtins:()=>w_,Cli:()=>Ca,Command:()=>ot,Option:()=>ge,UsageError:()=>nt,formatMarkdownish:()=>Ho,run:()=>Wre,runExit:()=>qre});var Yt=Ze(()=>{kx();u_();a0();Vre();Xre();cne()});var une=_((MRt,BYe)=>{BYe.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 hne=_((URt,wp)=>{var fne=Ie("fs"),v_=Ie("path"),vYe=Ie("os"),SYe=Ie("crypto"),DYe=une(),S_=DYe.version,PYe=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function bYe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` -`);let s;for(;(s=PYe.exec(r))!=null;){let a=s[1],n=s[2]||"";n=n.trim();let c=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),c==='"'&&(n=n.replace(/\\n/g,` -`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function xYe(t){let e=pne(t),r=js.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let s=Ane(t).split(","),a=s.length,n;for(let c=0;c=a)throw f}return js.parse(n)}function kYe(t){console.log(`[dotenv@${S_}][INFO] ${t}`)}function QYe(t){console.log(`[dotenv@${S_}][WARN] ${t}`)}function B_(t){console.log(`[dotenv@${S_}][DEBUG] ${t}`)}function Ane(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 RYe(t,e){let r;try{r=new URL(e)}catch(f){throw f.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"):f}let s=r.password;if(!s)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()}`,c=t.parsed[n];if(!c)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:c,key:s}}function pne(t){let e=v_.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function TYe(t){return t[0]==="~"?v_.join(vYe.homedir(),t.slice(1)):t}function FYe(t){kYe("Loading env from encrypted .env.vault");let e=js._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),js.populate(r,e,t),{parsed:e}}function NYe(t){let e=v_.resolve(process.cwd(),".env"),r="utf8",s=!!(t&&t.debug);t&&(t.path!=null&&(e=TYe(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=js.parse(fne.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),js.populate(n,a,t),{parsed:a}}catch(a){return s&&B_(`Failed to load ${e} ${a.message}`),{error:a}}}function OYe(t){let e=pne(t);return Ane(t).length===0?js.configDotenv(t):fne.existsSync(e)?js._configVault(t):(QYe(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),js.configDotenv(t))}function LYe(t,e){let r=Buffer.from(e.slice(-64),"hex"),s=Buffer.from(t,"base64"),a=s.slice(0,12),n=s.slice(-16);s=s.slice(12,-16);try{let c=SYe.createDecipheriv("aes-256-gcm",r,a);return c.setAuthTag(n),`${c.update(s)}${c.final()}`}catch(c){let f=c instanceof RangeError,p=c.message==="Invalid key length",h=c.message==="Unsupported state or unable to authenticate data";if(f||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: ",c.code),console.error("Error: ",c.message),c}}function MYe(t,e,r={}){let s=!!(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]),s&&B_(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var js={configDotenv:NYe,_configVault:FYe,_parseVault:xYe,config:OYe,decrypt:LYe,parse:bYe,populate:MYe};wp.exports.configDotenv=js.configDotenv;wp.exports._configVault=js._configVault;wp.exports._parseVault=js._parseVault;wp.exports.config=js.config;wp.exports.decrypt=js.decrypt;wp.exports.parse=js.parse;wp.exports.populate=js.populate;wp.exports=js});var dne=_((_Rt,gne)=>{"use strict";gne.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var Ld=_((HRt,D_)=>{"use strict";var UYe=dne(),mne=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,s=()=>{r--,e.length>0&&e.shift()()},a=(f,p,...h)=>{r++;let E=UYe(f,...h);p(E),E.then(s,s)},n=(f,p,...h)=>{rnew Promise(h=>n(f,h,...p));return Object.defineProperties(c,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),c};D_.exports=mne;D_.exports.default=mne});function Yf(t){return`YN${t.toString(10).padStart(4,"0")}`}function jx(t){let e=Number(t.slice(2));if(typeof Br[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var Br,Gx=Ze(()=>{Br=(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[Me.INVALID_PROVENANCE_ENVIRONMENT=91]="INVALID_PROVENANCE_ENVIRONMENT",Me))(Br||{})});var aB=_((GRt,yne)=>{var _Ye="2.0.0",HYe=Number.MAX_SAFE_INTEGER||9007199254740991,jYe=16,GYe=250,qYe=["major","premajor","minor","preminor","patch","prepatch","prerelease"];yne.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:jYe,MAX_SAFE_BUILD_LENGTH:GYe,MAX_SAFE_INTEGER:HYe,RELEASE_TYPES:qYe,SEMVER_SPEC_VERSION:_Ye,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var lB=_((qRt,Ene)=>{var WYe=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};Ene.exports=WYe});var vE=_((Bp,Ine)=>{var{MAX_SAFE_COMPONENT_LENGTH:P_,MAX_SAFE_BUILD_LENGTH:YYe,MAX_LENGTH:VYe}=aB(),JYe=lB();Bp=Ine.exports={};var KYe=Bp.re=[],zYe=Bp.safeRe=[],rr=Bp.src=[],nr=Bp.t={},ZYe=0,b_="[a-zA-Z0-9-]",XYe=[["\\s",1],["\\d",VYe],[b_,YYe]],$Ye=t=>{for(let[e,r]of XYe)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},Jr=(t,e,r)=>{let s=$Ye(e),a=ZYe++;JYe(t,a,e),nr[t]=a,rr[a]=e,KYe[a]=new RegExp(e,r?"g":void 0),zYe[a]=new RegExp(s,r?"g":void 0)};Jr("NUMERICIDENTIFIER","0|[1-9]\\d*");Jr("NUMERICIDENTIFIERLOOSE","\\d+");Jr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${b_}*`);Jr("MAINVERSION",`(${rr[nr.NUMERICIDENTIFIER]})\\.(${rr[nr.NUMERICIDENTIFIER]})\\.(${rr[nr.NUMERICIDENTIFIER]})`);Jr("MAINVERSIONLOOSE",`(${rr[nr.NUMERICIDENTIFIERLOOSE]})\\.(${rr[nr.NUMERICIDENTIFIERLOOSE]})\\.(${rr[nr.NUMERICIDENTIFIERLOOSE]})`);Jr("PRERELEASEIDENTIFIER",`(?:${rr[nr.NUMERICIDENTIFIER]}|${rr[nr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASEIDENTIFIERLOOSE",`(?:${rr[nr.NUMERICIDENTIFIERLOOSE]}|${rr[nr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASE",`(?:-(${rr[nr.PRERELEASEIDENTIFIER]}(?:\\.${rr[nr.PRERELEASEIDENTIFIER]})*))`);Jr("PRERELEASELOOSE",`(?:-?(${rr[nr.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${rr[nr.PRERELEASEIDENTIFIERLOOSE]})*))`);Jr("BUILDIDENTIFIER",`${b_}+`);Jr("BUILD",`(?:\\+(${rr[nr.BUILDIDENTIFIER]}(?:\\.${rr[nr.BUILDIDENTIFIER]})*))`);Jr("FULLPLAIN",`v?${rr[nr.MAINVERSION]}${rr[nr.PRERELEASE]}?${rr[nr.BUILD]}?`);Jr("FULL",`^${rr[nr.FULLPLAIN]}$`);Jr("LOOSEPLAIN",`[v=\\s]*${rr[nr.MAINVERSIONLOOSE]}${rr[nr.PRERELEASELOOSE]}?${rr[nr.BUILD]}?`);Jr("LOOSE",`^${rr[nr.LOOSEPLAIN]}$`);Jr("GTLT","((?:<|>)?=?)");Jr("XRANGEIDENTIFIERLOOSE",`${rr[nr.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Jr("XRANGEIDENTIFIER",`${rr[nr.NUMERICIDENTIFIER]}|x|X|\\*`);Jr("XRANGEPLAIN",`[v=\\s]*(${rr[nr.XRANGEIDENTIFIER]})(?:\\.(${rr[nr.XRANGEIDENTIFIER]})(?:\\.(${rr[nr.XRANGEIDENTIFIER]})(?:${rr[nr.PRERELEASE]})?${rr[nr.BUILD]}?)?)?`);Jr("XRANGEPLAINLOOSE",`[v=\\s]*(${rr[nr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${rr[nr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${rr[nr.XRANGEIDENTIFIERLOOSE]})(?:${rr[nr.PRERELEASELOOSE]})?${rr[nr.BUILD]}?)?)?`);Jr("XRANGE",`^${rr[nr.GTLT]}\\s*${rr[nr.XRANGEPLAIN]}$`);Jr("XRANGELOOSE",`^${rr[nr.GTLT]}\\s*${rr[nr.XRANGEPLAINLOOSE]}$`);Jr("COERCEPLAIN",`(^|[^\\d])(\\d{1,${P_}})(?:\\.(\\d{1,${P_}}))?(?:\\.(\\d{1,${P_}}))?`);Jr("COERCE",`${rr[nr.COERCEPLAIN]}(?:$|[^\\d])`);Jr("COERCEFULL",rr[nr.COERCEPLAIN]+`(?:${rr[nr.PRERELEASE]})?(?:${rr[nr.BUILD]})?(?:$|[^\\d])`);Jr("COERCERTL",rr[nr.COERCE],!0);Jr("COERCERTLFULL",rr[nr.COERCEFULL],!0);Jr("LONETILDE","(?:~>?)");Jr("TILDETRIM",`(\\s*)${rr[nr.LONETILDE]}\\s+`,!0);Bp.tildeTrimReplace="$1~";Jr("TILDE",`^${rr[nr.LONETILDE]}${rr[nr.XRANGEPLAIN]}$`);Jr("TILDELOOSE",`^${rr[nr.LONETILDE]}${rr[nr.XRANGEPLAINLOOSE]}$`);Jr("LONECARET","(?:\\^)");Jr("CARETTRIM",`(\\s*)${rr[nr.LONECARET]}\\s+`,!0);Bp.caretTrimReplace="$1^";Jr("CARET",`^${rr[nr.LONECARET]}${rr[nr.XRANGEPLAIN]}$`);Jr("CARETLOOSE",`^${rr[nr.LONECARET]}${rr[nr.XRANGEPLAINLOOSE]}$`);Jr("COMPARATORLOOSE",`^${rr[nr.GTLT]}\\s*(${rr[nr.LOOSEPLAIN]})$|^$`);Jr("COMPARATOR",`^${rr[nr.GTLT]}\\s*(${rr[nr.FULLPLAIN]})$|^$`);Jr("COMPARATORTRIM",`(\\s*)${rr[nr.GTLT]}\\s*(${rr[nr.LOOSEPLAIN]}|${rr[nr.XRANGEPLAIN]})`,!0);Bp.comparatorTrimReplace="$1$2$3";Jr("HYPHENRANGE",`^\\s*(${rr[nr.XRANGEPLAIN]})\\s+-\\s+(${rr[nr.XRANGEPLAIN]})\\s*$`);Jr("HYPHENRANGELOOSE",`^\\s*(${rr[nr.XRANGEPLAINLOOSE]})\\s+-\\s+(${rr[nr.XRANGEPLAINLOOSE]})\\s*$`);Jr("STAR","(<|>)?=?\\s*\\*");Jr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Jr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var qx=_((WRt,Cne)=>{var eVe=Object.freeze({loose:!0}),tVe=Object.freeze({}),rVe=t=>t?typeof t!="object"?eVe:t:tVe;Cne.exports=rVe});var x_=_((YRt,vne)=>{var wne=/^[0-9]+$/,Bne=(t,e)=>{let r=wne.test(t),s=wne.test(e);return r&&s&&(t=+t,e=+e),t===e?0:r&&!s?-1:s&&!r?1:tBne(e,t);vne.exports={compareIdentifiers:Bne,rcompareIdentifiers:nVe}});var jo=_((VRt,bne)=>{var Wx=lB(),{MAX_LENGTH:Sne,MAX_SAFE_INTEGER:Yx}=aB(),{safeRe:Dne,t:Pne}=vE(),iVe=qx(),{compareIdentifiers:SE}=x_(),k_=class t{constructor(e,r){if(r=iVe(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>Sne)throw new TypeError(`version is longer than ${Sne} characters`);Wx("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let s=e.trim().match(r.loose?Dne[Pne.LOOSE]:Dne[Pne.FULL]);if(!s)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+s[1],this.minor=+s[2],this.patch=+s[3],this.major>Yx||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Yx||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Yx||this.patch<0)throw new TypeError("Invalid patch version");s[4]?this.prerelease=s[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(".")&&s===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];s===!1&&(n=[r]),SE(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}};bne.exports=k_});var Md=_((JRt,kne)=>{var xne=jo(),sVe=(t,e,r=!1)=>{if(t instanceof xne)return t;try{return new xne(t,e)}catch(s){if(!r)return null;throw s}};kne.exports=sVe});var Rne=_((KRt,Qne)=>{var oVe=Md(),aVe=(t,e)=>{let r=oVe(t,e);return r?r.version:null};Qne.exports=aVe});var Fne=_((zRt,Tne)=>{var lVe=Md(),cVe=(t,e)=>{let r=lVe(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};Tne.exports=cVe});var Lne=_((ZRt,One)=>{var Nne=jo(),uVe=(t,e,r,s,a)=>{typeof r=="string"&&(a=s,s=r,r=void 0);try{return new Nne(t instanceof Nne?t.version:t,r).inc(e,s,a).version}catch{return null}};One.exports=uVe});var _ne=_((XRt,Une)=>{var Mne=Md(),fVe=(t,e)=>{let r=Mne(t,null,!0),s=Mne(e,null,!0),a=r.compare(s);if(a===0)return null;let n=a>0,c=n?r:s,f=n?s:r,p=!!c.prerelease.length;if(!!f.prerelease.length&&!p)return!f.patch&&!f.minor?"major":c.patch?"patch":c.minor?"minor":"major";let E=p?"pre":"";return r.major!==s.major?E+"major":r.minor!==s.minor?E+"minor":r.patch!==s.patch?E+"patch":"prerelease"};Une.exports=fVe});var jne=_(($Rt,Hne)=>{var AVe=jo(),pVe=(t,e)=>new AVe(t,e).major;Hne.exports=pVe});var qne=_((eTt,Gne)=>{var hVe=jo(),gVe=(t,e)=>new hVe(t,e).minor;Gne.exports=gVe});var Yne=_((tTt,Wne)=>{var dVe=jo(),mVe=(t,e)=>new dVe(t,e).patch;Wne.exports=mVe});var Jne=_((rTt,Vne)=>{var yVe=Md(),EVe=(t,e)=>{let r=yVe(t,e);return r&&r.prerelease.length?r.prerelease:null};Vne.exports=EVe});var Bc=_((nTt,zne)=>{var Kne=jo(),IVe=(t,e,r)=>new Kne(t,r).compare(new Kne(e,r));zne.exports=IVe});var Xne=_((iTt,Zne)=>{var CVe=Bc(),wVe=(t,e,r)=>CVe(e,t,r);Zne.exports=wVe});var eie=_((sTt,$ne)=>{var BVe=Bc(),vVe=(t,e)=>BVe(t,e,!0);$ne.exports=vVe});var Vx=_((oTt,rie)=>{var tie=jo(),SVe=(t,e,r)=>{let s=new tie(t,r),a=new tie(e,r);return s.compare(a)||s.compareBuild(a)};rie.exports=SVe});var iie=_((aTt,nie)=>{var DVe=Vx(),PVe=(t,e)=>t.sort((r,s)=>DVe(r,s,e));nie.exports=PVe});var oie=_((lTt,sie)=>{var bVe=Vx(),xVe=(t,e)=>t.sort((r,s)=>bVe(s,r,e));sie.exports=xVe});var cB=_((cTt,aie)=>{var kVe=Bc(),QVe=(t,e,r)=>kVe(t,e,r)>0;aie.exports=QVe});var Jx=_((uTt,lie)=>{var RVe=Bc(),TVe=(t,e,r)=>RVe(t,e,r)<0;lie.exports=TVe});var Q_=_((fTt,cie)=>{var FVe=Bc(),NVe=(t,e,r)=>FVe(t,e,r)===0;cie.exports=NVe});var R_=_((ATt,uie)=>{var OVe=Bc(),LVe=(t,e,r)=>OVe(t,e,r)!==0;uie.exports=LVe});var Kx=_((pTt,fie)=>{var MVe=Bc(),UVe=(t,e,r)=>MVe(t,e,r)>=0;fie.exports=UVe});var zx=_((hTt,Aie)=>{var _Ve=Bc(),HVe=(t,e,r)=>_Ve(t,e,r)<=0;Aie.exports=HVe});var T_=_((gTt,pie)=>{var jVe=Q_(),GVe=R_(),qVe=cB(),WVe=Kx(),YVe=Jx(),VVe=zx(),JVe=(t,e,r,s)=>{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 jVe(t,r,s);case"!=":return GVe(t,r,s);case">":return qVe(t,r,s);case">=":return WVe(t,r,s);case"<":return YVe(t,r,s);case"<=":return VVe(t,r,s);default:throw new TypeError(`Invalid operator: ${e}`)}};pie.exports=JVe});var gie=_((dTt,hie)=>{var KVe=jo(),zVe=Md(),{safeRe:Zx,t:Xx}=vE(),ZVe=(t,e)=>{if(t instanceof KVe)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?Zx[Xx.COERCEFULL]:Zx[Xx.COERCE]);else{let p=e.includePrerelease?Zx[Xx.COERCERTLFULL]:Zx[Xx.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 s=r[2],a=r[3]||"0",n=r[4]||"0",c=e.includePrerelease&&r[5]?`-${r[5]}`:"",f=e.includePrerelease&&r[6]?`+${r[6]}`:"";return zVe(`${s}.${a}.${n}${c}${f}`,e)};hie.exports=ZVe});var mie=_((mTt,die)=>{"use strict";die.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var $x=_((yTt,yie)=>{"use strict";yie.exports=Fn;Fn.Node=Ud;Fn.create=Fn;function Fn(t){var e=this;if(e instanceof Fn||(e=new Fn),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,s=arguments.length;r1)r=e;else if(this.head)s=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;s!==null;a++)r=t(r,s.value,a),s=s.next;return r};Fn.prototype.reduceReverse=function(t,e){var r,s=this.tail;if(arguments.length>1)r=e;else if(this.tail)s=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;s!==null;a--)r=t(r,s.value,a),s=s.prev;return r};Fn.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};Fn.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};Fn.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 Fn;if(ethis.length&&(e=this.length);for(var s=0,a=this.head;a!==null&&sthis.length&&(e=this.length);for(var s=this.length,a=this.tail;a!==null&&s>e;s--)a=a.prev;for(;a!==null&&s>t;s--,a=a.prev)r.push(a.value);return r};Fn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var s=0,a=this.head;a!==null&&s{"use strict";var t7e=$x(),_d=Symbol("max"),Sp=Symbol("length"),DE=Symbol("lengthCalculator"),fB=Symbol("allowStale"),Hd=Symbol("maxAge"),vp=Symbol("dispose"),Eie=Symbol("noDisposeOnSet"),Gs=Symbol("lruList"),Lu=Symbol("cache"),Cie=Symbol("updateAgeOnGet"),F_=()=>1,O_=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[_d]=e.max||1/0,s=e.length||F_;if(this[DE]=typeof s!="function"?F_:s,this[fB]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[Hd]=e.maxAge||0,this[vp]=e.dispose,this[Eie]=e.noDisposeOnSet||!1,this[Cie]=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[_d]=e||1/0,uB(this)}get max(){return this[_d]}set allowStale(e){this[fB]=!!e}get allowStale(){return this[fB]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[Hd]=e,uB(this)}get maxAge(){return this[Hd]}set lengthCalculator(e){typeof e!="function"&&(e=F_),e!==this[DE]&&(this[DE]=e,this[Sp]=0,this[Gs].forEach(r=>{r.length=this[DE](r.value,r.key),this[Sp]+=r.length})),uB(this)}get lengthCalculator(){return this[DE]}get length(){return this[Sp]}get itemCount(){return this[Gs].length}rforEach(e,r){r=r||this;for(let s=this[Gs].tail;s!==null;){let a=s.prev;Iie(this,e,s,r),s=a}}forEach(e,r){r=r||this;for(let s=this[Gs].head;s!==null;){let a=s.next;Iie(this,e,s,r),s=a}}keys(){return this[Gs].toArray().map(e=>e.key)}values(){return this[Gs].toArray().map(e=>e.value)}reset(){this[vp]&&this[Gs]&&this[Gs].length&&this[Gs].forEach(e=>this[vp](e.key,e.value)),this[Lu]=new Map,this[Gs]=new t7e,this[Sp]=0}dump(){return this[Gs].map(e=>ek(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[Gs]}set(e,r,s){if(s=s||this[Hd],s&&typeof s!="number")throw new TypeError("maxAge must be a number");let a=s?Date.now():0,n=this[DE](r,e);if(this[Lu].has(e)){if(n>this[_d])return PE(this,this[Lu].get(e)),!1;let p=this[Lu].get(e).value;return this[vp]&&(this[Eie]||this[vp](e,p.value)),p.now=a,p.maxAge=s,p.value=r,this[Sp]+=n-p.length,p.length=n,this.get(e),uB(this),!0}let c=new L_(e,r,n,a,s);return c.length>this[_d]?(this[vp]&&this[vp](e,r),!1):(this[Sp]+=c.length,this[Gs].unshift(c),this[Lu].set(e,this[Gs].head),uB(this),!0)}has(e){if(!this[Lu].has(e))return!1;let r=this[Lu].get(e).value;return!ek(this,r)}get(e){return N_(this,e,!0)}peek(e){return N_(this,e,!1)}pop(){let e=this[Gs].tail;return e?(PE(this,e),e.value):null}del(e){PE(this,this[Lu].get(e))}load(e){this.reset();let r=Date.now();for(let s=e.length-1;s>=0;s--){let a=e[s],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let c=n-r;c>0&&this.set(a.k,a.v,c)}}}prune(){this[Lu].forEach((e,r)=>N_(this,r,!1))}},N_=(t,e,r)=>{let s=t[Lu].get(e);if(s){let a=s.value;if(ek(t,a)){if(PE(t,s),!t[fB])return}else r&&(t[Cie]&&(s.value.now=Date.now()),t[Gs].unshiftNode(s));return a.value}},ek=(t,e)=>{if(!e||!e.maxAge&&!t[Hd])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[Hd]&&r>t[Hd]},uB=t=>{if(t[Sp]>t[_d])for(let e=t[Gs].tail;t[Sp]>t[_d]&&e!==null;){let r=e.prev;PE(t,e),e=r}},PE=(t,e)=>{if(e){let r=e.value;t[vp]&&t[vp](r.key,r.value),t[Sp]-=r.length,t[Lu].delete(r.key),t[Gs].removeNode(e)}},L_=class{constructor(e,r,s,a,n){this.key=e,this.value=r,this.length=s,this.now=a,this.maxAge=n||0}},Iie=(t,e,r,s)=>{let a=r.value;ek(t,a)&&(PE(t,r),t[fB]||(a=void 0)),a&&e.call(s,a.value,a.key,t)};wie.exports=O_});var vc=_((ITt,Pie)=>{var M_=class t{constructor(e,r){if(r=n7e(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof U_)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(s=>this.parseRange(s.trim())).filter(s=>s.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let s=this.set[0];if(this.set=this.set.filter(a=>!Sie(a[0])),this.set.length===0)this.set=[s];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&u7e(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 s=((this.options.includePrerelease&&l7e)|(this.options.loose&&c7e))+":"+e,a=vie.get(s);if(a)return a;let n=this.options.loose,c=n?sl[wa.HYPHENRANGELOOSE]:sl[wa.HYPHENRANGE];e=e.replace(c,I7e(this.options.includePrerelease)),vi("hyphen replace",e),e=e.replace(sl[wa.COMPARATORTRIM],s7e),vi("comparator trim",e),e=e.replace(sl[wa.TILDETRIM],o7e),vi("tilde trim",e),e=e.replace(sl[wa.CARETTRIM],a7e),vi("caret trim",e);let f=e.split(" ").map(C=>f7e(C,this.options)).join(" ").split(/\s+/).map(C=>E7e(C,this.options));n&&(f=f.filter(C=>(vi("loose invalid filter",C,this.options),!!C.match(sl[wa.COMPARATORLOOSE])))),vi("range list",f);let p=new Map,h=f.map(C=>new U_(C,this.options));for(let C of h){if(Sie(C))return[C];p.set(C.value,C)}p.size>1&&p.has("")&&p.delete("");let E=[...p.values()];return vie.set(s,E),E}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(s=>Die(s,r)&&e.set.some(a=>Die(a,r)&&s.every(n=>a.every(c=>n.intersects(c,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new i7e(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",u7e=t=>t.value==="",Die=(t,e)=>{let r=!0,s=t.slice(),a=s.pop();for(;r&&s.length;)r=s.every(n=>a.intersects(n,e)),a=s.pop();return r},f7e=(t,e)=>(vi("comp",t,e),t=h7e(t,e),vi("caret",t),t=A7e(t,e),vi("tildes",t),t=d7e(t,e),vi("xrange",t),t=y7e(t,e),vi("stars",t),t),Ba=t=>!t||t.toLowerCase()==="x"||t==="*",A7e=(t,e)=>t.trim().split(/\s+/).map(r=>p7e(r,e)).join(" "),p7e=(t,e)=>{let r=e.loose?sl[wa.TILDELOOSE]:sl[wa.TILDE];return t.replace(r,(s,a,n,c,f)=>{vi("tilde",t,s,a,n,c,f);let p;return Ba(a)?p="":Ba(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:Ba(c)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:f?(vi("replaceTilde pr",f),p=`>=${a}.${n}.${c}-${f} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${c} <${a}.${+n+1}.0-0`,vi("tilde return",p),p})},h7e=(t,e)=>t.trim().split(/\s+/).map(r=>g7e(r,e)).join(" "),g7e=(t,e)=>{vi("caret",t,e);let r=e.loose?sl[wa.CARETLOOSE]:sl[wa.CARET],s=e.includePrerelease?"-0":"";return t.replace(r,(a,n,c,f,p)=>{vi("caret",t,a,n,c,f,p);let h;return Ba(n)?h="":Ba(c)?h=`>=${n}.0.0${s} <${+n+1}.0.0-0`:Ba(f)?n==="0"?h=`>=${n}.${c}.0${s} <${n}.${+c+1}.0-0`:h=`>=${n}.${c}.0${s} <${+n+1}.0.0-0`:p?(vi("replaceCaret pr",p),n==="0"?c==="0"?h=`>=${n}.${c}.${f}-${p} <${n}.${c}.${+f+1}-0`:h=`>=${n}.${c}.${f}-${p} <${n}.${+c+1}.0-0`:h=`>=${n}.${c}.${f}-${p} <${+n+1}.0.0-0`):(vi("no pr"),n==="0"?c==="0"?h=`>=${n}.${c}.${f}${s} <${n}.${c}.${+f+1}-0`:h=`>=${n}.${c}.${f}${s} <${n}.${+c+1}.0-0`:h=`>=${n}.${c}.${f} <${+n+1}.0.0-0`),vi("caret return",h),h})},d7e=(t,e)=>(vi("replaceXRanges",t,e),t.split(/\s+/).map(r=>m7e(r,e)).join(" ")),m7e=(t,e)=>{t=t.trim();let r=e.loose?sl[wa.XRANGELOOSE]:sl[wa.XRANGE];return t.replace(r,(s,a,n,c,f,p)=>{vi("xRange",t,s,a,n,c,f,p);let h=Ba(n),E=h||Ba(c),C=E||Ba(f),S=C;return a==="="&&S&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?s="<0.0.0-0":s="*":a&&S?(E&&(c=0),f=0,a===">"?(a=">=",E?(n=+n+1,c=0,f=0):(c=+c+1,f=0)):a==="<="&&(a="<",E?n=+n+1:c=+c+1),a==="<"&&(p="-0"),s=`${a+n}.${c}.${f}${p}`):E?s=`>=${n}.0.0${p} <${+n+1}.0.0-0`:C&&(s=`>=${n}.${c}.0${p} <${n}.${+c+1}.0-0`),vi("xRange return",s),s})},y7e=(t,e)=>(vi("replaceStars",t,e),t.trim().replace(sl[wa.STAR],"")),E7e=(t,e)=>(vi("replaceGTE0",t,e),t.trim().replace(sl[e.includePrerelease?wa.GTE0PRE:wa.GTE0],"")),I7e=t=>(e,r,s,a,n,c,f,p,h,E,C,S,b)=>(Ba(s)?r="":Ba(a)?r=`>=${s}.0.0${t?"-0":""}`:Ba(n)?r=`>=${s}.${a}.0${t?"-0":""}`:c?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,Ba(h)?p="":Ba(E)?p=`<${+h+1}.0.0-0`:Ba(C)?p=`<${h}.${+E+1}.0-0`:S?p=`<=${h}.${E}.${C}-${S}`:t?p=`<${h}.${E}.${+C+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),C7e=(t,e,r)=>{for(let s=0;s0){let a=t[s].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var AB=_((CTt,Tie)=>{var pB=Symbol("SemVer ANY"),j_=class t{static get ANY(){return pB}constructor(e,r){if(r=bie(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),H_("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===pB?this.value="":this.value=this.operator+this.semver.version,H_("comp",this)}parse(e){let r=this.options.loose?xie[kie.COMPARATORLOOSE]:xie[kie.COMPARATOR],s=e.match(r);if(!s)throw new TypeError(`Invalid comparator: ${e}`);this.operator=s[1]!==void 0?s[1]:"",this.operator==="="&&(this.operator=""),s[2]?this.semver=new Qie(s[2],this.options.loose):this.semver=pB}toString(){return this.value}test(e){if(H_("Comparator.test",e,this.options.loose),this.semver===pB||e===pB)return!0;if(typeof e=="string")try{e=new Qie(e,this.options)}catch{return!1}return __(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 Rie(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new Rie(this.value,r).test(e.semver):(r=bie(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("=")||__(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||__(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Tie.exports=j_;var bie=qx(),{safeRe:xie,t:kie}=vE(),__=T_(),H_=lB(),Qie=jo(),Rie=vc()});var hB=_((wTt,Fie)=>{var w7e=vc(),B7e=(t,e,r)=>{try{e=new w7e(e,r)}catch{return!1}return e.test(t)};Fie.exports=B7e});var Oie=_((BTt,Nie)=>{var v7e=vc(),S7e=(t,e)=>new v7e(t,e).set.map(r=>r.map(s=>s.value).join(" ").trim().split(" "));Nie.exports=S7e});var Mie=_((vTt,Lie)=>{var D7e=jo(),P7e=vc(),b7e=(t,e,r)=>{let s=null,a=null,n=null;try{n=new P7e(e,r)}catch{return null}return t.forEach(c=>{n.test(c)&&(!s||a.compare(c)===-1)&&(s=c,a=new D7e(s,r))}),s};Lie.exports=b7e});var _ie=_((STt,Uie)=>{var x7e=jo(),k7e=vc(),Q7e=(t,e,r)=>{let s=null,a=null,n=null;try{n=new k7e(e,r)}catch{return null}return t.forEach(c=>{n.test(c)&&(!s||a.compare(c)===1)&&(s=c,a=new x7e(s,r))}),s};Uie.exports=Q7e});var Gie=_((DTt,jie)=>{var G_=jo(),R7e=vc(),Hie=cB(),T7e=(t,e)=>{t=new R7e(t,e);let r=new G_("0.0.0");if(t.test(r)||(r=new G_("0.0.0-0"),t.test(r)))return r;r=null;for(let s=0;s{let f=new G_(c.semver.version);switch(c.operator){case">":f.prerelease.length===0?f.patch++:f.prerelease.push(0),f.raw=f.format();case"":case">=":(!n||Hie(f,n))&&(n=f);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${c.operator}`)}}),n&&(!r||Hie(r,n))&&(r=n)}return r&&t.test(r)?r:null};jie.exports=T7e});var Wie=_((PTt,qie)=>{var F7e=vc(),N7e=(t,e)=>{try{return new F7e(t,e).range||"*"}catch{return null}};qie.exports=N7e});var tk=_((bTt,Kie)=>{var O7e=jo(),Jie=AB(),{ANY:L7e}=Jie,M7e=vc(),U7e=hB(),Yie=cB(),Vie=Jx(),_7e=zx(),H7e=Kx(),j7e=(t,e,r,s)=>{t=new O7e(t,s),e=new M7e(e,s);let a,n,c,f,p;switch(r){case">":a=Yie,n=_7e,c=Vie,f=">",p=">=";break;case"<":a=Vie,n=H7e,c=Yie,f="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(U7e(t,e,s))return!1;for(let h=0;h{b.semver===L7e&&(b=new Jie(">=0.0.0")),C=C||b,S=S||b,a(b.semver,C.semver,s)?C=b:c(b.semver,S.semver,s)&&(S=b)}),C.operator===f||C.operator===p||(!S.operator||S.operator===f)&&n(t,S.semver))return!1;if(S.operator===p&&c(t,S.semver))return!1}return!0};Kie.exports=j7e});var Zie=_((xTt,zie)=>{var G7e=tk(),q7e=(t,e,r)=>G7e(t,e,">",r);zie.exports=q7e});var $ie=_((kTt,Xie)=>{var W7e=tk(),Y7e=(t,e,r)=>W7e(t,e,"<",r);Xie.exports=Y7e});var rse=_((QTt,tse)=>{var ese=vc(),V7e=(t,e,r)=>(t=new ese(t,r),e=new ese(e,r),t.intersects(e,r));tse.exports=V7e});var ise=_((RTt,nse)=>{var J7e=hB(),K7e=Bc();nse.exports=(t,e,r)=>{let s=[],a=null,n=null,c=t.sort((E,C)=>K7e(E,C,r));for(let E of c)J7e(E,e,r)?(n=E,a||(a=E)):(n&&s.push([a,n]),n=null,a=null);a&&s.push([a,null]);let f=[];for(let[E,C]of s)E===C?f.push(E):!C&&E===c[0]?f.push("*"):C?E===c[0]?f.push(`<=${C}`):f.push(`${E} - ${C}`):f.push(`>=${E}`);let p=f.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var sse=vc(),W_=AB(),{ANY:q_}=W_,gB=hB(),Y_=Bc(),z7e=(t,e,r={})=>{if(t===e)return!0;t=new sse(t,r),e=new sse(e,r);let s=!1;e:for(let a of t.set){for(let n of e.set){let c=X7e(a,n,r);if(s=s||c!==null,c)continue e}if(s)return!1}return!0},Z7e=[new W_(">=0.0.0-0")],ose=[new W_(">=0.0.0")],X7e=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===q_){if(e.length===1&&e[0].semver===q_)return!0;r.includePrerelease?t=Z7e:t=ose}if(e.length===1&&e[0].semver===q_){if(r.includePrerelease)return!0;e=ose}let s=new Set,a,n;for(let b of t)b.operator===">"||b.operator===">="?a=ase(a,b,r):b.operator==="<"||b.operator==="<="?n=lse(n,b,r):s.add(b.semver);if(s.size>1)return null;let c;if(a&&n){if(c=Y_(a.semver,n.semver,r),c>0)return null;if(c===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let b of s){if(a&&!gB(b,String(a),r)||n&&!gB(b,String(n),r))return null;for(let I of e)if(!gB(b,String(I),r))return!1;return!0}let f,p,h,E,C=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,S=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;C&&C.prerelease.length===1&&n.operator==="<"&&C.prerelease[0]===0&&(C=!1);for(let b of e){if(E=E||b.operator===">"||b.operator===">=",h=h||b.operator==="<"||b.operator==="<=",a){if(S&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===S.major&&b.semver.minor===S.minor&&b.semver.patch===S.patch&&(S=!1),b.operator===">"||b.operator===">="){if(f=ase(a,b,r),f===b&&f!==a)return!1}else if(a.operator===">="&&!gB(a.semver,String(b),r))return!1}if(n){if(C&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===C.major&&b.semver.minor===C.minor&&b.semver.patch===C.patch&&(C=!1),b.operator==="<"||b.operator==="<="){if(p=lse(n,b,r),p===b&&p!==n)return!1}else if(n.operator==="<="&&!gB(n.semver,String(b),r))return!1}if(!b.operator&&(n||a)&&c!==0)return!1}return!(a&&h&&!n&&c!==0||n&&E&&!a&&c!==0||S||C)},ase=(t,e,r)=>{if(!t)return e;let s=Y_(t.semver,e.semver,r);return s>0?t:s<0||e.operator===">"&&t.operator===">="?e:t},lse=(t,e,r)=>{if(!t)return e;let s=Y_(t.semver,e.semver,r);return s<0?t:s>0||e.operator==="<"&&t.operator==="<="?e:t};cse.exports=z7e});var Ai=_((FTt,pse)=>{var V_=vE(),fse=aB(),$7e=jo(),Ase=x_(),eJe=Md(),tJe=Rne(),rJe=Fne(),nJe=Lne(),iJe=_ne(),sJe=jne(),oJe=qne(),aJe=Yne(),lJe=Jne(),cJe=Bc(),uJe=Xne(),fJe=eie(),AJe=Vx(),pJe=iie(),hJe=oie(),gJe=cB(),dJe=Jx(),mJe=Q_(),yJe=R_(),EJe=Kx(),IJe=zx(),CJe=T_(),wJe=gie(),BJe=AB(),vJe=vc(),SJe=hB(),DJe=Oie(),PJe=Mie(),bJe=_ie(),xJe=Gie(),kJe=Wie(),QJe=tk(),RJe=Zie(),TJe=$ie(),FJe=rse(),NJe=ise(),OJe=use();pse.exports={parse:eJe,valid:tJe,clean:rJe,inc:nJe,diff:iJe,major:sJe,minor:oJe,patch:aJe,prerelease:lJe,compare:cJe,rcompare:uJe,compareLoose:fJe,compareBuild:AJe,sort:pJe,rsort:hJe,gt:gJe,lt:dJe,eq:mJe,neq:yJe,gte:EJe,lte:IJe,cmp:CJe,coerce:wJe,Comparator:BJe,Range:vJe,satisfies:SJe,toComparators:DJe,maxSatisfying:PJe,minSatisfying:bJe,minVersion:xJe,validRange:kJe,outside:QJe,gtr:RJe,ltr:TJe,intersects:FJe,simplifyRange:NJe,subset:OJe,SemVer:$7e,re:V_.re,src:V_.src,tokens:V_.t,SEMVER_SPEC_VERSION:fse.SEMVER_SPEC_VERSION,RELEASE_TYPES:fse.RELEASE_TYPES,compareIdentifiers:Ase.compareIdentifiers,rcompareIdentifiers:Ase.rcompareIdentifiers}});var gse=_((NTt,hse)=>{"use strict";function LJe(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function jd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.location=s,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,jd)}LJe(jd,Error);jd.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",C;for(C=0;C0){for(C=1,S=1;C{switch(Re[1]){case"|":return xe|Re[3];case"&":return xe&Re[3];case"^":return xe^Re[3]}},$)},S="!",b=Fe("!",!1),I=function($){return!$},T="(",N=Fe("(",!1),U=")",W=Fe(")",!1),ee=function($){return $},ie=/^[^ \t\n\r()!|&\^]/,ue=Ne([" "," ",` -`,"\r","(",")","!","|","&","^"],!0,!1),le=function($){return e.queryPattern.test($)},me=function($){return e.checkFn($)},pe=ke("whitespace"),Be=/^[ \t\n\r]/,Ce=Ne([" "," ",` -`,"\r"],!1,!1),g=0,we=0,ye=[{line:1,column:1}],Ae=0,se=[],X=0,De;if("startRule"in e){if(!(e.startRule in s))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=s[e.startRule]}function Te(){return t.substring(we,g)}function mt(){return Ue(we,g)}function j($,oe){throw oe=oe!==void 0?oe:Ue(we,g),P([ke($)],t.substring(we,g),oe)}function rt($,oe){throw oe=oe!==void 0?oe:Ue(we,g),w($,oe)}function Fe($,oe){return{type:"literal",text:$,ignoreCase:oe}}function Ne($,oe,xe){return{type:"class",parts:$,inverted:oe,ignoreCase:xe}}function be(){return{type:"any"}}function Ve(){return{type:"end"}}function ke($){return{type:"other",description:$}}function it($){var oe=ye[$],xe;if(oe)return oe;for(xe=$-1;!ye[xe];)xe--;for(oe=ye[xe],oe={line:oe.line,column:oe.column};xe<$;)t.charCodeAt(xe)===10?(oe.line++,oe.column=1):oe.column++,xe++;return ye[$]=oe,oe}function Ue($,oe){var xe=it($),Re=it(oe);return{start:{offset:$,line:xe.line,column:xe.column},end:{offset:oe,line:Re.line,column:Re.column}}}function x($){gAe&&(Ae=g,se=[]),se.push($))}function w($,oe){return new jd($,null,null,oe)}function P($,oe,xe){return new jd(jd.buildMessage($,oe),$,oe,xe)}function y(){var $,oe,xe,Re,lt,Ct,qt,ir;if($=g,oe=F(),oe!==r){for(xe=[],Re=g,lt=Z(),lt!==r?(t.charCodeAt(g)===124?(Ct=n,g++):(Ct=r,X===0&&x(c)),Ct===r&&(t.charCodeAt(g)===38?(Ct=f,g++):(Ct=r,X===0&&x(p)),Ct===r&&(t.charCodeAt(g)===94?(Ct=h,g++):(Ct=r,X===0&&x(E)))),Ct!==r?(qt=Z(),qt!==r?(ir=F(),ir!==r?(lt=[lt,Ct,qt,ir],Re=lt):(g=Re,Re=r)):(g=Re,Re=r)):(g=Re,Re=r)):(g=Re,Re=r);Re!==r;)xe.push(Re),Re=g,lt=Z(),lt!==r?(t.charCodeAt(g)===124?(Ct=n,g++):(Ct=r,X===0&&x(c)),Ct===r&&(t.charCodeAt(g)===38?(Ct=f,g++):(Ct=r,X===0&&x(p)),Ct===r&&(t.charCodeAt(g)===94?(Ct=h,g++):(Ct=r,X===0&&x(E)))),Ct!==r?(qt=Z(),qt!==r?(ir=F(),ir!==r?(lt=[lt,Ct,qt,ir],Re=lt):(g=Re,Re=r)):(g=Re,Re=r)):(g=Re,Re=r)):(g=Re,Re=r);xe!==r?(we=$,oe=C(oe,xe),$=oe):(g=$,$=r)}else g=$,$=r;return $}function F(){var $,oe,xe,Re,lt,Ct;return $=g,t.charCodeAt(g)===33?(oe=S,g++):(oe=r,X===0&&x(b)),oe!==r?(xe=F(),xe!==r?(we=$,oe=I(xe),$=oe):(g=$,$=r)):(g=$,$=r),$===r&&($=g,t.charCodeAt(g)===40?(oe=T,g++):(oe=r,X===0&&x(N)),oe!==r?(xe=Z(),xe!==r?(Re=y(),Re!==r?(lt=Z(),lt!==r?(t.charCodeAt(g)===41?(Ct=U,g++):(Ct=r,X===0&&x(W)),Ct!==r?(we=$,oe=ee(Re),$=oe):(g=$,$=r)):(g=$,$=r)):(g=$,$=r)):(g=$,$=r)):(g=$,$=r),$===r&&($=z())),$}function z(){var $,oe,xe,Re,lt;if($=g,oe=Z(),oe!==r){if(xe=g,Re=[],ie.test(t.charAt(g))?(lt=t.charAt(g),g++):(lt=r,X===0&&x(ue)),lt!==r)for(;lt!==r;)Re.push(lt),ie.test(t.charAt(g))?(lt=t.charAt(g),g++):(lt=r,X===0&&x(ue));else Re=r;Re!==r?xe=t.substring(xe,g):xe=Re,xe!==r?(we=g,Re=le(xe),Re?Re=void 0:Re=r,Re!==r?(we=$,oe=me(xe),$=oe):(g=$,$=r)):(g=$,$=r)}else g=$,$=r;return $}function Z(){var $,oe;for(X++,$=[],Be.test(t.charAt(g))?(oe=t.charAt(g),g++):(oe=r,X===0&&x(Ce));oe!==r;)$.push(oe),Be.test(t.charAt(g))?(oe=t.charAt(g),g++):(oe=r,X===0&&x(Ce));return X--,$===r&&(oe=r,X===0&&x(pe)),$}if(De=a(),De!==r&&g===t.length)return De;throw De!==r&&g{var{parse:UJe}=gse();rk.makeParser=(t=/[a-z]+/)=>(e,r)=>UJe(e,{queryPattern:t,checkFn:r});rk.parse=rk.makeParser()});var yse=_((LTt,mse)=>{"use strict";mse.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 J_=_((MTt,Ise)=>{var dB=yse(),Ese={};for(let t of Object.keys(dB))Ese[dB[t]]=t;var hr={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"]}};Ise.exports=hr;for(let t of Object.keys(hr)){if(!("channels"in hr[t]))throw new Error("missing channels property: "+t);if(!("labels"in hr[t]))throw new Error("missing channel labels property: "+t);if(hr[t].labels.length!==hr[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=hr[t];delete hr[t].channels,delete hr[t].labels,Object.defineProperty(hr[t],"channels",{value:e}),Object.defineProperty(hr[t],"labels",{value:r})}hr.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,s=t[2]/255,a=Math.min(e,r,s),n=Math.max(e,r,s),c=n-a,f,p;n===a?f=0:e===n?f=(r-s)/c:r===n?f=2+(s-e)/c:s===n&&(f=4+(e-r)/c),f=Math.min(f*60,360),f<0&&(f+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=c/(n+a):p=c/(2-n-a),[f,p*100,h*100]};hr.rgb.hsv=function(t){let e,r,s,a,n,c=t[0]/255,f=t[1]/255,p=t[2]/255,h=Math.max(c,f,p),E=h-Math.min(c,f,p),C=function(S){return(h-S)/6/E+1/2};return E===0?(a=0,n=0):(n=E/h,e=C(c),r=C(f),s=C(p),c===h?a=s-r:f===h?a=1/3+e-s:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};hr.rgb.hwb=function(t){let e=t[0],r=t[1],s=t[2],a=hr.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,s));return s=1-1/255*Math.max(e,Math.max(r,s)),[a,n*100,s*100]};hr.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,s=t[2]/255,a=Math.min(1-e,1-r,1-s),n=(1-e-a)/(1-a)||0,c=(1-r-a)/(1-a)||0,f=(1-s-a)/(1-a)||0;return[n*100,c*100,f*100,a*100]};function _Je(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}hr.rgb.keyword=function(t){let e=Ese[t];if(e)return e;let r=1/0,s;for(let a of Object.keys(dB)){let n=dB[a],c=_Je(t,n);c.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,s=s>.04045?((s+.055)/1.055)**2.4:s/12.92;let a=e*.4124+r*.3576+s*.1805,n=e*.2126+r*.7152+s*.0722,c=e*.0193+r*.1192+s*.9505;return[a*100,n*100,c*100]};hr.rgb.lab=function(t){let e=hr.rgb.xyz(t),r=e[0],s=e[1],a=e[2];r/=95.047,s/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,s=s>.008856?s**(1/3):7.787*s+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*s-16,c=500*(r-s),f=200*(s-a);return[n,c,f]};hr.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,s=t[2]/100,a,n,c;if(r===0)return c=s*255,[c,c,c];s<.5?a=s*(1+r):a=s+r-s*r;let f=2*s-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?c=f+(a-f)*6*n:2*n<1?c=a:3*n<2?c=f+(a-f)*(2/3-n)*6:c=f,p[h]=c*255;return p};hr.hsl.hsv=function(t){let e=t[0],r=t[1]/100,s=t[2]/100,a=r,n=Math.max(s,.01);s*=2,r*=s<=1?s:2-s,a*=n<=1?n:2-n;let c=(s+r)/2,f=s===0?2*a/(n+a):2*r/(s+r);return[e,f*100,c*100]};hr.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,s=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),c=255*s*(1-r),f=255*s*(1-r*n),p=255*s*(1-r*(1-n));switch(s*=255,a){case 0:return[s,p,c];case 1:return[f,s,c];case 2:return[c,s,p];case 3:return[c,f,s];case 4:return[p,c,s];case 5:return[s,c,f]}};hr.hsv.hsl=function(t){let e=t[0],r=t[1]/100,s=t[2]/100,a=Math.max(s,.01),n,c;c=(2-r)*s;let f=(2-r)*a;return n=r*a,n/=f<=1?f:2-f,n=n||0,c/=2,[e,n*100,c*100]};hr.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,s=t[2]/100,a=r+s,n;a>1&&(r/=a,s/=a);let c=Math.floor(6*e),f=1-s;n=6*e-c,c&1&&(n=1-n);let p=r+n*(f-r),h,E,C;switch(c){default:case 6:case 0:h=f,E=p,C=r;break;case 1:h=p,E=f,C=r;break;case 2:h=r,E=f,C=p;break;case 3:h=r,E=p,C=f;break;case 4:h=p,E=r,C=f;break;case 5:h=f,E=r,C=p;break}return[h*255,E*255,C*255]};hr.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,s=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),c=1-Math.min(1,r*(1-a)+a),f=1-Math.min(1,s*(1-a)+a);return[n*255,c*255,f*255]};hr.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,s=t[2]/100,a,n,c;return a=e*3.2406+r*-1.5372+s*-.4986,n=e*-.9689+r*1.8758+s*.0415,c=e*.0557+r*-.204+s*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,c=c>.0031308?1.055*c**(1/2.4)-.055:c*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),c=Math.min(Math.max(0,c),1),[a*255,n*255,c*255]};hr.xyz.lab=function(t){let e=t[0],r=t[1],s=t[2];e/=95.047,r/=100,s/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,s=s>.008856?s**(1/3):7.787*s+16/116;let a=116*r-16,n=500*(e-r),c=200*(r-s);return[a,n,c]};hr.lab.xyz=function(t){let e=t[0],r=t[1],s=t[2],a,n,c;n=(e+16)/116,a=r/500+n,c=n-s/200;let f=n**3,p=a**3,h=c**3;return n=f>.008856?f:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,c=h>.008856?h:(c-16/116)/7.787,a*=95.047,n*=100,c*=108.883,[a,n,c]};hr.lab.lch=function(t){let e=t[0],r=t[1],s=t[2],a;a=Math.atan2(s,r)*360/2/Math.PI,a<0&&(a+=360);let c=Math.sqrt(r*r+s*s);return[e,c,a]};hr.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),c=r*Math.sin(a);return[e,n,c]};hr.rgb.ansi16=function(t,e=null){let[r,s,a]=t,n=e===null?hr.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let c=30+(Math.round(a/255)<<2|Math.round(s/255)<<1|Math.round(r/255));return n===2&&(c+=60),c};hr.hsv.ansi16=function(t){return hr.rgb.ansi16(hr.hsv.rgb(t),t[2])};hr.rgb.ansi256=function(t){let e=t[0],r=t[1],s=t[2];return e===r&&r===s?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(s/255*5)};hr.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,s=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[s,a,n]};hr.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,s=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,s,a]};hr.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};hr.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(f=>f+f).join(""));let s=parseInt(r,16),a=s>>16&255,n=s>>8&255,c=s&255;return[a,n,c]};hr.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,s=t[2]/255,a=Math.max(Math.max(e,r),s),n=Math.min(Math.min(e,r),s),c=a-n,f,p;return c<1?f=n/(1-c):f=0,c<=0?p=0:a===e?p=(r-s)/c%6:a===r?p=2+(s-e)/c:p=4+(e-r)/c,p/=6,p%=1,[p*360,c*100,f*100]};hr.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,s=r<.5?2*e*r:2*e*(1-r),a=0;return s<1&&(a=(r-.5*s)/(1-s)),[t[0],s*100,a*100]};hr.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,s=e*r,a=0;return s<1&&(a=(r-s)/(1-s)),[t[0],s*100,a*100]};hr.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,s=t[2]/100;if(r===0)return[s*255,s*255,s*255];let a=[0,0,0],n=e%1*6,c=n%1,f=1-c,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=c,a[2]=0;break;case 1:a[0]=f,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=c;break;case 3:a[0]=0,a[1]=f,a[2]=1;break;case 4:a[0]=c,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=f}return p=(1-r)*s,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};hr.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,s=e+r*(1-e),a=0;return s>0&&(a=e/s),[t[0],a*100,s*100]};hr.hcg.hsl=function(t){let e=t[1]/100,s=t[2]/100*(1-e)+.5*e,a=0;return s>0&&s<.5?a=e/(2*s):s>=.5&&s<1&&(a=e/(2*(1-s))),[t[0],a*100,s*100]};hr.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,s=e+r*(1-e);return[t[0],(s-e)*100,(1-s)*100]};hr.hwb.hcg=function(t){let e=t[1]/100,s=1-t[2]/100,a=s-e,n=0;return a<1&&(n=(s-a)/(1-a)),[t[0],a*100,n*100]};hr.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};hr.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};hr.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};hr.gray.hsl=function(t){return[0,0,t[0]]};hr.gray.hsv=hr.gray.hsl;hr.gray.hwb=function(t){return[0,100,t[0]]};hr.gray.cmyk=function(t){return[0,0,0,t[0]]};hr.gray.lab=function(t){return[t[0],0,0]};hr.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,s=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(s.length)+s};hr.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var wse=_((UTt,Cse)=>{var nk=J_();function HJe(){let t={},e=Object.keys(nk);for(let r=e.length,s=0;s{var K_=J_(),WJe=wse(),bE={},YJe=Object.keys(K_);function VJe(t){let e=function(...r){let s=r[0];return s==null?s:(s.length>1&&(r=s),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function JJe(t){let e=function(...r){let s=r[0];if(s==null)return s;s.length>1&&(r=s);let a=t(r);if(typeof a=="object")for(let n=a.length,c=0;c{bE[t]={},Object.defineProperty(bE[t],"channels",{value:K_[t].channels}),Object.defineProperty(bE[t],"labels",{value:K_[t].labels});let e=WJe(t);Object.keys(e).forEach(s=>{let a=e[s];bE[t][s]=JJe(a),bE[t][s].raw=VJe(a)})});Bse.exports=bE});var sk=_((HTt,xse)=>{"use strict";var Sse=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,Dse=(t,e)=>(...r)=>{let s=t(...r);return`\x1B[${38+e};5;${s}m`},Pse=(t,e)=>(...r)=>{let s=t(...r);return`\x1B[${38+e};2;${s[0]};${s[1]};${s[2]}m`},ik=t=>t,bse=(t,e,r)=>[t,e,r],xE=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let s=r();return Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0}),s},enumerable:!0,configurable:!0})},z_,kE=(t,e,r,s)=>{z_===void 0&&(z_=vse());let a=s?10:0,n={};for(let[c,f]of Object.entries(z_)){let p=c==="ansi16"?"ansi":c;c===e?n[p]=t(r,a):typeof f=="object"&&(n[p]=t(f[e],a))}return n};function KJe(){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,s]of Object.entries(e)){for(let[a,n]of Object.entries(s))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},s[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:s,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",xE(e.color,"ansi",()=>kE(Sse,"ansi16",ik,!1)),xE(e.color,"ansi256",()=>kE(Dse,"ansi256",ik,!1)),xE(e.color,"ansi16m",()=>kE(Pse,"rgb",bse,!1)),xE(e.bgColor,"ansi",()=>kE(Sse,"ansi16",ik,!0)),xE(e.bgColor,"ansi256",()=>kE(Dse,"ansi256",ik,!0)),xE(e.bgColor,"ansi16m",()=>kE(Pse,"rgb",bse,!0)),e}Object.defineProperty(xse,"exports",{enumerable:!0,get:KJe})});var Qse=_((jTt,kse)=>{"use strict";kse.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",s=e.indexOf(r+t),a=e.indexOf("--");return s!==-1&&(a===-1||s{"use strict";var zJe=Ie("os"),Rse=Ie("tty"),Sc=Qse(),{env:Ps}=process,l0;Sc("no-color")||Sc("no-colors")||Sc("color=false")||Sc("color=never")?l0=0:(Sc("color")||Sc("colors")||Sc("color=true")||Sc("color=always"))&&(l0=1);"FORCE_COLOR"in Ps&&(Ps.FORCE_COLOR==="true"?l0=1:Ps.FORCE_COLOR==="false"?l0=0:l0=Ps.FORCE_COLOR.length===0?1:Math.min(parseInt(Ps.FORCE_COLOR,10),3));function Z_(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function X_(t,e){if(l0===0)return 0;if(Sc("color=16m")||Sc("color=full")||Sc("color=truecolor"))return 3;if(Sc("color=256"))return 2;if(t&&!e&&l0===void 0)return 0;let r=l0||0;if(Ps.TERM==="dumb")return r;if(process.platform==="win32"){let s=zJe.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in Ps)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(s=>s in Ps)||Ps.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in Ps)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(Ps.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in Ps)return 1;if(Ps.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in Ps){let s=parseInt((Ps.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(Ps.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(Ps.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(Ps.TERM)||"COLORTERM"in Ps?1:r}function ZJe(t){let e=X_(t,t&&t.isTTY);return Z_(e)}Tse.exports={supportsColor:ZJe,stdout:Z_(X_(!0,Rse.isatty(1))),stderr:Z_(X_(!0,Rse.isatty(2)))}});var Ose=_((qTt,Nse)=>{"use strict";var XJe=(t,e,r)=>{let s=t.indexOf(e);if(s===-1)return t;let a=e.length,n=0,c="";do c+=t.substr(n,s-n)+e+r,n=s+a,s=t.indexOf(e,n);while(s!==-1);return c+=t.substr(n),c},$Je=(t,e,r,s)=>{let a=0,n="";do{let c=t[s-1]==="\r";n+=t.substr(a,(c?s-1:s)-a)+e+(c?`\r -`:` -`)+r,a=s+1,s=t.indexOf(` -`,a)}while(s!==-1);return n+=t.substr(a),n};Nse.exports={stringReplaceAll:XJe,stringEncaseCRLFWithFirstIndex:$Je}});var Hse=_((WTt,_se)=>{"use strict";var eKe=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,Lse=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,tKe=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,rKe=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,nKe=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function Use(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)):nKe.get(t)||t}function iKe(t,e){let r=[],s=e.trim().split(/\s*,\s*/g),a;for(let n of s){let c=Number(n);if(!Number.isNaN(c))r.push(c);else if(a=n.match(tKe))r.push(a[2].replace(rKe,(f,p,h)=>p?Use(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function sKe(t){Lse.lastIndex=0;let e=[],r;for(;(r=Lse.exec(t))!==null;){let s=r[1];if(r[2]){let a=iKe(s,r[2]);e.push([s].concat(a))}else e.push([s])}return e}function Mse(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 s=t;for(let[a,n]of Object.entries(r))if(Array.isArray(n)){if(!(a in s))throw new Error(`Unknown Chalk style: ${a}`);s=n.length>0?s[a](...n):s[a]}return s}_se.exports=(t,e)=>{let r=[],s=[],a=[];if(e.replace(eKe,(n,c,f,p,h,E)=>{if(c)a.push(Use(c));else if(p){let C=a.join("");a=[],s.push(r.length===0?C:Mse(t,r)(C)),r.push({inverse:f,styles:sKe(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");s.push(Mse(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),s.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 s.join("")}});var RE=_((YTt,Vse)=>{"use strict";var mB=sk(),{stdout:e4,stderr:t4}=Fse(),{stringReplaceAll:oKe,stringEncaseCRLFWithFirstIndex:aKe}=Ose(),{isArray:ok}=Array,Gse=["ansi","ansi","ansi256","ansi16m"],QE=Object.create(null),lKe=(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=e4?e4.level:0;t.level=e.level===void 0?r:e.level},r4=class{constructor(e){return qse(e)}},qse=t=>{let e={};return lKe(e,t),e.template=(...r)=>Yse(e.template,...r),Object.setPrototypeOf(e,ak.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=r4,e.template};function ak(t){return qse(t)}for(let[t,e]of Object.entries(mB))QE[t]={get(){let r=lk(this,n4(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};QE.visible={get(){let t=lk(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var Wse=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of Wse)QE[t]={get(){let{level:e}=this;return function(...r){let s=n4(mB.color[Gse[e]][t](...r),mB.color.close,this._styler);return lk(this,s,this._isEmpty)}}};for(let t of Wse){let e="bg"+t[0].toUpperCase()+t.slice(1);QE[e]={get(){let{level:r}=this;return function(...s){let a=n4(mB.bgColor[Gse[r]][t](...s),mB.bgColor.close,this._styler);return lk(this,a,this._isEmpty)}}}}var cKe=Object.defineProperties(()=>{},{...QE,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),n4=(t,e,r)=>{let s,a;return r===void 0?(s=t,a=e):(s=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:s,closeAll:a,parent:r}},lk=(t,e,r)=>{let s=(...a)=>ok(a[0])&&ok(a[0].raw)?jse(s,Yse(s,...a)):jse(s,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(s,cKe),s._generator=t,s._styler=e,s._isEmpty=r,s},jse=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:s,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=oKe(e,r.close,r.open),r=r.parent;let n=e.indexOf(` -`);return n!==-1&&(e=aKe(e,a,s,n)),s+e+a},$_,Yse=(t,...e)=>{let[r]=e;if(!ok(r)||!ok(r.raw))return e.join(" ");let s=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";Dc.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Dc.find=(t,e)=>t.nodes.find(r=>r.type===e);Dc.exceedsLimit=(t,e,r=1,s)=>s===!1||!Dc.isInteger(t)||!Dc.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=s;Dc.escapeNode=(t,e=0,r)=>{let s=t.nodes[e];s&&(r&&s.type===r||s.type==="open"||s.type==="close")&&s.escaped!==!0&&(s.value="\\"+s.value,s.escaped=!0)};Dc.encloseBrace=t=>t.type!=="brace"||t.commas>>0+t.ranges>>0?!1:(t.invalid=!0,!0);Dc.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;Dc.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Dc.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Dc.flatten=(...t)=>{let e=[],r=s=>{for(let a=0;a{"use strict";var Jse=uk();Kse.exports=(t,e={})=>{let r=(s,a={})=>{let n=e.escapeInvalid&&Jse.isInvalidBrace(a),c=s.invalid===!0&&e.escapeInvalid===!0,f="";if(s.value)return(n||c)&&Jse.isOpenOrClose(s)?"\\"+s.value:s.value;if(s.value)return s.value;if(s.nodes)for(let p of s.nodes)f+=r(p);return f};return r(t)}});var Zse=_((KTt,zse)=>{"use strict";zse.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var ooe=_((zTt,soe)=>{"use strict";var Xse=Zse(),Gd=(t,e,r)=>{if(Xse(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(Xse(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let s={relaxZeros:!0,...r};typeof s.strictZeros=="boolean"&&(s.relaxZeros=s.strictZeros===!1);let a=String(s.relaxZeros),n=String(s.shorthand),c=String(s.capture),f=String(s.wrap),p=t+":"+e+"="+a+n+c+f;if(Gd.cache.hasOwnProperty(p))return Gd.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 s.capture?`(${T})`:s.wrap===!1?T:`(?:${T})`}let C=ioe(t)||ioe(e),S={min:t,max:e,a:h,b:E},b=[],I=[];if(C&&(S.isPadded=C,S.maxLen=String(S.max).length),h<0){let T=E<0?Math.abs(E):1;I=$se(T,Math.abs(h),S,s),h=S.a=0}return E>=0&&(b=$se(h,E,S,s)),S.negatives=I,S.positives=b,S.result=uKe(I,b,s),s.capture===!0?S.result=`(${S.result})`:s.wrap!==!1&&b.length+I.length>1&&(S.result=`(?:${S.result})`),Gd.cache[p]=S,S.result};function uKe(t,e,r){let s=i4(t,e,"-",!1,r)||[],a=i4(e,t,"",!1,r)||[],n=i4(t,e,"-?",!0,r)||[];return s.concat(n).concat(a).join("|")}function fKe(t,e){let r=1,s=1,a=toe(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=toe(t,r);for(a=roe(e+1,s)-1;t1&&f.count.pop(),f.count.push(E.count[0]),f.string=f.pattern+noe(f.count),c=h+1;continue}r.isPadded&&(C=dKe(h,r,s)),E.string=C+E.pattern+noe(E.count),n.push(E),c=h+1,f=E}return n}function i4(t,e,r,s,a){let n=[];for(let c of t){let{string:f}=c;!s&&!eoe(e,"string",f)&&n.push(r+f),s&&eoe(e,"string",f)&&n.push(r+f)}return n}function pKe(t,e){let r=[];for(let s=0;se?1:e>t?-1:0}function eoe(t,e,r){return t.some(s=>s[e]===r)}function toe(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function roe(t,e){return t-t%Math.pow(10,e)}function noe(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function gKe(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function ioe(t){return/^-?(0+)\d/.test(t)}function dKe(t,e,r){if(!e.isPadded)return t;let s=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(s){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${s}}`:`0{${s}}`}}Gd.cache={};Gd.clearCache=()=>Gd.cache={};soe.exports=Gd});var a4=_((ZTt,hoe)=>{"use strict";var mKe=Ie("util"),coe=ooe(),aoe=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),yKe=t=>e=>t===!0?Number(e):String(e),s4=t=>typeof t=="number"||typeof t=="string"&&t!=="",yB=t=>Number.isInteger(+t),o4=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},EKe=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,IKe=(t,e,r)=>{if(e>0){let s=t[0]==="-"?"-":"";s&&(t=t.slice(1)),t=s+t.padStart(s?e-1:e,"0")}return r===!1?String(t):t},loe=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((c,f)=>cf?1:0),t.positives.sort((c,f)=>cf?1:0);let r=e.capture?"":"?:",s="",a="",n;return t.positives.length&&(s=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),s&&a?n=`${s}|${a}`:n=s||a,e.wrap?`(${r}${n})`:n},uoe=(t,e,r,s)=>{if(r)return coe(t,e,{wrap:!1,...s});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},foe=(t,e,r)=>{if(Array.isArray(t)){let s=r.wrap===!0,a=r.capture?"":"?:";return s?`(${a}${t.join("|")})`:t.join("|")}return coe(t,e,r)},Aoe=(...t)=>new RangeError("Invalid range arguments: "+mKe.inspect(...t)),poe=(t,e,r)=>{if(r.strictRanges===!0)throw Aoe([t,e]);return[]},wKe=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},BKe=(t,e,r=1,s={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(s.strictRanges===!0)throw Aoe([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let c=a>n,f=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let E=o4(f)||o4(p)||o4(h),C=E?Math.max(f.length,p.length,h.length):0,S=E===!1&&EKe(t,e,s)===!1,b=s.transform||yKe(S);if(s.toRegex&&r===1)return uoe(loe(t,C),loe(e,C),!0,s);let I={negatives:[],positives:[]},T=W=>I[W<0?"negatives":"positives"].push(Math.abs(W)),N=[],U=0;for(;c?a>=n:a<=n;)s.toRegex===!0&&r>1?T(a):N.push(IKe(b(a,U),C,S)),a=c?a-r:a+r,U++;return s.toRegex===!0?r>1?CKe(I,s):foe(N,null,{wrap:!1,...s}):N},vKe=(t,e,r=1,s={})=>{if(!yB(t)&&t.length>1||!yB(e)&&e.length>1)return poe(t,e,s);let a=s.transform||(S=>String.fromCharCode(S)),n=`${t}`.charCodeAt(0),c=`${e}`.charCodeAt(0),f=n>c,p=Math.min(n,c),h=Math.max(n,c);if(s.toRegex&&r===1)return uoe(p,h,!1,s);let E=[],C=0;for(;f?n>=c:n<=c;)E.push(a(n,C)),n=f?n-r:n+r,C++;return s.toRegex===!0?foe(E,null,{wrap:!1,options:s}):E},Ak=(t,e,r,s={})=>{if(e==null&&s4(t))return[t];if(!s4(t)||!s4(e))return poe(t,e,s);if(typeof r=="function")return Ak(t,e,1,{transform:r});if(aoe(r))return Ak(t,e,0,r);let a={...s};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,yB(r)?yB(t)&&yB(e)?BKe(t,e,r,a):vKe(t,e,Math.max(Math.abs(r),1),a):r!=null&&!aoe(r)?wKe(r,a):Ak(t,e,1,r)};hoe.exports=Ak});var moe=_((XTt,doe)=>{"use strict";var SKe=a4(),goe=uk(),DKe=(t,e={})=>{let r=(s,a={})=>{let n=goe.isInvalidBrace(a),c=s.invalid===!0&&e.escapeInvalid===!0,f=n===!0||c===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(s.isOpen===!0||s.isClose===!0)return p+s.value;if(s.type==="open")return f?p+s.value:"(";if(s.type==="close")return f?p+s.value:")";if(s.type==="comma")return s.prev.type==="comma"?"":f?s.value:"|";if(s.value)return s.value;if(s.nodes&&s.ranges>0){let E=goe.reduce(s.nodes),C=SKe(...E,{...e,wrap:!1,toRegex:!0});if(C.length!==0)return E.length>1&&C.length>1?`(${C})`:C}if(s.nodes)for(let E of s.nodes)h+=r(E,s);return h};return r(t)};doe.exports=DKe});var Ioe=_(($Tt,Eoe)=>{"use strict";var PKe=a4(),yoe=fk(),TE=uk(),qd=(t="",e="",r=!1)=>{let s=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?TE.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)s.push(qd(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),s.push(Array.isArray(n)?qd(a,n,r):a+n);return TE.flatten(s)},bKe=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,s=(a,n={})=>{a.queue=[];let c=n,f=n.queue;for(;c.type!=="brace"&&c.type!=="root"&&c.parent;)c=c.parent,f=c.queue;if(a.invalid||a.dollar){f.push(qd(f.pop(),yoe(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){f.push(qd(f.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let C=TE.reduce(a.nodes);if(TE.exceedsLimit(...C,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let S=PKe(...C,e);S.length===0&&(S=yoe(a,e)),f.push(qd(f.pop(),S)),a.nodes=[];return}let p=TE.encloseBrace(a),h=a.queue,E=a;for(;E.type!=="brace"&&E.type!=="root"&&E.parent;)E=E.parent,h=E.queue;for(let C=0;C{"use strict";Coe.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 Poe=_((tFt,Doe)=>{"use strict";var xKe=fk(),{MAX_LENGTH:Boe,CHAR_BACKSLASH:l4,CHAR_BACKTICK:kKe,CHAR_COMMA:QKe,CHAR_DOT:RKe,CHAR_LEFT_PARENTHESES:TKe,CHAR_RIGHT_PARENTHESES:FKe,CHAR_LEFT_CURLY_BRACE:NKe,CHAR_RIGHT_CURLY_BRACE:OKe,CHAR_LEFT_SQUARE_BRACKET:voe,CHAR_RIGHT_SQUARE_BRACKET:Soe,CHAR_DOUBLE_QUOTE:LKe,CHAR_SINGLE_QUOTE:MKe,CHAR_NO_BREAK_SPACE:UKe,CHAR_ZERO_WIDTH_NOBREAK_SPACE:_Ke}=woe(),HKe=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},s=typeof r.maxLength=="number"?Math.min(Boe,r.maxLength):Boe;if(t.length>s)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${s})`);let a={type:"root",input:t,nodes:[]},n=[a],c=a,f=a,p=0,h=t.length,E=0,C=0,S,b={},I=()=>t[E++],T=N=>{if(N.type==="text"&&f.type==="dot"&&(f.type="text"),f&&f.type==="text"&&N.type==="text"){f.value+=N.value;return}return c.nodes.push(N),N.parent=c,N.prev=f,f=N,N};for(T({type:"bos"});E0){if(c.ranges>0){c.ranges=0;let N=c.nodes.shift();c.nodes=[N,{type:"text",value:xKe(c)}]}T({type:"comma",value:S}),c.commas++;continue}if(S===RKe&&C>0&&c.commas===0){let N=c.nodes;if(C===0||N.length===0){T({type:"text",value:S});continue}if(f.type==="dot"){if(c.range=[],f.value+=S,f.type="range",c.nodes.length!==3&&c.nodes.length!==5){c.invalid=!0,c.ranges=0,f.type="text";continue}c.ranges++,c.args=[];continue}if(f.type==="range"){N.pop();let U=N[N.length-1];U.value+=f.value+S,f=U,c.ranges--;continue}T({type:"dot",value:S});continue}T({type:"text",value:S})}do if(c=n.pop(),c.type!=="root"){c.nodes.forEach(W=>{W.nodes||(W.type==="open"&&(W.isOpen=!0),W.type==="close"&&(W.isClose=!0),W.nodes||(W.type="text"),W.invalid=!0)});let N=n[n.length-1],U=N.nodes.indexOf(c);N.nodes.splice(U,1,...c.nodes)}while(n.length>0);return T({type:"eos"}),a};Doe.exports=HKe});var koe=_((rFt,xoe)=>{"use strict";var boe=fk(),jKe=moe(),GKe=Ioe(),qKe=Poe(),jl=(t,e={})=>{let r=[];if(Array.isArray(t))for(let s of t){let a=jl.create(s,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(jl.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};jl.parse=(t,e={})=>qKe(t,e);jl.stringify=(t,e={})=>boe(typeof t=="string"?jl.parse(t,e):t,e);jl.compile=(t,e={})=>(typeof t=="string"&&(t=jl.parse(t,e)),jKe(t,e));jl.expand=(t,e={})=>{typeof t=="string"&&(t=jl.parse(t,e));let r=GKe(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};jl.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?jl.compile(t,e):jl.expand(t,e);xoe.exports=jl});var EB=_((nFt,Noe)=>{"use strict";var WKe=Ie("path"),Vf="\\\\/",Qoe=`[^${Vf}]`,Dp="\\.",YKe="\\+",VKe="\\?",pk="\\/",JKe="(?=.)",Roe="[^/]",c4=`(?:${pk}|$)`,Toe=`(?:^|${pk})`,u4=`${Dp}{1,2}${c4}`,KKe=`(?!${Dp})`,zKe=`(?!${Toe}${u4})`,ZKe=`(?!${Dp}{0,1}${c4})`,XKe=`(?!${u4})`,$Ke=`[^.${pk}]`,eze=`${Roe}*?`,Foe={DOT_LITERAL:Dp,PLUS_LITERAL:YKe,QMARK_LITERAL:VKe,SLASH_LITERAL:pk,ONE_CHAR:JKe,QMARK:Roe,END_ANCHOR:c4,DOTS_SLASH:u4,NO_DOT:KKe,NO_DOTS:zKe,NO_DOT_SLASH:ZKe,NO_DOTS_SLASH:XKe,QMARK_NO_DOT:$Ke,STAR:eze,START_ANCHOR:Toe},tze={...Foe,SLASH_LITERAL:`[${Vf}]`,QMARK:Qoe,STAR:`${Qoe}*?`,DOTS_SLASH:`${Dp}{1,2}(?:[${Vf}]|$)`,NO_DOT:`(?!${Dp})`,NO_DOTS:`(?!(?:^|[${Vf}])${Dp}{1,2}(?:[${Vf}]|$))`,NO_DOT_SLASH:`(?!${Dp}{0,1}(?:[${Vf}]|$))`,NO_DOTS_SLASH:`(?!${Dp}{1,2}(?:[${Vf}]|$))`,QMARK_NO_DOT:`[^.${Vf}]`,START_ANCHOR:`(?:^|[${Vf}])`,END_ANCHOR:`(?:[${Vf}]|$)`},rze={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"};Noe.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:rze,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:WKe.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?tze:Foe}}});var IB=_(ol=>{"use strict";var nze=Ie("path"),ize=process.platform==="win32",{REGEX_BACKSLASH:sze,REGEX_REMOVE_BACKSLASH:oze,REGEX_SPECIAL_CHARS:aze,REGEX_SPECIAL_CHARS_GLOBAL:lze}=EB();ol.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);ol.hasRegexChars=t=>aze.test(t);ol.isRegexChar=t=>t.length===1&&ol.hasRegexChars(t);ol.escapeRegex=t=>t.replace(lze,"\\$1");ol.toPosixSlashes=t=>t.replace(sze,"/");ol.removeBackslashes=t=>t.replace(oze,e=>e==="\\"?"":e);ol.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};ol.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:ize===!0||nze.sep==="\\";ol.escapeLast=(t,e,r)=>{let s=t.lastIndexOf(e,r);return s===-1?t:t[s-1]==="\\"?ol.escapeLast(t,e,s-1):`${t.slice(0,s)}\\${t.slice(s)}`};ol.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};ol.wrapOutput=(t,e={},r={})=>{let s=r.contains?"":"^",a=r.contains?"":"$",n=`${s}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var Goe=_((sFt,joe)=>{"use strict";var Ooe=IB(),{CHAR_ASTERISK:f4,CHAR_AT:cze,CHAR_BACKWARD_SLASH:CB,CHAR_COMMA:uze,CHAR_DOT:A4,CHAR_EXCLAMATION_MARK:p4,CHAR_FORWARD_SLASH:Hoe,CHAR_LEFT_CURLY_BRACE:h4,CHAR_LEFT_PARENTHESES:g4,CHAR_LEFT_SQUARE_BRACKET:fze,CHAR_PLUS:Aze,CHAR_QUESTION_MARK:Loe,CHAR_RIGHT_CURLY_BRACE:pze,CHAR_RIGHT_PARENTHESES:Moe,CHAR_RIGHT_SQUARE_BRACKET:hze}=EB(),Uoe=t=>t===Hoe||t===CB,_oe=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},gze=(t,e)=>{let r=e||{},s=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],c=[],f=[],p=t,h=-1,E=0,C=0,S=!1,b=!1,I=!1,T=!1,N=!1,U=!1,W=!1,ee=!1,ie=!1,ue=!1,le=0,me,pe,Be={value:"",depth:0,isGlob:!1},Ce=()=>h>=s,g=()=>p.charCodeAt(h+1),we=()=>(me=pe,p.charCodeAt(++h));for(;h0&&(Ae=p.slice(0,E),p=p.slice(E),C-=E),ye&&I===!0&&C>0?(ye=p.slice(0,C),se=p.slice(C)):I===!0?(ye="",se=p):ye=p,ye&&ye!==""&&ye!=="/"&&ye!==p&&Uoe(ye.charCodeAt(ye.length-1))&&(ye=ye.slice(0,-1)),r.unescape===!0&&(se&&(se=Ooe.removeBackslashes(se)),ye&&W===!0&&(ye=Ooe.removeBackslashes(ye)));let X={prefix:Ae,input:t,start:E,base:ye,glob:se,isBrace:S,isBracket:b,isGlob:I,isExtglob:T,isGlobstar:N,negated:ee,negatedExtglob:ie};if(r.tokens===!0&&(X.maxDepth=0,Uoe(pe)||c.push(Be),X.tokens=c),r.parts===!0||r.tokens===!0){let De;for(let Te=0;Te{"use strict";var hk=EB(),Gl=IB(),{MAX_LENGTH:gk,POSIX_REGEX_SOURCE:dze,REGEX_NON_SPECIAL_CHARS:mze,REGEX_SPECIAL_CHARS_BACKREF:yze,REPLACEMENTS:qoe}=hk,Eze=(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=>Gl.escapeRegex(a)).join("..")}return r},FE=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,d4=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=qoe[t]||t;let r={...e},s=typeof r.maxLength=="number"?Math.min(gk,r.maxLength):gk,a=t.length;if(a>s)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${s}`);let n={type:"bos",value:"",output:r.prepend||""},c=[n],f=r.capture?"":"?:",p=Gl.isWindows(e),h=hk.globChars(p),E=hk.extglobChars(h),{DOT_LITERAL:C,PLUS_LITERAL:S,SLASH_LITERAL:b,ONE_CHAR:I,DOTS_SLASH:T,NO_DOT:N,NO_DOT_SLASH:U,NO_DOTS_SLASH:W,QMARK:ee,QMARK_NO_DOT:ie,STAR:ue,START_ANCHOR:le}=h,me=x=>`(${f}(?:(?!${le}${x.dot?T:C}).)*?)`,pe=r.dot?"":N,Be=r.dot?ee:ie,Ce=r.bash===!0?me(r):ue;r.capture&&(Ce=`(${Ce})`),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:c};t=Gl.removePrefix(t,g),a=t.length;let we=[],ye=[],Ae=[],se=n,X,De=()=>g.index===a-1,Te=g.peek=(x=1)=>t[g.index+x],mt=g.advance=()=>t[++g.index]||"",j=()=>t.slice(g.index+1),rt=(x="",w=0)=>{g.consumed+=x,g.index+=w},Fe=x=>{g.output+=x.output!=null?x.output:x.value,rt(x.value)},Ne=()=>{let x=1;for(;Te()==="!"&&(Te(2)!=="("||Te(3)==="?");)mt(),g.start++,x++;return x%2===0?!1:(g.negated=!0,g.start++,!0)},be=x=>{g[x]++,Ae.push(x)},Ve=x=>{g[x]--,Ae.pop()},ke=x=>{if(se.type==="globstar"){let w=g.braces>0&&(x.type==="comma"||x.type==="brace"),P=x.extglob===!0||we.length&&(x.type==="pipe"||x.type==="paren");x.type!=="slash"&&x.type!=="paren"&&!w&&!P&&(g.output=g.output.slice(0,-se.output.length),se.type="star",se.value="*",se.output=Ce,g.output+=se.output)}if(we.length&&x.type!=="paren"&&(we[we.length-1].inner+=x.value),(x.value||x.output)&&Fe(x),se&&se.type==="text"&&x.type==="text"){se.value+=x.value,se.output=(se.output||"")+x.value;return}x.prev=se,c.push(x),se=x},it=(x,w)=>{let P={...E[w],conditions:1,inner:""};P.prev=se,P.parens=g.parens,P.output=g.output;let y=(r.capture?"(":"")+P.open;be("parens"),ke({type:x,value:w,output:g.output?"":I}),ke({type:"paren",extglob:!0,value:mt(),output:y}),we.push(P)},Ue=x=>{let w=x.close+(r.capture?")":""),P;if(x.type==="negate"){let y=Ce;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(y=me(r)),(y!==Ce||De()||/^\)+$/.test(j()))&&(w=x.close=`)$))${y}`),x.inner.includes("*")&&(P=j())&&/^\.[^\\/.]+$/.test(P)){let F=d4(P,{...e,fastpaths:!1}).output;w=x.close=`)${F})${y})`}x.prev.type==="bos"&&(g.negatedExtglob=!0)}ke({type:"paren",extglob:!0,value:X,output:w}),Ve("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,w=t.replace(yze,(P,y,F,z,Z,$)=>z==="\\"?(x=!0,P):z==="?"?y?y+z+(Z?ee.repeat(Z.length):""):$===0?Be+(Z?ee.repeat(Z.length):""):ee.repeat(F.length):z==="."?C.repeat(F.length):z==="*"?y?y+z+(Z?Ce:""):Ce:y?P:`\\${P}`);return x===!0&&(r.unescape===!0?w=w.replace(/\\/g,""):w=w.replace(/\\+/g,P=>P.length%2===0?"\\\\":P?"\\":"")),w===t&&r.contains===!0?(g.output=t,g):(g.output=Gl.wrapOutput(w,g,e),g)}for(;!De();){if(X=mt(),X==="\0")continue;if(X==="\\"){let P=Te();if(P==="/"&&r.bash!==!0||P==="."||P===";")continue;if(!P){X+="\\",ke({type:"text",value:X});continue}let y=/^\\+/.exec(j()),F=0;if(y&&y[0].length>2&&(F=y[0].length,g.index+=F,F%2!==0&&(X+="\\")),r.unescape===!0?X=mt():X+=mt(),g.brackets===0){ke({type:"text",value:X});continue}}if(g.brackets>0&&(X!=="]"||se.value==="["||se.value==="[^")){if(r.posix!==!1&&X===":"){let P=se.value.slice(1);if(P.includes("[")&&(se.posix=!0,P.includes(":"))){let y=se.value.lastIndexOf("["),F=se.value.slice(0,y),z=se.value.slice(y+2),Z=dze[z];if(Z){se.value=F+Z,g.backtrack=!0,mt(),!n.output&&c.indexOf(se)===1&&(n.output=I);continue}}}(X==="["&&Te()!==":"||X==="-"&&Te()==="]")&&(X=`\\${X}`),X==="]"&&(se.value==="["||se.value==="[^")&&(X=`\\${X}`),r.posix===!0&&X==="!"&&se.value==="["&&(X="^"),se.value+=X,Fe({value:X});continue}if(g.quotes===1&&X!=='"'){X=Gl.escapeRegex(X),se.value+=X,Fe({value:X});continue}if(X==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&ke({type:"text",value:X});continue}if(X==="("){be("parens"),ke({type:"paren",value:X});continue}if(X===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(FE("opening","("));let P=we[we.length-1];if(P&&g.parens===P.parens+1){Ue(we.pop());continue}ke({type:"paren",value:X,output:g.parens?")":"\\)"}),Ve("parens");continue}if(X==="["){if(r.nobracket===!0||!j().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(FE("closing","]"));X=`\\${X}`}else be("brackets");ke({type:"bracket",value:X});continue}if(X==="]"){if(r.nobracket===!0||se&&se.type==="bracket"&&se.value.length===1){ke({type:"text",value:X,output:`\\${X}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(FE("opening","["));ke({type:"text",value:X,output:`\\${X}`});continue}Ve("brackets");let P=se.value.slice(1);if(se.posix!==!0&&P[0]==="^"&&!P.includes("/")&&(X=`/${X}`),se.value+=X,Fe({value:X}),r.literalBrackets===!1||Gl.hasRegexChars(P))continue;let y=Gl.escapeRegex(se.value);if(g.output=g.output.slice(0,-se.value.length),r.literalBrackets===!0){g.output+=y,se.value=y;continue}se.value=`(${f}${y}|${se.value})`,g.output+=se.value;continue}if(X==="{"&&r.nobrace!==!0){be("braces");let P={type:"brace",value:X,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};ye.push(P),ke(P);continue}if(X==="}"){let P=ye[ye.length-1];if(r.nobrace===!0||!P){ke({type:"text",value:X,output:X});continue}let y=")";if(P.dots===!0){let F=c.slice(),z=[];for(let Z=F.length-1;Z>=0&&(c.pop(),F[Z].type!=="brace");Z--)F[Z].type!=="dots"&&z.unshift(F[Z].value);y=Eze(z,r),g.backtrack=!0}if(P.comma!==!0&&P.dots!==!0){let F=g.output.slice(0,P.outputIndex),z=g.tokens.slice(P.tokensIndex);P.value=P.output="\\{",X=y="\\}",g.output=F;for(let Z of z)g.output+=Z.output||Z.value}ke({type:"brace",value:X,output:y}),Ve("braces"),ye.pop();continue}if(X==="|"){we.length>0&&we[we.length-1].conditions++,ke({type:"text",value:X});continue}if(X===","){let P=X,y=ye[ye.length-1];y&&Ae[Ae.length-1]==="braces"&&(y.comma=!0,P="|"),ke({type:"comma",value:X,output:P});continue}if(X==="/"){if(se.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",c.pop(),se=n;continue}ke({type:"slash",value:X,output:b});continue}if(X==="."){if(g.braces>0&&se.type==="dot"){se.value==="."&&(se.output=C);let P=ye[ye.length-1];se.type="dots",se.output+=X,se.value+=X,P.dots=!0;continue}if(g.braces+g.parens===0&&se.type!=="bos"&&se.type!=="slash"){ke({type:"text",value:X,output:C});continue}ke({type:"dot",value:X,output:C});continue}if(X==="?"){if(!(se&&se.value==="(")&&r.noextglob!==!0&&Te()==="("&&Te(2)!=="?"){it("qmark",X);continue}if(se&&se.type==="paren"){let y=Te(),F=X;if(y==="<"&&!Gl.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(se.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(j()))&&(F=`\\${X}`),ke({type:"text",value:X,output:F});continue}if(r.dot!==!0&&(se.type==="slash"||se.type==="bos")){ke({type:"qmark",value:X,output:ie});continue}ke({type:"qmark",value:X,output:ee});continue}if(X==="!"){if(r.noextglob!==!0&&Te()==="("&&(Te(2)!=="?"||!/[!=<:]/.test(Te(3)))){it("negate",X);continue}if(r.nonegate!==!0&&g.index===0){Ne();continue}}if(X==="+"){if(r.noextglob!==!0&&Te()==="("&&Te(2)!=="?"){it("plus",X);continue}if(se&&se.value==="("||r.regex===!1){ke({type:"plus",value:X,output:S});continue}if(se&&(se.type==="bracket"||se.type==="paren"||se.type==="brace")||g.parens>0){ke({type:"plus",value:X});continue}ke({type:"plus",value:S});continue}if(X==="@"){if(r.noextglob!==!0&&Te()==="("&&Te(2)!=="?"){ke({type:"at",extglob:!0,value:X,output:""});continue}ke({type:"text",value:X});continue}if(X!=="*"){(X==="$"||X==="^")&&(X=`\\${X}`);let P=mze.exec(j());P&&(X+=P[0],g.index+=P[0].length),ke({type:"text",value:X});continue}if(se&&(se.type==="globstar"||se.star===!0)){se.type="star",se.star=!0,se.value+=X,se.output=Ce,g.backtrack=!0,g.globstar=!0,rt(X);continue}let x=j();if(r.noextglob!==!0&&/^\([^?]/.test(x)){it("star",X);continue}if(se.type==="star"){if(r.noglobstar===!0){rt(X);continue}let P=se.prev,y=P.prev,F=P.type==="slash"||P.type==="bos",z=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!F||x[0]&&x[0]!=="/")){ke({type:"star",value:X,output:""});continue}let Z=g.braces>0&&(P.type==="comma"||P.type==="brace"),$=we.length&&(P.type==="pipe"||P.type==="paren");if(!F&&P.type!=="paren"&&!Z&&!$){ke({type:"star",value:X,output:""});continue}for(;x.slice(0,3)==="/**";){let oe=t[g.index+4];if(oe&&oe!=="/")break;x=x.slice(3),rt("/**",3)}if(P.type==="bos"&&De()){se.type="globstar",se.value+=X,se.output=me(r),g.output=se.output,g.globstar=!0,rt(X);continue}if(P.type==="slash"&&P.prev.type!=="bos"&&!z&&De()){g.output=g.output.slice(0,-(P.output+se.output).length),P.output=`(?:${P.output}`,se.type="globstar",se.output=me(r)+(r.strictSlashes?")":"|$)"),se.value+=X,g.globstar=!0,g.output+=P.output+se.output,rt(X);continue}if(P.type==="slash"&&P.prev.type!=="bos"&&x[0]==="/"){let oe=x[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(P.output+se.output).length),P.output=`(?:${P.output}`,se.type="globstar",se.output=`${me(r)}${b}|${b}${oe})`,se.value+=X,g.output+=P.output+se.output,g.globstar=!0,rt(X+mt()),ke({type:"slash",value:"/",output:""});continue}if(P.type==="bos"&&x[0]==="/"){se.type="globstar",se.value+=X,se.output=`(?:^|${b}|${me(r)}${b})`,g.output=se.output,g.globstar=!0,rt(X+mt()),ke({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-se.output.length),se.type="globstar",se.output=me(r),se.value+=X,g.output+=se.output,g.globstar=!0,rt(X);continue}let w={type:"star",value:X,output:Ce};if(r.bash===!0){w.output=".*?",(se.type==="bos"||se.type==="slash")&&(w.output=pe+w.output),ke(w);continue}if(se&&(se.type==="bracket"||se.type==="paren")&&r.regex===!0){w.output=X,ke(w);continue}(g.index===g.start||se.type==="slash"||se.type==="dot")&&(se.type==="dot"?(g.output+=U,se.output+=U):r.dot===!0?(g.output+=W,se.output+=W):(g.output+=pe,se.output+=pe),Te()!=="*"&&(g.output+=I,se.output+=I)),ke(w)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(FE("closing","]"));g.output=Gl.escapeLast(g.output,"["),Ve("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(FE("closing",")"));g.output=Gl.escapeLast(g.output,"("),Ve("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(FE("closing","}"));g.output=Gl.escapeLast(g.output,"{"),Ve("braces")}if(r.strictSlashes!==!0&&(se.type==="star"||se.type==="bracket")&&ke({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};d4.fastpaths=(t,e)=>{let r={...e},s=typeof r.maxLength=="number"?Math.min(gk,r.maxLength):gk,a=t.length;if(a>s)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${s}`);t=qoe[t]||t;let n=Gl.isWindows(e),{DOT_LITERAL:c,SLASH_LITERAL:f,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:E,NO_DOTS:C,NO_DOTS_SLASH:S,STAR:b,START_ANCHOR:I}=hk.globChars(n),T=r.dot?C:E,N=r.dot?S:E,U=r.capture?"":"?:",W={negated:!1,prefix:""},ee=r.bash===!0?".*?":b;r.capture&&(ee=`(${ee})`);let ie=pe=>pe.noglobstar===!0?ee:`(${U}(?:(?!${I}${pe.dot?h:c}).)*?)`,ue=pe=>{switch(pe){case"*":return`${T}${p}${ee}`;case".*":return`${c}${p}${ee}`;case"*.*":return`${T}${ee}${c}${p}${ee}`;case"*/*":return`${T}${ee}${f}${p}${N}${ee}`;case"**":return T+ie(r);case"**/*":return`(?:${T}${ie(r)}${f})?${N}${p}${ee}`;case"**/*.*":return`(?:${T}${ie(r)}${f})?${N}${ee}${c}${p}${ee}`;case"**/.*":return`(?:${T}${ie(r)}${f})?${c}${p}${ee}`;default:{let Be=/^(.*?)\.(\w+)$/.exec(pe);if(!Be)return;let Ce=ue(Be[1]);return Ce?Ce+c+Be[2]:void 0}}},le=Gl.removePrefix(t,W),me=ue(le);return me&&r.strictSlashes!==!0&&(me+=`${f}?`),me};Woe.exports=d4});var Joe=_((aFt,Voe)=>{"use strict";var Ize=Ie("path"),Cze=Goe(),m4=Yoe(),y4=IB(),wze=EB(),Bze=t=>t&&typeof t=="object"&&!Array.isArray(t),Zi=(t,e,r=!1)=>{if(Array.isArray(t)){let E=t.map(S=>Zi(S,e,r));return S=>{for(let b of E){let I=b(S);if(I)return I}return!1}}let s=Bze(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!s)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=y4.isWindows(e),c=s?Zi.compileRe(t,e):Zi.makeRe(t,e,!1,!0),f=c.state;delete c.state;let p=()=>!1;if(a.ignore){let E={...e,ignore:null,onMatch:null,onResult:null};p=Zi(a.ignore,E,r)}let h=(E,C=!1)=>{let{isMatch:S,match:b,output:I}=Zi.test(E,c,e,{glob:t,posix:n}),T={glob:t,state:f,regex:c,posix:n,input:E,output:I,match:b,isMatch:S};return typeof a.onResult=="function"&&a.onResult(T),S===!1?(T.isMatch=!1,C?T:!1):p(E)?(typeof a.onIgnore=="function"&&a.onIgnore(T),T.isMatch=!1,C?T:!1):(typeof a.onMatch=="function"&&a.onMatch(T),C?T:!0)};return r&&(h.state=f),h};Zi.test=(t,e,r,{glob:s,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},c=n.format||(a?y4.toPosixSlashes:null),f=t===s,p=f&&c?c(t):t;return f===!1&&(p=c?c(t):t,f=p===s),(f===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?f=Zi.matchBase(t,e,r,a):f=e.exec(p)),{isMatch:!!f,match:f,output:p}};Zi.matchBase=(t,e,r,s=y4.isWindows(r))=>(e instanceof RegExp?e:Zi.makeRe(e,r)).test(Ize.basename(t));Zi.isMatch=(t,e,r)=>Zi(e,r)(t);Zi.parse=(t,e)=>Array.isArray(t)?t.map(r=>Zi.parse(r,e)):m4(t,{...e,fastpaths:!1});Zi.scan=(t,e)=>Cze(t,e);Zi.compileRe=(t,e,r=!1,s=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",c=a.contains?"":"$",f=`${n}(?:${t.output})${c}`;t&&t.negated===!0&&(f=`^(?!${f}).*$`);let p=Zi.toRegex(f,e);return s===!0&&(p.state=t),p};Zi.makeRe=(t,e={},r=!1,s=!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=m4.fastpaths(t,e)),a.output||(a=m4(t,e)),Zi.compileRe(a,e,r,s)};Zi.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/$^/}};Zi.constants=wze;Voe.exports=Zi});var zoe=_((lFt,Koe)=>{"use strict";Koe.exports=Joe()});var Go=_((cFt,eae)=>{"use strict";var Xoe=Ie("util"),$oe=koe(),Jf=zoe(),E4=IB(),Zoe=t=>t===""||t==="./",xi=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let s=new Set,a=new Set,n=new Set,c=0,f=E=>{n.add(E.output),r&&r.onResult&&r.onResult(E)};for(let E=0;E!s.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};xi.match=xi;xi.matcher=(t,e)=>Jf(t,e);xi.isMatch=(t,e,r)=>Jf(e,r)(t);xi.any=xi.isMatch;xi.not=(t,e,r={})=>{e=[].concat(e).map(String);let s=new Set,a=[],n=f=>{r.onResult&&r.onResult(f),a.push(f.output)},c=new Set(xi(t,e,{...r,onResult:n}));for(let f of a)c.has(f)||s.add(f);return[...s]};xi.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${Xoe.inspect(t)}"`);if(Array.isArray(e))return e.some(s=>xi.contains(t,s,r));if(typeof e=="string"){if(Zoe(t)||Zoe(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return xi.isMatch(t,e,{...r,contains:!0})};xi.matchKeys=(t,e,r)=>{if(!E4.isObject(t))throw new TypeError("Expected the first argument to be an object");let s=xi(Object.keys(t),e,r),a={};for(let n of s)a[n]=t[n];return a};xi.some=(t,e,r)=>{let s=[].concat(t);for(let a of[].concat(e)){let n=Jf(String(a),r);if(s.some(c=>n(c)))return!0}return!1};xi.every=(t,e,r)=>{let s=[].concat(t);for(let a of[].concat(e)){let n=Jf(String(a),r);if(!s.every(c=>n(c)))return!1}return!0};xi.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${Xoe.inspect(t)}"`);return[].concat(e).every(s=>Jf(s,r)(t))};xi.capture=(t,e,r)=>{let s=E4.isWindows(r),n=Jf.makeRe(String(t),{...r,capture:!0}).exec(s?E4.toPosixSlashes(e):e);if(n)return n.slice(1).map(c=>c===void 0?"":c)};xi.makeRe=(...t)=>Jf.makeRe(...t);xi.scan=(...t)=>Jf.scan(...t);xi.parse=(t,e)=>{let r=[];for(let s of[].concat(t||[]))for(let a of $oe(String(s),e))r.push(Jf.parse(a,e));return r};xi.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:$oe(t,e)};xi.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return xi.braces(t,{...e,expand:!0})};eae.exports=xi});var rae=_((uFt,tae)=>{"use strict";tae.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 dk=_((fFt,nae)=>{"use strict";var vze=rae();nae.exports=t=>typeof t=="string"?t.replace(vze(),""):t});function iae(t){return Number.isSafeInteger(t)&&t>=0}var sae=Ze(()=>{});function oae(t){return t!=null&&typeof t!="function"&&iae(t.length)}var aae=Ze(()=>{sae()});function Pc(t){return t==="__proto__"}var wB=Ze(()=>{});function NE(t){switch(typeof t){case"number":case"symbol":return!1;case"string":return t.includes(".")||t.includes("[")||t.includes("]")}}var mk=Ze(()=>{});function OE(t){return typeof t=="string"||typeof t=="symbol"?t:Object.is(t?.valueOf?.(),-0)?"-0":String(t)}var yk=Ze(()=>{});function Mu(t){let e=[],r=t.length;if(r===0)return e;let s=0,a="",n="",c=!1;for(t.charCodeAt(0)===46&&(e.push(""),s++);s{});function va(t,e,r){if(t==null)return r;switch(typeof e){case"string":{if(Pc(e))return r;let s=t[e];return s===void 0?NE(e)?va(t,Mu(e),r):r:s}case"number":case"symbol":{typeof e=="number"&&(e=OE(e));let s=t[e];return s===void 0?r:s}default:{if(Array.isArray(e))return Sze(t,e,r);if(Object.is(e?.valueOf(),-0)?e="-0":e=String(e),Pc(e))return r;let s=t[e];return s===void 0?r:s}}}function Sze(t,e,r){if(e.length===0)return r;let s=t;for(let a=0;a{wB();mk();yk();LE()});function I4(t){return t!==null&&(typeof t=="object"||typeof t=="function")}var lae=Ze(()=>{});function ME(t){return t==null||typeof t!="object"&&typeof t!="function"}var Ik=Ze(()=>{});function Ck(t,e){return t===e||Number.isNaN(t)&&Number.isNaN(e)}var C4=Ze(()=>{});function Wd(t){return Object.getOwnPropertySymbols(t).filter(e=>Object.prototype.propertyIsEnumerable.call(t,e))}var wk=Ze(()=>{});function Yd(t){return t==null?t===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(t)}var Bk=Ze(()=>{});var vk,UE,_E,HE,Vd,Sk,Dk,Pk,bk,xk,cae,kk,jE,uae,Qk,Rk,Tk,Fk,Nk,fae,Ok,Lk,Mk,Aae,Uk,_k,Hk=Ze(()=>{vk="[object RegExp]",UE="[object String]",_E="[object Number]",HE="[object Boolean]",Vd="[object Arguments]",Sk="[object Symbol]",Dk="[object Date]",Pk="[object Map]",bk="[object Set]",xk="[object Array]",cae="[object Function]",kk="[object ArrayBuffer]",jE="[object Object]",uae="[object Error]",Qk="[object DataView]",Rk="[object Uint8Array]",Tk="[object Uint8ClampedArray]",Fk="[object Uint16Array]",Nk="[object Uint32Array]",fae="[object BigUint64Array]",Ok="[object Int8Array]",Lk="[object Int16Array]",Mk="[object Int32Array]",Aae="[object BigInt64Array]",Uk="[object Float32Array]",_k="[object Float64Array]"});function GE(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}var jk=Ze(()=>{});function pae(t,e){return u0(t,void 0,t,new Map,e)}function u0(t,e,r,s=new Map,a=void 0){let n=a?.(t,e,r,s);if(n!=null)return n;if(ME(t))return t;if(s.has(t))return s.get(t);if(Array.isArray(t)){let c=new Array(t.length);s.set(t,c);for(let f=0;f{wk();Bk();Hk();Ik();jk()});function hae(t){return u0(t,void 0,t,new Map,void 0)}var gae=Ze(()=>{w4()});function dae(t,e){return pae(t,(r,s,a,n)=>{let c=e?.(r,s,a,n);if(c!=null)return c;if(typeof t=="object")switch(Object.prototype.toString.call(t)){case _E:case UE:case HE:{let f=new t.constructor(t?.valueOf());return c0(f,t),f}case Vd:{let f={};return c0(f,t),f.length=t.length,f[Symbol.iterator]=t[Symbol.iterator],f}default:return}})}var mae=Ze(()=>{w4();Hk()});function f0(t){return dae(t)}var B4=Ze(()=>{mae()});function Gk(t,e=Number.MAX_SAFE_INTEGER){switch(typeof t){case"number":return Number.isInteger(t)&&t>=0&&t{Pze=/^(?:0|[1-9]\d*)$/});function BB(t){return t!==null&&typeof t=="object"&&Yd(t)==="[object Arguments]"}var S4=Ze(()=>{Bk()});function vB(t,e){let r;if(Array.isArray(e)?r=e:typeof e=="string"&&NE(e)&&t?.[e]==null?r=Mu(e):r=[e],r.length===0)return!1;let s=t;for(let a=0;a{mk();v4();S4();LE()});function P4(t){return typeof t=="object"&&t!==null}var yae=Ze(()=>{});function Eae(t){return typeof t=="symbol"||t instanceof Symbol}var Iae=Ze(()=>{});function Cae(t,e){return Array.isArray(t)?!1:typeof t=="number"||typeof t=="boolean"||t==null||Eae(t)?!0:typeof t=="string"&&(xze.test(t)||!bze.test(t))||e!=null&&Object.hasOwn(e,t)}var bze,xze,wae=Ze(()=>{Iae();bze=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xze=/^\w*$/});function A0(t,e){if(t==null)return!0;switch(typeof e){case"symbol":case"number":case"object":{if(Array.isArray(e))return Bae(t,e);if(typeof e=="number"?e=OE(e):typeof e=="object"&&(Object.is(e?.valueOf(),-0)?e="-0":e=String(e)),Pc(e))return!1;if(t?.[e]===void 0)return!0;try{return delete t[e],!0}catch{return!1}}case"string":{if(t?.[e]===void 0&&NE(e))return Bae(t,Mu(e));if(Pc(e))return!1;try{return delete t[e],!0}catch{return!1}}}}function Bae(t,e){let r=va(t,e.slice(0,-1),t),s=e[e.length-1];if(r?.[s]===void 0)return!0;if(Pc(s))return!1;try{return delete r[s],!0}catch{return!1}}var b4=Ze(()=>{Ek();wB();mk();yk();LE()});function vae(t){return t==null}var Sae=Ze(()=>{});var Dae,Pae=Ze(()=>{C4();Dae=(t,e,r)=>{let s=t[e];(!(Object.hasOwn(t,e)&&Ck(s,r))||r===void 0&&!(e in t))&&(t[e]=r)}});function bae(t,e,r,s){if(t==null&&!I4(t))return t;let a=Cae(e,t)?[e]:Array.isArray(e)?e:typeof e=="string"?Mu(e):[e],n=t;for(let c=0;c{wB();Pae();v4();wae();yk();lae();LE()});function Jd(t,e,r){return bae(t,e,()=>r,()=>{})}var x4=Ze(()=>{xae()});function kae(t,e=0,r={}){typeof r!="object"&&(r={});let s=null,a=null,n=null,c=0,f=null,p,{leading:h=!1,trailing:E=!0,maxWait:C}=r,S="maxWait"in r,b=S?Math.max(Number(C)||0,e):0,I=ue=>(s!==null&&(p=t.apply(a,s)),s=a=null,c=ue,p),T=ue=>(c=ue,f=setTimeout(ee,e),h&&s!==null?I(ue):p),N=ue=>(f=null,E&&s!==null?I(ue):p),U=ue=>{if(n===null)return!0;let le=ue-n,me=le>=e||le<0,pe=S&&ue-c>=b;return me||pe},W=ue=>{let le=n===null?0:ue-n,me=e-le,pe=b-(ue-c);return S?Math.min(me,pe):me},ee=()=>{let ue=Date.now();if(U(ue))return N(ue);f=setTimeout(ee,W(ue))},ie=function(...ue){let le=Date.now(),me=U(le);if(s=ue,a=this,n=le,me){if(f===null)return T(le);if(S)return clearTimeout(f),f=setTimeout(ee,e),I(le)}return f===null&&(f=setTimeout(ee,e)),p};return ie.cancel=()=>{f!==null&&clearTimeout(f),c=0,n=s=a=f=null},ie.flush=()=>f===null?p:N(Date.now()),ie}var Qae=Ze(()=>{});function k4(t,e=0,r={}){let{leading:s=!0,trailing:a=!0}=r;return kae(t,e,{leading:s,maxWait:e,trailing:a})}var Rae=Ze(()=>{Qae()});function Q4(t){if(t==null)return"";if(typeof t=="string")return t;if(Array.isArray(t))return t.map(Q4).join(",");let e=String(t);return e==="0"&&Object.is(Number(t),-0)?"-0":e}var Tae=Ze(()=>{});function R4(t){if(!t||typeof t!="object")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.prototype||Object.getPrototypeOf(e)===null?Object.prototype.toString.call(t)==="[object Object]":!1}var Fae=Ze(()=>{});function Nae(t,e,r){return SB(t,e,void 0,void 0,void 0,void 0,r)}function SB(t,e,r,s,a,n,c){let f=c(t,e,r,s,a,n);if(f!==void 0)return f;if(typeof t==typeof e)switch(typeof t){case"bigint":case"string":case"boolean":case"symbol":case"undefined":return t===e;case"number":return t===e||Object.is(t,e);case"function":return t===e;case"object":return DB(t,e,n,c)}return DB(t,e,n,c)}function DB(t,e,r,s){if(Object.is(t,e))return!0;let a=Yd(t),n=Yd(e);if(a===Vd&&(a=jE),n===Vd&&(n=jE),a!==n)return!1;switch(a){case UE:return t.toString()===e.toString();case _E:{let p=t.valueOf(),h=e.valueOf();return Ck(p,h)}case HE:case Dk:case Sk:return Object.is(t.valueOf(),e.valueOf());case vk:return t.source===e.source&&t.flags===e.flags;case cae:return t===e}r=r??new Map;let c=r.get(t),f=r.get(e);if(c!=null&&f!=null)return c===e;r.set(t,e),r.set(e,t);try{switch(a){case Pk:{if(t.size!==e.size)return!1;for(let[p,h]of t.entries())if(!e.has(p)||!SB(h,e.get(p),p,t,e,r,s))return!1;return!0}case bk:{if(t.size!==e.size)return!1;let p=Array.from(t.values()),h=Array.from(e.values());for(let E=0;ESB(C,b,void 0,t,e,r,s));if(S===-1)return!1;h.splice(S,1)}return!0}case xk:case Rk:case Tk:case Fk:case Nk:case fae:case Ok:case Lk:case Mk:case Aae:case Uk:case _k:{if(typeof Buffer<"u"&&Buffer.isBuffer(t)!==Buffer.isBuffer(e)||t.length!==e.length)return!1;for(let p=0;p{Fae();wk();Bk();Hk();C4()});function Lae(){}var Mae=Ze(()=>{});function T4(t,e){return Nae(t,e,Lae)}var Uae=Ze(()=>{Oae();Mae()});function _ae(t){return GE(t)}var Hae=Ze(()=>{jk()});function jae(t){if(typeof t!="object"||t==null)return!1;if(Object.getPrototypeOf(t)===null)return!0;if(Object.prototype.toString.call(t)!=="[object Object]"){let r=t[Symbol.toStringTag];return r==null||!Object.getOwnPropertyDescriptor(t,Symbol.toStringTag)?.writable?!1:t.toString()===`[object ${r}]`}let e=t;for(;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e}var Gae=Ze(()=>{});function qae(t){if(ME(t))return t;if(Array.isArray(t)||GE(t)||t instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&t instanceof SharedArrayBuffer)return t.slice(0);let e=Object.getPrototypeOf(t),r=e.constructor;if(t instanceof Date||t instanceof Map||t instanceof Set)return new r(t);if(t instanceof RegExp){let s=new r(t);return s.lastIndex=t.lastIndex,s}if(t instanceof DataView)return new r(t.buffer.slice(0));if(t instanceof Error){let s=new r(t.message);return s.stack=t.stack,s.name=t.name,s.cause=t.cause,s}if(typeof File<"u"&&t instanceof File)return new r([t],t.name,{type:t.type,lastModified:t.lastModified});if(typeof t=="object"){let s=Object.create(e);return Object.assign(s,t)}return t}var Wae=Ze(()=>{Ik();jk()});function F4(t,...e){let r=e.slice(0,-1),s=e[e.length-1],a=t;for(let n=0;n{B4();wB();Wae();Ik();wk();S4();yae();Gae();Hae()});function N4(t,...e){if(t==null)return{};let r=hae(t);for(let s=0;s{b4();gae()});function Kd(t,...e){if(vae(t))return{};let r={};for(let s=0;s{Ek();D4();x4();aae();Sae()});function Kae(t){return t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}var zae=Ze(()=>{});function PB(t){return Kae(Q4(t))}var Zae=Ze(()=>{zae();Tae()});var ql=Ze(()=>{Rae();Uae();B4();Ek();D4();Yae();Vae();Jae();x4();b4();Zae();LE()});var je={};Vt(je,{AsyncActions:()=>M4,BufferStream:()=>L4,CachingStrategy:()=>ale,DefaultStream:()=>U4,allSettledSafe:()=>Uu,assertNever:()=>H4,bufferStream:()=>WE,buildIgnorePattern:()=>Oze,convertMapsToIndexableObjects:()=>Yk,dynamicRequire:()=>bp,escapeRegExp:()=>Qze,getArrayWithDefault:()=>xB,getFactoryWithDefault:()=>Yl,getMapWithDefault:()=>j4,getSetWithDefault:()=>Pp,groupBy:()=>Uze,isIndexableObject:()=>O4,isPathLike:()=>Lze,isTaggedYarnVersion:()=>kze,makeDeferred:()=>ile,mapAndFilter:()=>Wl,mapAndFind:()=>p0,mergeIntoTarget:()=>cle,overrideType:()=>Rze,parseBoolean:()=>kB,parseInt:()=>YE,parseOptionalBoolean:()=>lle,plural:()=>Wk,prettifyAsyncErrors:()=>qE,prettifySyncErrors:()=>G4,releaseAfterUseAsync:()=>Fze,replaceEnvVariables:()=>Vk,sortMap:()=>qs,toMerged:()=>Mze,tryParseOptionalBoolean:()=>q4,validateEnum:()=>Tze});function kze(t){return!!(tle.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function Wk(t,{one:e,more:r,zero:s=r}){return t===0?s:t===1?e:r}function Qze(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Rze(t){}function H4(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function Tze(t,e){let r=Object.values(t);if(!r.includes(e))throw new nt(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(s=>JSON.stringify(s)).join(", ")})`);return e}function Wl(t,e){let r=[];for(let s of t){let a=e(s);a!==rle&&r.push(a)}return r}function p0(t,e){for(let r of t){let s=e(r);if(s!==nle)return s}}function O4(t){return typeof t=="object"&&t!==null}async function Uu(t){let e=await Promise.allSettled(t),r=[];for(let s of e){if(s.status==="rejected")throw s.reason;r.push(s.value)}return r}function Yk(t){if(t instanceof Map&&(t=Object.fromEntries(t)),O4(t))for(let e of Object.keys(t)){let r=t[e];O4(r)&&(t[e]=Yk(r))}return t}function Yl(t,e,r){let s=t.get(e);return typeof s>"u"&&t.set(e,s=r()),s}function xB(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function Pp(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function j4(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function Fze(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function qE(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function G4(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function WE(t){return await new Promise((e,r)=>{let s=[];t.on("error",a=>{r(a)}),t.on("data",a=>{s.push(a)}),t.on("end",()=>{e(Buffer.concat(s))})})}function ile(){let t,e;return{promise:new Promise((s,a)=>{t=s,e=a}),resolve:t,reject:e}}function sle(t){return bB(fe.fromPortablePath(t))}function ole(path){let physicalPath=fe.fromPortablePath(path),currentCacheEntry=bB.cache[physicalPath];delete bB.cache[physicalPath];let result;try{result=sle(physicalPath);let freshCacheEntry=bB.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{bB.cache[physicalPath]=currentCacheEntry}return result}function Nze(t){let e=Xae.get(t),r=ce.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let s=ole(t);return Xae.set(t,{mtime:r.mtimeMs,instance:s}),s}function bp(t,{cachingStrategy:e=2}={}){switch(e){case 0:return ole(t);case 1:return Nze(t);case 2:return sle(t);default:throw new Error("Unsupported caching strategy")}}function qs(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let s=[];for(let n of e)s.push(r.map(c=>n(c)));let a=r.map((n,c)=>c);return a.sort((n,c)=>{for(let f of s){let p=f[n]f[c]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function Oze(t){return t.length===0?null:t.map(e=>`(${$ae.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function Vk(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...s)=>{let{variableName:a,colon:n,fallback:c}=s[s.length-1],f=Object.hasOwn(e,a),p=e[a];if(p||f&&!n)return p;if(c!=null)return c;throw new nt(`Environment variable not found (${a})`)})}function kB(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 lle(t){return typeof t>"u"?t:kB(t)}function q4(t){try{return lle(t)}catch{return null}}function Lze(t){return!!(fe.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function cle(t,...e){let r=c=>({value:c}),s=r(t),a=e.map(c=>r(c)),{value:n}=F4(s,...a,(c,f)=>{if(Array.isArray(c)&&Array.isArray(f)){for(let p of f)c.find(h=>T4(h,p))||c.push(p);return c}});return n}function Mze(...t){return cle({},...t)}function Uze(t,e){let r=Object.create(null);for(let s of t){let a=s[e];r[a]??=[],r[a].push(s)}return r}function YE(t){return typeof t=="string"?Number.parseInt(t,10):t}var $ae,ele,tle,_4,rle,nle,L4,M4,U4,bB,Xae,ale,bc=Ze(()=>{Dt();Yt();ql();$ae=ut(Go()),ele=ut(Ld()),tle=ut(Ai()),_4=Ie("stream");rle=Symbol();Wl.skip=rle;nle=Symbol();p0.skip=nle;L4=class extends _4.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,s,a){if(s!=="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))}};M4=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,ele.default)(e)}set(e,r){let s=this.deferred.get(e);typeof s>"u"&&this.deferred.set(e,s=ile());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&s.resolve()},n=>{this.promises.get(e)===a&&s.reject(n)}),s.promise}reduce(e,r){let s=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(s))}async wait(){await Promise.all(this.promises.values())}},U4=class extends _4.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,s,a){if(s!=="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)}},bB=eval("require");Xae=new Map;ale=(s=>(s[s.NoCache=0]="NoCache",s[s.FsTime=1]="FsTime",s[s.Node=2]="Node",s))(ale||{})});var VE,W4,Y4,ule=Ze(()=>{VE=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))(VE||{}),W4=(s=>(s.Dependency="Dependency",s.PeerDependency="PeerDependency",s.PeerDependencyMeta="PeerDependencyMeta",s))(W4||{}),Y4=(s=>(s.Inactive="inactive",s.Redundant="redundant",s.Active="active",s))(Y4||{})});var he={};Vt(he,{LogLevel:()=>$k,Style:()=>zk,Type:()=>ht,addLogFilterSupport:()=>TB,applyColor:()=>ri,applyHyperlink:()=>KE,applyStyle:()=>zd,json:()=>Zd,jsonOrPretty:()=>jze,mark:()=>Z4,pretty:()=>Ht,prettyField:()=>Kf,prettyList:()=>z4,prettyTruncatedLocatorList:()=>Xk,stripAnsi:()=>JE.default,supportsColor:()=>Zk,supportsHyperlinks:()=>K4,tuple:()=>_u});function fle(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let s=1024**r;return`${Math.floor(t*100/s)/100} ${e[r-1]}`}function Jk(t,e){if(Array.isArray(e))return e.length===0?ri(t,"[]",ht.CODE):ri(t,"[ ",ht.CODE)+e.map(r=>Jk(t,r)).join(", ")+ri(t," ]",ht.CODE);if(typeof e=="string")return ri(t,JSON.stringify(e),ht.STRING);if(typeof e=="number")return ri(t,JSON.stringify(e),ht.NUMBER);if(typeof e=="boolean")return ri(t,JSON.stringify(e),ht.BOOLEAN);if(e===null)return ri(t,"null",ht.NULL);if(typeof e=="object"&&Object.getPrototypeOf(e)===Object.prototype){let r=Object.entries(e);return r.length===0?ri(t,"{}",ht.CODE):ri(t,"{ ",ht.CODE)+r.map(([s,a])=>`${Jk(t,s)}: ${Jk(t,a)}`).join(", ")+ri(t," }",ht.CODE)}if(typeof e>"u")return ri(t,"undefined",ht.NULL);throw new Error("Assertion failed: The value doesn't seem to be a valid JSON object")}function _u(t,e){return[e,t]}function zd(t,e,r){return t.get("enableColors")&&r&2&&(e=RB.default.bold(e)),e}function ri(t,e,r){if(!t.get("enableColors"))return e;let s=_ze.get(r);if(s===null)return e;let a=typeof s>"u"?r:J4.level>=3?s[0]:s[1],n=typeof a=="number"?V4.ansi256(a):a.startsWith("#")?V4.hex(a):V4[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function KE(t,e,r){return t.get("enableHyperlinks")?Hze?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function Ht(t,e,r){if(e===null)return ri(t,"null",ht.NULL);if(Object.hasOwn(Kk,r))return Kk[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return ri(t,e,r)}function z4(t,e,r,{separator:s=", "}={}){return[...e].map(a=>Ht(t,a,r)).join(s)}function Zd(t,e){if(t===null)return null;if(Object.hasOwn(Kk,e))return Kk[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 jze(t,e,[r,s]){return t?Zd(r,s):Ht(e,r,s)}function Z4(t){return{Check:ri(t,"\u2713","green"),Cross:ri(t,"\u2718","red"),Question:ri(t,"?","cyan")}}function Kf(t,{label:e,value:[r,s]}){return`${Ht(t,e,ht.CODE)}: ${Ht(t,r,s)}`}function Xk(t,e,r){let s=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=`${Yr(t,h)}, `,C=X4(h).length+2;if(s.length>0&&nh).join("").slice(0,-2);let c="X".repeat(a.length.toString().length),f=`and ${c} more.`,p=a.length;for(;s.length>1&&nh).join(""),f.replace(c,Ht(t,p,ht.NUMBER))].join("")}function TB(t,{configuration:e}){let r=e.get("logFilters"),s=new Map,a=new Map,n=[];for(let C of r){let S=C.get("level");if(typeof S>"u")continue;let b=C.get("code");typeof b<"u"&&s.set(b,S);let I=C.get("text");typeof I<"u"&&a.set(I,S);let T=C.get("pattern");typeof T<"u"&&n.push([Ale.default.matcher(T,{contains:!0}),S])}n.reverse();let c=(C,S,b)=>{if(C===null||C===0)return b;let I=a.size>0||n.length>0?(0,JE.default)(S):S;if(a.size>0){let T=a.get(I);if(typeof T<"u")return T??b}if(n.length>0){for(let[T,N]of n)if(T(I))return N??b}if(s.size>0){let T=s.get(Yf(C));if(typeof T<"u")return T??b}return b},f=t.reportInfo,p=t.reportWarning,h=t.reportError,E=function(C,S,b,I){switch(c(S,b,I)){case"info":f.call(C,S,b);break;case"warning":p.call(C,S??0,b);break;case"error":h.call(C,S??0,b);break}};t.reportInfo=function(...C){return E(this,...C,"info")},t.reportWarning=function(...C){return E(this,...C,"warning")},t.reportError=function(...C){return E(this,...C,"error")}}var RB,QB,Ale,JE,ht,zk,J4,Zk,K4,V4,_ze,qo,Kk,Hze,$k,xc=Ze(()=>{Dt();RB=ut(RE()),QB=ut(Fd());Yt();Ale=ut(Go()),JE=ut(dk());Gx();Wo();ht={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",STRING:"STRING",BOOLEAN:"BOOLEAN",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"},zk=(e=>(e[e.BOLD=2]="BOLD",e))(zk||{}),J4=QB.default.GITHUB_ACTIONS?{level:2}:RB.default.supportsColor?{level:RB.default.supportsColor.level}:{level:0},Zk=J4.level!==0,K4=Zk&&!QB.default.GITHUB_ACTIONS&&!QB.default.CIRCLE&&!QB.default.GITLAB,V4=new RB.default.Instance(J4),_ze=new Map([[ht.NO_HINT,null],[ht.NULL,["#a853b5",129]],[ht.SCOPE,["#d75f00",166]],[ht.NAME,["#d7875f",173]],[ht.RANGE,["#00afaf",37]],[ht.REFERENCE,["#87afff",111]],[ht.NUMBER,["#ffd700",220]],[ht.STRING,["#b4bd68",32]],[ht.BOOLEAN,["#faa023",209]],[ht.PATH,["#d75fd7",170]],[ht.URL,["#d75fd7",170]],[ht.ADDED,["#5faf00",70]],[ht.REMOVED,["#ff3131",160]],[ht.CODE,["#87afff",111]],[ht.SIZE,["#ffd700",220]]]),qo=t=>t;Kk={[ht.ID]:qo({pretty:(t,e)=>typeof e=="number"?ri(t,`${e}`,ht.NUMBER):ri(t,e,ht.CODE),json:t=>t}),[ht.INSPECT]:qo({pretty:(t,e)=>Jk(t,e),json:t=>t}),[ht.NUMBER]:qo({pretty:(t,e)=>ri(t,`${e}`,ht.NUMBER),json:t=>t}),[ht.IDENT]:qo({pretty:(t,e)=>Xi(t,e),json:t=>un(t)}),[ht.LOCATOR]:qo({pretty:(t,e)=>Yr(t,e),json:t=>ll(t)}),[ht.DESCRIPTOR]:qo({pretty:(t,e)=>ni(t,e),json:t=>al(t)}),[ht.RESOLUTION]:qo({pretty:(t,{descriptor:e,locator:r})=>FB(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:al(t),locator:e!==null?ll(e):null})}),[ht.DEPENDENT]:qo({pretty:(t,{locator:e,descriptor:r})=>$4(t,e,r),json:({locator:t,descriptor:e})=>({locator:ll(t),descriptor:al(e)})}),[ht.PACKAGE_EXTENSION]:qo({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${Xi(t,e.parentDescriptor)} \u27A4 ${ri(t,"dependencies",ht.CODE)} \u27A4 ${Xi(t,e.descriptor)}`;case"PeerDependency":return`${Xi(t,e.parentDescriptor)} \u27A4 ${ri(t,"peerDependencies",ht.CODE)} \u27A4 ${Xi(t,e.descriptor)}`;case"PeerDependencyMeta":return`${Xi(t,e.parentDescriptor)} \u27A4 ${ri(t,"peerDependenciesMeta",ht.CODE)} \u27A4 ${Xi(t,Sa(e.selector))} \u27A4 ${ri(t,e.key,ht.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${un(t.parentDescriptor)} > ${un(t.descriptor)}`;case"PeerDependency":return`${un(t.parentDescriptor)} >> ${un(t.descriptor)}`;case"PeerDependencyMeta":return`${un(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[ht.SETTING]:qo({pretty:(t,e)=>(t.get(e),KE(t,ri(t,e,ht.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[ht.DURATION]:qo({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),s=Math.ceil((e-r*60*1e3)/1e3);return s===0?`${r}m`:`${r}m ${s}s`}else{let r=Math.floor(e/1e3),s=e-r*1e3;return s===0?`${r}s`:`${r}s ${s}ms`}},json:t=>t}),[ht.SIZE]:qo({pretty:(t,e)=>ri(t,fle(e),ht.NUMBER),json:t=>t}),[ht.SIZE_DIFF]:qo({pretty:(t,e)=>{let r=e>=0?"+":"-",s=r==="+"?ht.REMOVED:ht.ADDED;return ri(t,`${r} ${fle(Math.max(Math.abs(e),1))}`,s)},json:t=>t}),[ht.PATH]:qo({pretty:(t,e)=>ri(t,fe.fromPortablePath(e),ht.PATH),json:t=>fe.fromPortablePath(t)}),[ht.MARKDOWN]:qo({pretty:(t,{text:e,format:r,paragraphs:s})=>Ho(e,{format:r,paragraphs:s}),json:({text:t})=>t}),[ht.MARKDOWN_INLINE]:qo({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,s,a)=>Ht(t,s+a+s,ht.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,s,a)=>zd(t,a,2)),e),json:t=>t})};Hze=!!process.env.KONSOLE_VERSION;$k=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))($k||{})});var ple=_(zE=>{"use strict";Object.defineProperty(zE,"__esModule",{value:!0});zE.splitWhen=zE.flatten=void 0;function Gze(t){return t.reduce((e,r)=>[].concat(e,r),[])}zE.flatten=Gze;function qze(t,e){let r=[[]],s=0;for(let a of t)e(a)?(s++,r[s]=[]):r[s].push(a);return r}zE.splitWhen=qze});var hle=_(eQ=>{"use strict";Object.defineProperty(eQ,"__esModule",{value:!0});eQ.isEnoentCodeError=void 0;function Wze(t){return t.code==="ENOENT"}eQ.isEnoentCodeError=Wze});var gle=_(tQ=>{"use strict";Object.defineProperty(tQ,"__esModule",{value:!0});tQ.createDirentFromStats=void 0;var e3=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 Yze(t,e){return new e3(t,e)}tQ.createDirentFromStats=Yze});var Ele=_(ls=>{"use strict";Object.defineProperty(ls,"__esModule",{value:!0});ls.convertPosixPathToPattern=ls.convertWindowsPathToPattern=ls.convertPathToPattern=ls.escapePosixPath=ls.escapeWindowsPath=ls.escape=ls.removeLeadingDotSegment=ls.makeAbsolute=ls.unixify=void 0;var Vze=Ie("os"),Jze=Ie("path"),dle=Vze.platform()==="win32",Kze=2,zze=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,Zze=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,Xze=/^\\\\([.?])/,$ze=/\\(?![!()+@[\]{}])/g;function eZe(t){return t.replace(/\\/g,"/")}ls.unixify=eZe;function tZe(t,e){return Jze.resolve(t,e)}ls.makeAbsolute=tZe;function rZe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(Kze)}return t}ls.removeLeadingDotSegment=rZe;ls.escape=dle?t3:r3;function t3(t){return t.replace(Zze,"\\$2")}ls.escapeWindowsPath=t3;function r3(t){return t.replace(zze,"\\$2")}ls.escapePosixPath=r3;ls.convertPathToPattern=dle?mle:yle;function mle(t){return t3(t).replace(Xze,"//$1").replace($ze,"/")}ls.convertWindowsPathToPattern=mle;function yle(t){return r3(t)}ls.convertPosixPathToPattern=yle});var Cle=_((UOt,Ile)=>{Ile.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 vle=_((_Ot,Ble)=>{var nZe=Cle(),wle={"{":"}","(":")","[":"]"},iZe=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,s=-2,a=-2,n=-2,c=-2;ee&&(c===-1||c>s||(c=t.indexOf("\\",e),c===-1||c>s)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(c=t.indexOf("\\",e),c===-1||c>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(c=t.indexOf("\\",e),c===-1||c>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(c=t.indexOf("\\",r),c===-1||c>n))))return!0;if(t[e]==="\\"){var f=t[e+1];e+=2;var p=wle[f];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},sZe=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var oZe=vle(),aZe=Ie("path").posix.dirname,lZe=Ie("os").platform()==="win32",n3="/",cZe=/\\/g,uZe=/[\{\[].*[\}\]]$/,fZe=/(^|[^\\])([\{\[]|\([^\)]+$)/,AZe=/\\([\!\*\?\|\[\]\(\)\{\}])/g;Sle.exports=function(e,r){var s=Object.assign({flipBackslashes:!0},r);s.flipBackslashes&&lZe&&e.indexOf(n3)<0&&(e=e.replace(cZe,n3)),uZe.test(e)&&(e+=n3),e+="a";do e=aZe(e);while(oZe(e)||fZe.test(e));return e.replace(AZe,"$1")}});var Fle=_(jr=>{"use strict";Object.defineProperty(jr,"__esModule",{value:!0});jr.removeDuplicateSlashes=jr.matchAny=jr.convertPatternsToRe=jr.makeRe=jr.getPatternParts=jr.expandBraceExpansion=jr.expandPatternsWithBraceExpansion=jr.isAffectDepthOfReadingPattern=jr.endsWithSlashGlobStar=jr.hasGlobStar=jr.getBaseDirectory=jr.isPatternRelatedToParentDirectory=jr.getPatternsOutsideCurrentDirectory=jr.getPatternsInsideCurrentDirectory=jr.getPositivePatterns=jr.getNegativePatterns=jr.isPositivePattern=jr.isNegativePattern=jr.convertToNegativePattern=jr.convertToPositivePattern=jr.isDynamicPattern=jr.isStaticPattern=void 0;var pZe=Ie("path"),hZe=Dle(),i3=Go(),Ple="**",gZe="\\",dZe=/[*?]|^!/,mZe=/\[[^[]*]/,yZe=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,EZe=/[!*+?@]\([^(]*\)/,IZe=/,|\.\./,CZe=/(?!^)\/{2,}/g;function ble(t,e={}){return!xle(t,e)}jr.isStaticPattern=ble;function xle(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(gZe)||dZe.test(t)||mZe.test(t)||yZe.test(t)||e.extglob!==!1&&EZe.test(t)||e.braceExpansion!==!1&&wZe(t))}jr.isDynamicPattern=xle;function wZe(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let s=t.slice(e,r);return IZe.test(s)}function BZe(t){return rQ(t)?t.slice(1):t}jr.convertToPositivePattern=BZe;function vZe(t){return"!"+t}jr.convertToNegativePattern=vZe;function rQ(t){return t.startsWith("!")&&t[1]!=="("}jr.isNegativePattern=rQ;function kle(t){return!rQ(t)}jr.isPositivePattern=kle;function SZe(t){return t.filter(rQ)}jr.getNegativePatterns=SZe;function DZe(t){return t.filter(kle)}jr.getPositivePatterns=DZe;function PZe(t){return t.filter(e=>!s3(e))}jr.getPatternsInsideCurrentDirectory=PZe;function bZe(t){return t.filter(s3)}jr.getPatternsOutsideCurrentDirectory=bZe;function s3(t){return t.startsWith("..")||t.startsWith("./..")}jr.isPatternRelatedToParentDirectory=s3;function xZe(t){return hZe(t,{flipBackslashes:!1})}jr.getBaseDirectory=xZe;function kZe(t){return t.includes(Ple)}jr.hasGlobStar=kZe;function Qle(t){return t.endsWith("/"+Ple)}jr.endsWithSlashGlobStar=Qle;function QZe(t){let e=pZe.basename(t);return Qle(t)||ble(e)}jr.isAffectDepthOfReadingPattern=QZe;function RZe(t){return t.reduce((e,r)=>e.concat(Rle(r)),[])}jr.expandPatternsWithBraceExpansion=RZe;function Rle(t){let e=i3.braces(t,{expand:!0,nodupes:!0,keepEscaping:!0});return e.sort((r,s)=>r.length-s.length),e.filter(r=>r!=="")}jr.expandBraceExpansion=Rle;function TZe(t,e){let{parts:r}=i3.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}jr.getPatternParts=TZe;function Tle(t,e){return i3.makeRe(t,e)}jr.makeRe=Tle;function FZe(t,e){return t.map(r=>Tle(r,e))}jr.convertPatternsToRe=FZe;function NZe(t,e){return e.some(r=>r.test(t))}jr.matchAny=NZe;function OZe(t){return t.replace(CZe,"/")}jr.removeDuplicateSlashes=OZe});var Mle=_((GOt,Lle)=>{"use strict";var LZe=Ie("stream"),Nle=LZe.PassThrough,MZe=Array.prototype.slice;Lle.exports=UZe;function UZe(){let t=[],e=MZe.call(arguments),r=!1,s=e[e.length-1];s&&!Array.isArray(s)&&s.pipe==null?e.pop():s={};let a=s.end!==!1,n=s.pipeError===!0;s.objectMode==null&&(s.objectMode=!0),s.highWaterMark==null&&(s.highWaterMark=64*1024);let c=Nle(s);function f(){for(let E=0,C=arguments.length;E0||(r=!1,p())}function b(I){function T(){I.removeListener("merge2UnpipeEnd",T),I.removeListener("end",T),n&&I.removeListener("error",N),S()}function N(U){c.emit("error",U)}if(I._readableState.endEmitted)return S();I.on("merge2UnpipeEnd",T),I.on("end",T),n&&I.on("error",N),I.pipe(c,{end:!1}),I.resume()}for(let I=0;I{"use strict";Object.defineProperty(nQ,"__esModule",{value:!0});nQ.merge=void 0;var _Ze=Mle();function HZe(t){let e=_Ze(t);return t.forEach(r=>{r.once("error",s=>e.emit("error",s))}),e.once("close",()=>Ule(t)),e.once("end",()=>Ule(t)),e}nQ.merge=HZe;function Ule(t){t.forEach(e=>e.emit("close"))}});var Hle=_(ZE=>{"use strict";Object.defineProperty(ZE,"__esModule",{value:!0});ZE.isEmpty=ZE.isString=void 0;function jZe(t){return typeof t=="string"}ZE.isString=jZe;function GZe(t){return t===""}ZE.isEmpty=GZe});var xp=_(Yo=>{"use strict";Object.defineProperty(Yo,"__esModule",{value:!0});Yo.string=Yo.stream=Yo.pattern=Yo.path=Yo.fs=Yo.errno=Yo.array=void 0;var qZe=ple();Yo.array=qZe;var WZe=hle();Yo.errno=WZe;var YZe=gle();Yo.fs=YZe;var VZe=Ele();Yo.path=VZe;var JZe=Fle();Yo.pattern=JZe;var KZe=_le();Yo.stream=KZe;var zZe=Hle();Yo.string=zZe});var Wle=_(Vo=>{"use strict";Object.defineProperty(Vo,"__esModule",{value:!0});Vo.convertPatternGroupToTask=Vo.convertPatternGroupsToTasks=Vo.groupPatternsByBaseDirectory=Vo.getNegativePatternsAsPositive=Vo.getPositivePatterns=Vo.convertPatternsToTasks=Vo.generate=void 0;var Hu=xp();function ZZe(t,e){let r=jle(t,e),s=jle(e.ignore,e),a=Gle(r),n=qle(r,s),c=a.filter(E=>Hu.pattern.isStaticPattern(E,e)),f=a.filter(E=>Hu.pattern.isDynamicPattern(E,e)),p=o3(c,n,!1),h=o3(f,n,!0);return p.concat(h)}Vo.generate=ZZe;function jle(t,e){let r=t;return e.braceExpansion&&(r=Hu.pattern.expandPatternsWithBraceExpansion(r)),e.baseNameMatch&&(r=r.map(s=>s.includes("/")?s:`**/${s}`)),r.map(s=>Hu.pattern.removeDuplicateSlashes(s))}function o3(t,e,r){let s=[],a=Hu.pattern.getPatternsOutsideCurrentDirectory(t),n=Hu.pattern.getPatternsInsideCurrentDirectory(t),c=a3(a),f=a3(n);return s.push(...l3(c,e,r)),"."in f?s.push(c3(".",n,e,r)):s.push(...l3(f,e,r)),s}Vo.convertPatternsToTasks=o3;function Gle(t){return Hu.pattern.getPositivePatterns(t)}Vo.getPositivePatterns=Gle;function qle(t,e){return Hu.pattern.getNegativePatterns(t).concat(e).map(Hu.pattern.convertToPositivePattern)}Vo.getNegativePatternsAsPositive=qle;function a3(t){let e={};return t.reduce((r,s)=>{let a=Hu.pattern.getBaseDirectory(s);return a in r?r[a].push(s):r[a]=[s],r},e)}Vo.groupPatternsByBaseDirectory=a3;function l3(t,e,r){return Object.keys(t).map(s=>c3(s,t[s],e,r))}Vo.convertPatternGroupsToTasks=l3;function c3(t,e,r,s){return{dynamic:s,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Hu.pattern.convertToNegativePattern))}}Vo.convertPatternGroupToTask=c3});var Vle=_(iQ=>{"use strict";Object.defineProperty(iQ,"__esModule",{value:!0});iQ.read=void 0;function XZe(t,e,r){e.fs.lstat(t,(s,a)=>{if(s!==null){Yle(r,s);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){u3(r,a);return}e.fs.stat(t,(n,c)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){Yle(r,n);return}u3(r,a);return}e.markSymbolicLink&&(c.isSymbolicLink=()=>!0),u3(r,c)})})}iQ.read=XZe;function Yle(t,e){t(e)}function u3(t,e){t(null,e)}});var Jle=_(sQ=>{"use strict";Object.defineProperty(sQ,"__esModule",{value:!0});sQ.read=void 0;function $Ze(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let s=e.fs.statSync(t);return e.markSymbolicLink&&(s.isSymbolicLink=()=>!0),s}catch(s){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw s}}sQ.read=$Ze});var Kle=_(h0=>{"use strict";Object.defineProperty(h0,"__esModule",{value:!0});h0.createFileSystemAdapter=h0.FILE_SYSTEM_ADAPTER=void 0;var oQ=Ie("fs");h0.FILE_SYSTEM_ADAPTER={lstat:oQ.lstat,stat:oQ.stat,lstatSync:oQ.lstatSync,statSync:oQ.statSync};function eXe(t){return t===void 0?h0.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},h0.FILE_SYSTEM_ADAPTER),t)}h0.createFileSystemAdapter=eXe});var zle=_(A3=>{"use strict";Object.defineProperty(A3,"__esModule",{value:!0});var tXe=Kle(),f3=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=tXe.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}};A3.default=f3});var Xd=_(g0=>{"use strict";Object.defineProperty(g0,"__esModule",{value:!0});g0.statSync=g0.stat=g0.Settings=void 0;var Zle=Vle(),rXe=Jle(),p3=zle();g0.Settings=p3.default;function nXe(t,e,r){if(typeof e=="function"){Zle.read(t,h3(),e);return}Zle.read(t,h3(e),r)}g0.stat=nXe;function iXe(t,e){let r=h3(e);return rXe.read(t,r)}g0.statSync=iXe;function h3(t={}){return t instanceof p3.default?t:new p3.default(t)}});var ece=_(($Ot,$le)=>{var Xle;$le.exports=typeof queueMicrotask=="function"?queueMicrotask.bind(typeof window<"u"?window:global):t=>(Xle||(Xle=Promise.resolve())).then(t).catch(e=>setTimeout(()=>{throw e},0))});var rce=_((eLt,tce)=>{tce.exports=oXe;var sXe=ece();function oXe(t,e){let r,s,a,n=!0;Array.isArray(t)?(r=[],s=t.length):(a=Object.keys(t),r={},s=a.length);function c(p){function h(){e&&e(p,r),e=null}n?sXe(h):h()}function f(p,h,E){r[p]=E,(--s===0||h)&&c(h)}s?a?a.forEach(function(p){t[p](function(h,E){f(p,h,E)})}):t.forEach(function(p,h){p(function(E,C){f(h,E,C)})}):c(null),n=!1}});var g3=_(lQ=>{"use strict";Object.defineProperty(lQ,"__esModule",{value:!0});lQ.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var aQ=process.versions.node.split(".");if(aQ[0]===void 0||aQ[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var nce=Number.parseInt(aQ[0],10),aXe=Number.parseInt(aQ[1],10),ice=10,lXe=10,cXe=nce>ice,uXe=nce===ice&&aXe>=lXe;lQ.IS_SUPPORT_READDIR_WITH_FILE_TYPES=cXe||uXe});var sce=_(cQ=>{"use strict";Object.defineProperty(cQ,"__esModule",{value:!0});cQ.createDirentFromStats=void 0;var d3=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 fXe(t,e){return new d3(t,e)}cQ.createDirentFromStats=fXe});var m3=_(uQ=>{"use strict";Object.defineProperty(uQ,"__esModule",{value:!0});uQ.fs=void 0;var AXe=sce();uQ.fs=AXe});var y3=_(fQ=>{"use strict";Object.defineProperty(fQ,"__esModule",{value:!0});fQ.joinPathSegments=void 0;function pXe(t,e,r){return t.endsWith(r)?t+e:t+r+e}fQ.joinPathSegments=pXe});var fce=_(d0=>{"use strict";Object.defineProperty(d0,"__esModule",{value:!0});d0.readdir=d0.readdirWithFileTypes=d0.read=void 0;var hXe=Xd(),oce=rce(),gXe=g3(),ace=m3(),lce=y3();function dXe(t,e,r){if(!e.stats&&gXe.IS_SUPPORT_READDIR_WITH_FILE_TYPES){cce(t,e,r);return}uce(t,e,r)}d0.read=dXe;function cce(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(s,a)=>{if(s!==null){AQ(r,s);return}let n=a.map(f=>({dirent:f,name:f.name,path:lce.joinPathSegments(t,f.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){E3(r,n);return}let c=n.map(f=>mXe(f,e));oce(c,(f,p)=>{if(f!==null){AQ(r,f);return}E3(r,p)})})}d0.readdirWithFileTypes=cce;function mXe(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(s,a)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){r(s);return}r(null,t);return}t.dirent=ace.fs.createDirentFromStats(t.name,a),r(null,t)})}}function uce(t,e,r){e.fs.readdir(t,(s,a)=>{if(s!==null){AQ(r,s);return}let n=a.map(c=>{let f=lce.joinPathSegments(t,c,e.pathSegmentSeparator);return p=>{hXe.stat(f,e.fsStatSettings,(h,E)=>{if(h!==null){p(h);return}let C={name:c,path:f,dirent:ace.fs.createDirentFromStats(c,E)};e.stats&&(C.stats=E),p(null,C)})}});oce(n,(c,f)=>{if(c!==null){AQ(r,c);return}E3(r,f)})})}d0.readdir=uce;function AQ(t,e){t(e)}function E3(t,e){t(null,e)}});var dce=_(m0=>{"use strict";Object.defineProperty(m0,"__esModule",{value:!0});m0.readdir=m0.readdirWithFileTypes=m0.read=void 0;var yXe=Xd(),EXe=g3(),Ace=m3(),pce=y3();function IXe(t,e){return!e.stats&&EXe.IS_SUPPORT_READDIR_WITH_FILE_TYPES?hce(t,e):gce(t,e)}m0.read=IXe;function hce(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(s=>{let a={dirent:s,name:s.name,path:pce.joinPathSegments(t,s.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=Ace.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}m0.readdirWithFileTypes=hce;function gce(t,e){return e.fs.readdirSync(t).map(s=>{let a=pce.joinPathSegments(t,s,e.pathSegmentSeparator),n=yXe.statSync(a,e.fsStatSettings),c={name:s,path:a,dirent:Ace.fs.createDirentFromStats(s,n)};return e.stats&&(c.stats=n),c})}m0.readdir=gce});var mce=_(y0=>{"use strict";Object.defineProperty(y0,"__esModule",{value:!0});y0.createFileSystemAdapter=y0.FILE_SYSTEM_ADAPTER=void 0;var XE=Ie("fs");y0.FILE_SYSTEM_ADAPTER={lstat:XE.lstat,stat:XE.stat,lstatSync:XE.lstatSync,statSync:XE.statSync,readdir:XE.readdir,readdirSync:XE.readdirSync};function CXe(t){return t===void 0?y0.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},y0.FILE_SYSTEM_ADAPTER),t)}y0.createFileSystemAdapter=CXe});var yce=_(C3=>{"use strict";Object.defineProperty(C3,"__esModule",{value:!0});var wXe=Ie("path"),BXe=Xd(),vXe=mce(),I3=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=vXe.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,wXe.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new BXe.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};C3.default=I3});var pQ=_(E0=>{"use strict";Object.defineProperty(E0,"__esModule",{value:!0});E0.Settings=E0.scandirSync=E0.scandir=void 0;var Ece=fce(),SXe=dce(),w3=yce();E0.Settings=w3.default;function DXe(t,e,r){if(typeof e=="function"){Ece.read(t,B3(),e);return}Ece.read(t,B3(e),r)}E0.scandir=DXe;function PXe(t,e){let r=B3(e);return SXe.read(t,r)}E0.scandirSync=PXe;function B3(t={}){return t instanceof w3.default?t:new w3.default(t)}});var Cce=_((uLt,Ice)=>{"use strict";function bXe(t){var e=new t,r=e;function s(){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:s,release:a}}Ice.exports=bXe});var Bce=_((fLt,v3)=>{"use strict";var xXe=Cce();function wce(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 s=xXe(kXe),a=null,n=null,c=0,f=null,p={push:T,drain:kc,saturated:kc,pause:E,paused:!1,get concurrency(){return r},set concurrency(ue){if(!(ue>=1))throw new Error("fastqueue concurrency must be equal to or greater than 1");if(r=ue,!p.paused)for(;a&&c=r||p.paused?n?(n.next=me,n=me):(a=me,n=me,p.saturated()):(c++,e.call(t,me.value,me.worked))}function N(ue,le){var me=s.get();me.context=t,me.release=U,me.value=ue,me.callback=le||kc,me.errorHandler=f,c>=r||p.paused?a?(me.next=a,a=me):(a=me,n=me,p.saturated()):(c++,e.call(t,me.value,me.worked))}function U(ue){ue&&s.release(ue);var le=a;le&&c<=r?p.paused?c--:(n===a&&(n=null),a=le.next,le.next=null,e.call(t,le.value,le.worked),n===null&&p.empty()):--c===0&&p.drain()}function W(){a=null,n=null,p.drain=kc}function ee(){a=null,n=null,p.drain(),p.drain=kc}function ie(ue){f=ue}}function kc(){}function kXe(){this.value=null,this.callback=kc,this.next=null,this.release=kc,this.context=null,this.errorHandler=null;var t=this;this.worked=function(r,s){var a=t.callback,n=t.errorHandler,c=t.value;t.value=null,t.callback=kc,t.errorHandler&&n(r,c),a.call(t.context,r,s),t.release(t)}}function QXe(t,e,r){typeof t=="function"&&(r=e,e=t,t=null);function s(E,C){e.call(this,E).then(function(S){C(null,S)},C)}var a=wce(t,s,r),n=a.push,c=a.unshift;return a.push=f,a.unshift=p,a.drained=h,a;function f(E){var C=new Promise(function(S,b){n(E,function(I,T){if(I){b(I);return}S(T)})});return C.catch(kc),C}function p(E){var C=new Promise(function(S,b){c(E,function(I,T){if(I){b(I);return}S(T)})});return C.catch(kc),C}function h(){if(a.idle())return new Promise(function(S){S()});var E=a.drain,C=new Promise(function(S){a.drain=function(){E(),S()}});return C}}v3.exports=wce;v3.exports.promise=QXe});var hQ=_(zf=>{"use strict";Object.defineProperty(zf,"__esModule",{value:!0});zf.joinPathSegments=zf.replacePathSegmentSeparator=zf.isAppliedFilter=zf.isFatalError=void 0;function RXe(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}zf.isFatalError=RXe;function TXe(t,e){return t===null||t(e)}zf.isAppliedFilter=TXe;function FXe(t,e){return t.split(/[/\\]/).join(e)}zf.replacePathSegmentSeparator=FXe;function NXe(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}zf.joinPathSegments=NXe});var P3=_(D3=>{"use strict";Object.defineProperty(D3,"__esModule",{value:!0});var OXe=hQ(),S3=class{constructor(e,r){this._root=e,this._settings=r,this._root=OXe.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};D3.default=S3});var k3=_(x3=>{"use strict";Object.defineProperty(x3,"__esModule",{value:!0});var LXe=Ie("events"),MXe=pQ(),UXe=Bce(),gQ=hQ(),_Xe=P3(),b3=class extends _Xe.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=MXe.scandir,this._emitter=new LXe.EventEmitter,this._queue=UXe(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 s={directory:e,base:r};this._queue.push(s,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(s,a)=>{if(s!==null){r(s,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!gQ.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 s=e.path;r!==void 0&&(e.path=gQ.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),gQ.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&gQ.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(s,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};x3.default=b3});var vce=_(R3=>{"use strict";Object.defineProperty(R3,"__esModule",{value:!0});var HXe=k3(),Q3=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new HXe.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{jXe(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{GXe(e,this._storage)}),this._reader.read()}};R3.default=Q3;function jXe(t,e){t(e)}function GXe(t,e){t(null,e)}});var Sce=_(F3=>{"use strict";Object.defineProperty(F3,"__esModule",{value:!0});var qXe=Ie("stream"),WXe=k3(),T3=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new WXe.default(this._root,this._settings),this._stream=new qXe.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}};F3.default=T3});var Dce=_(O3=>{"use strict";Object.defineProperty(O3,"__esModule",{value:!0});var YXe=pQ(),dQ=hQ(),VXe=P3(),N3=class extends VXe.default{constructor(){super(...arguments),this._scandir=YXe.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 s=this._scandir(e,this._settings.fsScandirSettings);for(let a of s)this._handleEntry(a,r)}catch(s){this._handleError(s)}}_handleError(e){if(dQ.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let s=e.path;r!==void 0&&(e.path=dQ.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),dQ.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&dQ.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(s,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};O3.default=N3});var Pce=_(M3=>{"use strict";Object.defineProperty(M3,"__esModule",{value:!0});var JXe=Dce(),L3=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new JXe.default(this._root,this._settings)}read(){return this._reader.read()}};M3.default=L3});var bce=_(_3=>{"use strict";Object.defineProperty(_3,"__esModule",{value:!0});var KXe=Ie("path"),zXe=pQ(),U3=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,KXe.sep),this.fsScandirSettings=new zXe.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}};_3.default=U3});var yQ=_(Zf=>{"use strict";Object.defineProperty(Zf,"__esModule",{value:!0});Zf.Settings=Zf.walkStream=Zf.walkSync=Zf.walk=void 0;var xce=vce(),ZXe=Sce(),XXe=Pce(),H3=bce();Zf.Settings=H3.default;function $Xe(t,e,r){if(typeof e=="function"){new xce.default(t,mQ()).read(e);return}new xce.default(t,mQ(e)).read(r)}Zf.walk=$Xe;function e$e(t,e){let r=mQ(e);return new XXe.default(t,r).read()}Zf.walkSync=e$e;function t$e(t,e){let r=mQ(e);return new ZXe.default(t,r).read()}Zf.walkStream=t$e;function mQ(t={}){return t instanceof H3.default?t:new H3.default(t)}});var EQ=_(G3=>{"use strict";Object.defineProperty(G3,"__esModule",{value:!0});var r$e=Ie("path"),n$e=Xd(),kce=xp(),j3=class{constructor(e){this._settings=e,this._fsStatSettings=new n$e.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return r$e.resolve(this._settings.cwd,e)}_makeEntry(e,r){let s={name:r,path:r,dirent:kce.fs.createDirentFromStats(r,e)};return this._settings.stats&&(s.stats=e),s}_isFatalError(e){return!kce.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};G3.default=j3});var Y3=_(W3=>{"use strict";Object.defineProperty(W3,"__esModule",{value:!0});var i$e=Ie("stream"),s$e=Xd(),o$e=yQ(),a$e=EQ(),q3=class extends a$e.default{constructor(){super(...arguments),this._walkStream=o$e.walkStream,this._stat=s$e.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let s=e.map(this._getFullEntryPath,this),a=new i$e.PassThrough({objectMode:!0});a._write=(n,c,f)=>this._getEntry(s[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===s.length-1&&a.end(),f()}).catch(f);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(s.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,s)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):s(a))})}};W3.default=q3});var Qce=_(J3=>{"use strict";Object.defineProperty(J3,"__esModule",{value:!0});var l$e=yQ(),c$e=EQ(),u$e=Y3(),V3=class extends c$e.default{constructor(){super(...arguments),this._walkAsync=l$e.walk,this._readerStream=new u$e.default(this._settings)}dynamic(e,r){return new Promise((s,a)=>{this._walkAsync(e,r,(n,c)=>{n===null?s(c):a(n)})})}async static(e,r){let s=[],a=this._readerStream.static(e,r);return new Promise((n,c)=>{a.once("error",c),a.on("data",f=>s.push(f)),a.once("end",()=>n(s))})}};J3.default=V3});var Rce=_(z3=>{"use strict";Object.defineProperty(z3,"__esModule",{value:!0});var NB=xp(),K3=class{constructor(e,r,s){this._patterns=e,this._settings=r,this._micromatchOptions=s,this._storage=[],this._fillStorage()}_fillStorage(){for(let e of this._patterns){let r=this._getPatternSegments(e),s=this._splitSegmentsIntoSections(r);this._storage.push({complete:s.length<=1,pattern:e,segments:r,sections:s})}}_getPatternSegments(e){return NB.pattern.getPatternParts(e,this._micromatchOptions).map(s=>NB.pattern.isDynamicPattern(s,this._settings)?{dynamic:!0,pattern:s,patternRe:NB.pattern.makeRe(s,this._micromatchOptions)}:{dynamic:!1,pattern:s})}_splitSegmentsIntoSections(e){return NB.array.splitWhen(e,r=>r.dynamic&&NB.pattern.hasGlobStar(r.pattern))}};z3.default=K3});var Tce=_(X3=>{"use strict";Object.defineProperty(X3,"__esModule",{value:!0});var f$e=Rce(),Z3=class extends f$e.default{match(e){let r=e.split("/"),s=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>s);for(let n of a){let c=n.sections[0];if(!n.complete&&s>c.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}};X3.default=Z3});var Fce=_(e8=>{"use strict";Object.defineProperty(e8,"__esModule",{value:!0});var IQ=xp(),A$e=Tce(),$3=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,s){let a=this._getMatcher(r),n=this._getNegativePatternsRe(s);return c=>this._filter(e,c,a,n)}_getMatcher(e){return new A$e.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(IQ.pattern.isAffectDepthOfReadingPattern);return IQ.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,s,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=IQ.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,s)?!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 s=r.split("/").length;if(e==="")return s;let a=e.split("/").length;return s-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!IQ.pattern.matchAny(e,r)}};e8.default=$3});var Nce=_(r8=>{"use strict";Object.defineProperty(r8,"__esModule",{value:!0});var $d=xp(),t8=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let s=$d.pattern.convertPatternsToRe(e,this._micromatchOptions),a=$d.pattern.convertPatternsToRe(r,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0}));return n=>this._filter(n,s,a)}_filter(e,r,s){let a=$d.path.removeLeadingDotSegment(e.path);if(this._settings.unique&&this._isDuplicateEntry(a)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(a,s))return!1;let n=e.dirent.isDirectory(),c=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(a,s,n);return this._settings.unique&&c&&this._createIndexRecord(a),c}_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 s=$d.path.makeAbsolute(this._settings.cwd,e);return $d.pattern.matchAny(s,r)}_isMatchToPatterns(e,r,s){let a=$d.pattern.matchAny(e,r);return!a&&s?$d.pattern.matchAny(e+"/",r):a}};r8.default=t8});var Oce=_(i8=>{"use strict";Object.defineProperty(i8,"__esModule",{value:!0});var p$e=xp(),n8=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return p$e.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};i8.default=n8});var Mce=_(o8=>{"use strict";Object.defineProperty(o8,"__esModule",{value:!0});var Lce=xp(),s8=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Lce.path.makeAbsolute(this._settings.cwd,r),r=Lce.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};o8.default=s8});var CQ=_(l8=>{"use strict";Object.defineProperty(l8,"__esModule",{value:!0});var h$e=Ie("path"),g$e=Fce(),d$e=Nce(),m$e=Oce(),y$e=Mce(),a8=class{constructor(e){this._settings=e,this.errorFilter=new m$e.default(this._settings),this.entryFilter=new d$e.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new g$e.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new y$e.default(this._settings)}_getRootDirectory(e){return h$e.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}}};l8.default=a8});var Uce=_(u8=>{"use strict";Object.defineProperty(u8,"__esModule",{value:!0});var E$e=Qce(),I$e=CQ(),c8=class extends I$e.default{constructor(){super(...arguments),this._reader=new E$e.default(this._settings)}async read(e){let r=this._getRootDirectory(e),s=this._getReaderOptions(e);return(await this.api(r,e,s)).map(n=>s.transform(n))}api(e,r,s){return r.dynamic?this._reader.dynamic(e,s):this._reader.static(r.patterns,s)}};u8.default=c8});var _ce=_(A8=>{"use strict";Object.defineProperty(A8,"__esModule",{value:!0});var C$e=Ie("stream"),w$e=Y3(),B$e=CQ(),f8=class extends B$e.default{constructor(){super(...arguments),this._reader=new w$e.default(this._settings)}read(e){let r=this._getRootDirectory(e),s=this._getReaderOptions(e),a=this.api(r,e,s),n=new C$e.Readable({objectMode:!0,read:()=>{}});return a.once("error",c=>n.emit("error",c)).on("data",c=>n.emit("data",s.transform(c))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,s){return r.dynamic?this._reader.dynamic(e,s):this._reader.static(r.patterns,s)}};A8.default=f8});var Hce=_(h8=>{"use strict";Object.defineProperty(h8,"__esModule",{value:!0});var v$e=Xd(),S$e=yQ(),D$e=EQ(),p8=class extends D$e.default{constructor(){super(...arguments),this._walkSync=S$e.walkSync,this._statSync=v$e.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let s=[];for(let a of e){let n=this._getFullEntryPath(a),c=this._getEntry(n,a,r);c===null||!r.entryFilter(c)||s.push(c)}return s}_getEntry(e,r,s){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(s.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};h8.default=p8});var jce=_(d8=>{"use strict";Object.defineProperty(d8,"__esModule",{value:!0});var P$e=Hce(),b$e=CQ(),g8=class extends b$e.default{constructor(){super(...arguments),this._reader=new P$e.default(this._settings)}read(e){let r=this._getRootDirectory(e),s=this._getReaderOptions(e);return this.api(r,e,s).map(s.transform)}api(e,r,s){return r.dynamic?this._reader.dynamic(e,s):this._reader.static(r.patterns,s)}};d8.default=g8});var Gce=_(eI=>{"use strict";Object.defineProperty(eI,"__esModule",{value:!0});eI.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var $E=Ie("fs"),x$e=Ie("os"),k$e=Math.max(x$e.cpus().length,1);eI.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:$E.lstat,lstatSync:$E.lstatSync,stat:$E.stat,statSync:$E.statSync,readdir:$E.readdir,readdirSync:$E.readdirSync};var m8=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,k$e),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({},eI.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};eI.default=m8});var wQ=_((OLt,Wce)=>{"use strict";var qce=Wle(),Q$e=Uce(),R$e=_ce(),T$e=jce(),y8=Gce(),Qc=xp();async function E8(t,e){ju(t);let r=I8(t,Q$e.default,e),s=await Promise.all(r);return Qc.array.flatten(s)}(function(t){t.glob=t,t.globSync=e,t.globStream=r,t.async=t;function e(h,E){ju(h);let C=I8(h,T$e.default,E);return Qc.array.flatten(C)}t.sync=e;function r(h,E){ju(h);let C=I8(h,R$e.default,E);return Qc.stream.merge(C)}t.stream=r;function s(h,E){ju(h);let C=[].concat(h),S=new y8.default(E);return qce.generate(C,S)}t.generateTasks=s;function a(h,E){ju(h);let C=new y8.default(E);return Qc.pattern.isDynamicPattern(h,C)}t.isDynamicPattern=a;function n(h){return ju(h),Qc.path.escape(h)}t.escapePath=n;function c(h){return ju(h),Qc.path.convertPathToPattern(h)}t.convertPathToPattern=c;let f;(function(h){function E(S){return ju(S),Qc.path.escapePosixPath(S)}h.escapePath=E;function C(S){return ju(S),Qc.path.convertPosixPathToPattern(S)}h.convertPathToPattern=C})(f=t.posix||(t.posix={}));let p;(function(h){function E(S){return ju(S),Qc.path.escapeWindowsPath(S)}h.escapePath=E;function C(S){return ju(S),Qc.path.convertWindowsPathToPattern(S)}h.convertPathToPattern=C})(p=t.win32||(t.win32={}))})(E8||(E8={}));function I8(t,e,r){let s=[].concat(t),a=new y8.default(r),n=qce.generate(s,a),c=new e(a);return n.map(c.read,c)}function ju(t){if(![].concat(t).every(s=>Qc.string.isString(s)&&!Qc.string.isEmpty(s)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}Wce.exports=E8});var Nn={};Vt(Nn,{checksumFile:()=>vQ,checksumPattern:()=>SQ,makeHash:()=>cs});function cs(...t){let e=(0,BQ.createHash)("sha512"),r="";for(let s of t)typeof s=="string"?r+=s:s&&(r&&(e.update(r),r=""),e.update(s));return r&&e.update(r),e.digest("hex")}async function vQ(t,{baseFs:e,algorithm:r}={baseFs:ce,algorithm:"sha512"}){let s=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),c=(0,BQ.createHash)(r),f=0;for(;(f=await e.readPromise(s,n,0,65536))!==0;)c.update(f===65536?n:n.slice(0,f));return c.digest("hex")}finally{await e.closePromise(s)}}async function SQ(t,{cwd:e}){let s=(await(0,C8.default)(t,{cwd:fe.fromPortablePath(e),onlyDirectories:!0})).map(f=>`${f}/**/*`),a=await(0,C8.default)([t,...s],{cwd:fe.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async f=>{let p=[Buffer.from(f)],h=J.join(e,fe.toPortablePath(f)),E=await ce.lstatPromise(h);return E.isSymbolicLink()?p.push(Buffer.from(await ce.readlinkPromise(h))):E.isFile()&&p.push(await ce.readFilePromise(h)),p.join("\0")})),c=(0,BQ.createHash)("sha512");for(let f of n)c.update(f);return c.digest("hex")}var BQ,C8,I0=Ze(()=>{Dt();BQ=Ie("crypto"),C8=ut(wQ())});var G={};Vt(G,{allPeerRequests:()=>qB,areDescriptorsEqual:()=>zce,areIdentsEqual:()=>UB,areLocatorsEqual:()=>_B,areVirtualPackagesEquivalent:()=>j$e,bindDescriptor:()=>_$e,bindLocator:()=>H$e,convertDescriptorToLocator:()=>DQ,convertLocatorToDescriptor:()=>B8,convertPackageToLocator:()=>L$e,convertToIdent:()=>O$e,convertToManifestRange:()=>X$e,copyPackage:()=>LB,devirtualizeDescriptor:()=>MB,devirtualizeLocator:()=>rI,ensureDevirtualizedDescriptor:()=>M$e,ensureDevirtualizedLocator:()=>U$e,getIdentVendorPath:()=>P8,isPackageCompatible:()=>QQ,isVirtualDescriptor:()=>kp,isVirtualLocator:()=>Gu,makeDescriptor:()=>On,makeIdent:()=>Da,makeLocator:()=>Ws,makeRange:()=>xQ,parseDescriptor:()=>C0,parseFileStyleRange:()=>z$e,parseIdent:()=>Sa,parseLocator:()=>Qp,parseRange:()=>em,prettyDependent:()=>$4,prettyDescriptor:()=>ni,prettyIdent:()=>Xi,prettyLocator:()=>Yr,prettyLocatorNoColors:()=>X4,prettyRange:()=>iI,prettyReference:()=>jB,prettyResolution:()=>FB,prettyWorkspace:()=>GB,renamePackage:()=>v8,slugifyIdent:()=>w8,slugifyLocator:()=>nI,sortDescriptors:()=>sI,stringifyDescriptor:()=>al,stringifyIdent:()=>un,stringifyLocator:()=>ll,tryParseDescriptor:()=>HB,tryParseIdent:()=>Zce,tryParseLocator:()=>bQ,tryParseRange:()=>K$e,unwrapIdentFromScope:()=>eet,virtualizeDescriptor:()=>S8,virtualizePackage:()=>D8,wrapIdentIntoScope:()=>$$e});function Da(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:cs(t,e),scope:t,name:e}}function On(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:cs(t.identHash,e),range:e}}function Ws(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:cs(t.identHash,e),reference:e}}function O$e(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function DQ(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function B8(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function L$e(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function v8(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 LB(t){return v8(t,t)}function S8(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return On(t,`virtual:${e}#${t.range}`)}function D8(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return v8(t,Ws(t,`virtual:${e}#${t.reference}`))}function kp(t){return t.range.startsWith(OB)}function Gu(t){return t.reference.startsWith(OB)}function MB(t){if(!kp(t))throw new Error("Not a virtual descriptor");return On(t,t.range.replace(PQ,""))}function rI(t){if(!Gu(t))throw new Error("Not a virtual descriptor");return Ws(t,t.reference.replace(PQ,""))}function M$e(t){return kp(t)?On(t,t.range.replace(PQ,"")):t}function U$e(t){return Gu(t)?Ws(t,t.reference.replace(PQ,"")):t}function _$e(t,e){return t.range.includes("::")?t:On(t,`${t.range}::${tI.default.stringify(e)}`)}function H$e(t,e){return t.reference.includes("::")?t:Ws(t,`${t.reference}::${tI.default.stringify(e)}`)}function UB(t,e){return t.identHash===e.identHash}function zce(t,e){return t.descriptorHash===e.descriptorHash}function _B(t,e){return t.locatorHash===e.locatorHash}function j$e(t,e){if(!Gu(t))throw new Error("Invalid package type");if(!Gu(e))throw new Error("Invalid package type");if(!UB(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let s=e.dependencies.get(r.identHash);if(!s||!zce(r,s))return!1}return!0}function Sa(t){let e=Zce(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function Zce(t){let e=t.match(G$e);if(!e)return null;let[,r,s]=e;return Da(typeof r<"u"?r:null,s)}function C0(t,e=!1){let r=HB(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function HB(t,e=!1){let r=e?t.match(q$e):t.match(W$e);if(!r)return null;let[,s,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let c=typeof s<"u"?s:null,f=typeof n<"u"?n:"unknown";return On(Da(c,a),f)}function Qp(t,e=!1){let r=bQ(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function bQ(t,e=!1){let r=e?t.match(Y$e):t.match(V$e);if(!r)return null;let[,s,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let c=typeof s<"u"?s:null,f=typeof n<"u"?n:"unknown";return Ws(Da(c,a),f)}function em(t,e){let r=t.match(J$e);if(r===null)throw new Error(`Invalid range (${t})`);let s=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&s!==e.requireProtocol)throw new Error(`Invalid protocol (${s})`);if(e?.requireProtocol&&s===null)throw new Error(`Missing protocol (${s})`);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]),c=e?.parseSelector?tI.default.parse(n):n,f=typeof r[4]<"u"?tI.default.parse(r[4]):null;return{protocol:s,source:a,selector:c,params:f}}function K$e(t,e){try{return em(t,e)}catch{return null}}function z$e(t,{protocol:e}){let{selector:r,params:s}=em(t,{requireProtocol:e,requireBindings:!0});if(typeof s.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:Qp(s.locator,!0),path:r}}function Yce(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function Z$e(t){return t===null?!1:Object.entries(t).length>0}function xQ({protocol:t,source:e,selector:r,params:s}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${Yce(e)}#`),a+=Yce(r),Z$e(s)&&(a+=`::${tI.default.stringify(s)}`),a}function X$e(t){let{params:e,protocol:r,source:s,selector:a}=em(t);for(let n in e)n.startsWith("__")&&delete e[n];return xQ({protocol:r,source:s,params:e,selector:a})}function un(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function $$e(t,e){return t.scope?Da(e,`${t.scope}__${t.name}`):Da(e,t.name)}function eet(t,e){if(t.scope!==e)return t;let r=t.name.indexOf("__");if(r===-1)return Da(null,t.name);let s=t.name.slice(0,r),a=t.name.slice(r+2);return Da(s,a)}function al(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function ll(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function w8(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function nI(t){let{protocol:e,selector:r}=em(t.reference),s=e!==null?e.replace(tet,""):"exotic",a=Vce.default.valid(r),n=a!==null?`${s}-${a}`:`${s}`,c=10;return t.scope?`${w8(t)}-${n}-${t.locatorHash.slice(0,c)}`:`${w8(t)}-${n}-${t.locatorHash.slice(0,c)}`}function Xi(t,e){return e.scope?`${Ht(t,`@${e.scope}/`,ht.SCOPE)}${Ht(t,e.name,ht.NAME)}`:`${Ht(t,e.name,ht.NAME)}`}function kQ(t){if(t.startsWith(OB)){let e=kQ(t.substring(t.indexOf("#")+1)),r=t.substring(OB.length,OB.length+F$e);return`${e} [${r}]`}else return t.replace(ret,"?[...]")}function iI(t,e){return`${Ht(t,kQ(e),ht.RANGE)}`}function ni(t,e){return`${Xi(t,e)}${Ht(t,"@",ht.RANGE)}${iI(t,e.range)}`}function jB(t,e){return`${Ht(t,kQ(e),ht.REFERENCE)}`}function Yr(t,e){return`${Xi(t,e)}${Ht(t,"@",ht.REFERENCE)}${jB(t,e.reference)}`}function X4(t){return`${un(t)}@${kQ(t.reference)}`}function sI(t){return qs(t,[e=>un(e),e=>e.range])}function GB(t,e){return Xi(t,e.anchoredLocator)}function FB(t,e,r){let s=kp(e)?MB(e):e;return r===null?`${ni(t,s)} \u2192 ${Z4(t).Cross}`:s.identHash===r.identHash?`${ni(t,s)} \u2192 ${jB(t,r.reference)}`:`${ni(t,s)} \u2192 ${Yr(t,r)}`}function $4(t,e,r){return r===null?`${Yr(t,e)}`:`${Yr(t,e)} (via ${iI(t,r.range)})`}function P8(t){return`node_modules/${un(t)}`}function QQ(t,e){return t.conditions?N$e(t.conditions,r=>{let[,s,a]=r.match(Kce),n=e[s];return n?n.includes(a):!0}):!0}function qB(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 s of r.children.values())e.add(s);return e}var tI,Vce,Jce,OB,F$e,Kce,N$e,PQ,G$e,q$e,W$e,Y$e,V$e,J$e,tet,ret,Wo=Ze(()=>{tI=ut(Ie("querystring")),Vce=ut(Ai()),Jce=ut(dse());xc();I0();bc();Wo();OB="virtual:",F$e=5,Kce=/(os|cpu|libc)=([a-z0-9_-]+)/,N$e=(0,Jce.makeParser)(Kce);PQ=/^[^#]*#/;G$e=/^(?:@([^/]+?)\/)?([^@/]+)$/;q$e=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,W$e=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Y$e=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,V$e=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;J$e=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;tet=/:$/;ret=/\?.*/});var Xce,$ce=Ze(()=>{Wo();Xce={hooks:{reduceDependency:(t,e,r,s,{resolver:a,resolveOptions:n})=>{for(let{pattern:c,reference:f}of e.topLevelWorkspace.manifest.resolutions){if(c.from&&(c.from.fullName!==un(r)||e.configuration.normalizeLocator(Ws(Sa(c.from.fullName),c.from.description??r.reference)).locatorHash!==r.locatorHash)||c.descriptor.fullName!==un(t)||e.configuration.normalizeDependency(On(Qp(c.descriptor.fullName),c.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(On(t,f)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let s=GB(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${s}: ${n}`),reportError:(a,n)=>e.reportError(a,`${s}: ${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 s of r.errors)e.reportWarning(57,s.message)}}}});var Ei,tm=Ze(()=>{Ei=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,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){return[s.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let s=r.project.getWorkspaceByCwd(e.reference.slice(t.protocol.length));return{...e,version:s.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...s.manifest.dependencies,...s.manifest.devDependencies])),peerDependencies:new Map([...s.manifest.peerDependencies]),dependenciesMeta:s.manifest.dependenciesMeta,peerDependenciesMeta:s.manifest.peerDependenciesMeta,bin:s.manifest.bin}}}});var Fr={};Vt(Fr,{SemVer:()=>iue.SemVer,clean:()=>iet,getComparator:()=>rue,mergeComparators:()=>b8,satisfiesWithPrereleases:()=>Xf,simplifyRanges:()=>x8,stringifyComparator:()=>nue,validRange:()=>cl});function Xf(t,e,r=!1){if(!t)return!1;let s=`${e}${r}`,a=eue.get(s);if(typeof a>"u")try{a=new Rp.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{eue.set(s,a||null)}else if(a===null)return!1;let n;try{n=new Rp.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(c=>{for(let f of c)f.semver.prerelease&&(f.semver.prerelease=[]);return c.every(f=>f.test(n))}))}function cl(t){if(t.indexOf(":")!==-1)return null;let e=tue.get(t);if(typeof e<"u")return e;try{e=new Rp.default.Range(t)}catch{e=null}return tue.set(t,e),e}function iet(t){let e=net.exec(t);return e?e[1]:null}function rue(t){if(t.semver===Rp.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 b8(t){if(t.length===0)return null;let e=null,r=null;for(let s of t){if(s.gt){let a=e!==null?Rp.default.compare(s.gt[1],e[1]):null;(a===null||a>0||a===0&&s.gt[0]===">")&&(e=s.gt)}if(s.lt){let a=r!==null?Rp.default.compare(s.lt[1],r[1]):null;(a===null||a<0||a===0&&s.lt[0]==="<")&&(r=s.lt)}}if(e&&r){let s=Rp.default.compare(e[1],r[1]);if(s===0&&(e[0]===">"||r[0]==="<")||s>0)return null}return{gt:e,lt:r}}function nue(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 x8(t){let e=t.map(set).map(s=>cl(s).set.map(a=>a.map(n=>rue(n)))),r=e.shift().map(s=>b8(s)).filter(s=>s!==null);for(let s of e){let a=[];for(let n of r)for(let c of s){let f=b8([n,...c]);f!==null&&a.push(f)}r=a}return r.length===0?null:r.map(s=>nue(s)).join(" || ")}function set(t){let e=t.split("||");if(e.length>1){let r=new Set;for(let s of e)e.some(a=>a!==s&&Rp.default.subset(s,a))||r.add(s);if(r.size{Rp=ut(Ai()),iue=ut(Ai()),eue=new Map;tue=new Map;net=/^(?:[\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 sue(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function oue(t){return t.charCodeAt(0)===65279?t.slice(1):t}function Pa(t){return t.replace(/\\/g,"/")}function RQ(t,{yamlCompatibilityMode:e}){return e?q4(t):typeof t>"u"||typeof t=="boolean"?t:null}function aue(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let s=r%2===0?"":"!",a=e.slice(r);return`${s}${t}=${a}`}function k8(t,e){return e.length===1?aue(t,e[0]):`(${e.map(r=>aue(t,r)).join(" | ")})`}var lue,Ut,oI=Ze(()=>{Dt();wc();lue=ut(Ai());tm();bc();Tp();Wo();Ut=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 Yn}={}){let s=J.join(e,"package.json");try{return await t.fromFile(s,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let s=await t.tryFind(e,{baseFs:r});if(s===null)throw new Error("Manifest not found");return s}static async fromFile(e,{baseFs:r=new Yn}={}){let s=new t;return await s.loadFile(e,{baseFs:r}),s}static fromText(e){let r=new t;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(oue(e)||"{}")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(r),this.indent=sue(e)}async loadFile(e,{baseFs:r=new Yn}){let s=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(oue(s)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=sue(s)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let s=[];if(this.name=null,typeof e.name=="string")try{this.name=Sa(e.name)}catch{s.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 c of e.os)typeof c!="string"?s.push(new Error("Parsing failed for the 'os' field")):n.push(c)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let c of e.cpu)typeof c!="string"?s.push(new Error("Parsing failed for the 'cpu' field")):n.push(c)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let c of e.libc)typeof c!="string"?s.push(new Error("Parsing failed for the 'libc' field")):n.push(c)}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=Pa(e.main):this.main=null,typeof e.module=="string"?this.module=Pa(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=Pa(e.browser);else{this.browser=new Map;for(let[n,c]of Object.entries(e.browser))this.browser.set(Pa(n),typeof c=="string"?Pa(c):c)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?s.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,Pa(e.bin)):s.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,c]of Object.entries(e.bin)){if(typeof c!="string"||c.trim()===""){s.push(new Error(`Invalid bin definition for '${n}'`));continue}let f=Sa(n);this.bin.set(f.name,Pa(c))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,c]of Object.entries(e.scripts)){if(typeof c!="string"){s.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,c)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,c]of Object.entries(e.dependencies)){if(typeof c!="string"){s.push(new Error(`Invalid dependency range for '${n}'`));continue}let f;try{f=Sa(n)}catch{s.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=On(f,c);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,c]of Object.entries(e.devDependencies)){if(typeof c!="string"){s.push(new Error(`Invalid dependency range for '${n}'`));continue}let f;try{f=Sa(n)}catch{s.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=On(f,c);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,c]of Object.entries(e.peerDependencies)){let f;try{f=Sa(n)}catch{s.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof c!="string"||!c.startsWith(Ei.protocol)&&!cl(c))&&(s.push(new Error(`Invalid dependency range for '${n}'`)),c="*");let p=On(f,c);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&s.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"){s.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,c]of Object.entries(e.dependenciesMeta)){if(typeof c!="object"||c===null){s.push(new Error(`Invalid meta field for '${n}`));continue}let f=C0(n),p=this.ensureDependencyMeta(f),h=RQ(c.built,{yamlCompatibilityMode:r});if(h===null){s.push(new Error(`Invalid built meta field for '${n}'`));continue}let E=RQ(c.optional,{yamlCompatibilityMode:r});if(E===null){s.push(new Error(`Invalid optional meta field for '${n}'`));continue}let C=RQ(c.unplugged,{yamlCompatibilityMode:r});if(C===null){s.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:E,unplugged:C})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,c]of Object.entries(e.peerDependenciesMeta)){if(typeof c!="object"||c===null){s.push(new Error(`Invalid meta field for '${n}'`));continue}let f=C0(n),p=this.ensurePeerDependencyMeta(f),h=RQ(c.optional,{yamlCompatibilityMode:r});if(h===null){s.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,c]of Object.entries(e.resolutions)){if(typeof c!="string"){s.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:px(n),reference:c})}catch(f){s.push(f);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){s.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=Pa(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=Pa(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=Pa(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,c]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(Pa(n),typeof c=="string"?Pa(c):c)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.provenance=="boolean"&&(this.publishConfig.provenance=e.publishConfig.provenance),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,Pa(e.publishConfig.bin)]]):s.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,c]of Object.entries(e.publishConfig.bin)){if(typeof c!="string"){s.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,Pa(c))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){s.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add(Pa(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:s.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:s.push(new Error("Invalid selfReferences definition, must be a boolean value")):s.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,c]of Object.entries(e.optionalDependencies)){if(typeof c!="string"){s.push(new Error(`Invalid dependency range for '${n}'`));continue}let f;try{f=Sa(n)}catch{s.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=On(f,c);this.dependencies.set(p.identHash,p);let h=On(f,"unknown"),E=this.ensureDependencyMeta(h);Object.assign(E,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=s}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(k8("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(k8("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(k8("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!lue.default.valid(e.range))throw new Error(`Invalid meta field range for '${al(e)}'`);let r=un(e),s=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(s);return n||a.set(s,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${al(e)}'`);let r=un(e),s=this.peerDependenciesMeta.get(r);return s||this.peerDependenciesMeta.set(r,s={}),s}setRawField(e,r,{after:s=[]}={}){let a=new Set(s.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,c=this.raw={},f=!1;for(let p of Object.keys(n))c[p]=n[p],f||(a.delete(p),a.size===0&&(c[e]=r,f=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=un(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(c=>({[c]:n.get(c)}))))}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 s=[],a=[];for(let n of this.dependencies.values()){let c=this.dependenciesMeta.get(un(n)),f=!1;if(r&&c){let p=c.get(null);p&&p.optional&&(f=!0)}f?a.push(n):s.push(n)}s.length>0?e.dependencies=Object.assign({},...sI(s).map(n=>({[un(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...sI(a).map(n=>({[un(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...sI(this.devDependencies.values()).map(n=>({[un(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...sI(this.peerDependencies.values()).map(n=>({[un(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,c]of qs(this.dependenciesMeta.entries(),([f,p])=>f))for(let[f,p]of qs(c.entries(),([h,E])=>h!==null?`0${h}`:"1")){let h=f!==null?al(On(Sa(n),f)):n,E={...p};r&&f===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({},...qs(this.peerDependenciesMeta.entries(),([n,c])=>n).map(([n,c])=>({[n]:c}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:c})=>({[hx(n)]:c}))):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,c]of this.scripts.entries())e.scripts[n]=c}else delete e.scripts;return e}}});function aet(t){return typeof t.reportCode<"u"}var cue,uue,oet,jt,Ao,Rc=Ze(()=>{ql();cue=Ie("stream"),uue=Ie("string_decoder"),oet=15,jt=class extends Error{constructor(r,s,a){super(s);this.reportExtra=a;this.reportCode=r}};Ao=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,s,a=new Promise(p=>{s=p}),n=p=>{let h=s;a=new Promise(E=>{s=E}),r=p,h()},c=(p=0)=>{n(r+1)},f=async function*(){for(;r{r=c}),a=k4(c=>{let f=r;s=new Promise(p=>{r=p}),e=c,f()},1e3/oet),n=async function*(){for(;;)await s,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let s=this.reportProgress(e);try{return await r(e)}finally{s.stop()}}startProgressSync(e,r){let s=this.reportProgress(e);try{return r(e)}finally{s.stop()}}reportInfoOnce(e,r,s){let a=s&&s.key?s.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),s?.reportExtra?.(this))}reportWarningOnce(e,r,s){let a=s&&s.key?s.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),s?.reportExtra?.(this))}reportErrorOnce(e,r,s){let a=s&&s.key?s.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),s?.reportExtra?.(this))}reportExceptionOnce(e){aet(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 cue.PassThrough,s=new uue.StringDecoder,a="";return r.on("data",n=>{let c=s.write(n),f;do if(f=c.indexOf(` -`),f!==-1){let p=a+c.substring(0,f);c=c.substring(f+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(f!==-1);a+=c}),r.on("end",()=>{let n=s.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var aI,Q8=Ze(()=>{Rc();Wo();aI=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 s=this.fetchers.find(a=>a.supports(e,r));return s||null}getFetcher(e,r){let s=this.fetchers.find(a=>a.supports(e,r));if(!s)throw new jt(11,`${Yr(r.project.configuration,e)} isn't supported by any available fetcher`);return s}}});var rm,R8=Ze(()=>{Wo();rm=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,s){return this.getResolverByDescriptor(e,s).bindDescriptor(e,r,s)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,s){return await this.getResolverByDescriptor(e,s).getCandidates(e,r,s)}async getSatisfying(e,r,s,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,s,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let s=this.resolvers.find(a=>a.supportsDescriptor(e,r));return s||null}getResolverByDescriptor(e,r){let s=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!s)throw new Error(`${ni(r.project.configuration,e)} isn't supported by any available resolver`);return s}tryResolverByLocator(e,r){let s=this.resolvers.find(a=>a.supportsLocator(e,r));return s||null}getResolverByLocator(e,r){let s=this.resolvers.find(a=>a.supportsLocator(e,r));if(!s)throw new Error(`${Yr(r.project.configuration,e)} isn't supported by any available resolver`);return s}}});var lI,T8=Ze(()=>{Dt();Wo();lI=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let s=e.reference.indexOf("#");if(s===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(s+1),n=Ws(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let s=e.reference.indexOf("#");if(s===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(s+1),n=Ws(e,a),c=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,c,r)}getLocatorFilename(e){return nI(e)}async ensureVirtualLink(e,r,s){let a=r.packageFs.getRealPath(),n=s.project.configuration.get("virtualFolder"),c=this.getLocatorFilename(e),f=uo.makeVirtualPath(n,c,a),p=new _f(f,{baseFs:r.packageFs,pathUtils:J});return{...r,packageFs:p}}}});var TQ,fue=Ze(()=>{TQ=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,s){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,s){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,s,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 cI,F8=Ze(()=>{Dt();tm();cI=class{supports(e){return!!e.reference.startsWith(Ei.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let s=this.getWorkspace(e,r).cwd;return{packageFs:new Sn(s),prefixPath:vt.dot,localPath:s}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Ei.protocol.length))}}});function WB(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Aue(t){return typeof t>"u"?3:WB(t)?0:Array.isArray(t)?1:2}function L8(t,e){return Object.hasOwn(t,e)}function uet(t){return WB(t)&&L8(t,"onConflict")&&typeof t.onConflict=="string"}function fet(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!uet(t))return{onConflict:"default",value:t};if(L8(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function pue(t,e){let r=WB(t)&&L8(t,e)?t[e]:void 0;return fet(r)}function uI(t,e){return[t,e,hue]}function M8(t){return Array.isArray(t)?t[2]===hue:!1}function N8(t,e){if(WB(t)){let r={};for(let s of Object.keys(t))r[s]=N8(t[s],e);return uI(e,r)}return Array.isArray(t)?uI(e,t.map(r=>N8(r,e))):uI(e,t)}function O8(t,e,r,s,a){let n,c=[],f=a,p=0;for(let E=a-1;E>=s;--E){let[C,S]=t[E],{onConflict:b,value:I}=pue(S,r),T=Aue(I);if(T!==3){if(n??=T,T!==n||b==="hardReset"){p=f;break}if(T===2)return uI(C,I);if(c.unshift([C,I]),b==="reset"){p=E;break}b==="extend"&&E===s&&(s=0),f=E}}if(typeof n>"u")return null;let h=c.map(([E])=>E).join(", ");switch(n){case 1:return uI(h,new Array().concat(...c.map(([E,C])=>C.map(S=>N8(S,E)))));case 0:{let E=Object.assign({},...c.map(([,T])=>T)),C=Object.keys(E),S={},b=t.map(([T,N])=>[T,pue(N,r).value]),I=cet(b,([T,N])=>{let U=Aue(N);return U!==0&&U!==3});if(I!==-1){let T=b.slice(I+1);for(let N of C)S[N]=O8(T,e,N,0,T.length)}else for(let T of C)S[T]=O8(b,e,T,p,b.length);return uI(h,S)}default:throw new Error("Assertion failed: Non-extendable value type")}}function gue(t){return O8(t.map(([e,r])=>[e,{".":r}]),[],".",0,t.length)}function YB(t){return M8(t)?t[1]:t}function FQ(t){let e=M8(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>FQ(r));if(WB(e)){let r={};for(let[s,a]of Object.entries(e))r[s]=FQ(a);return r}return e}function U8(t){return M8(t)?t[0]:null}var cet,hue,due=Ze(()=>{cet=(t,e,r)=>{let s=[...t];return s.reverse(),s.findIndex(e,r)};hue=Symbol()});var NQ={};Vt(NQ,{getDefaultGlobalFolder:()=>H8,getHomeFolder:()=>fI,isFolderInside:()=>j8});function H8(){if(process.platform==="win32"){let t=fe.toPortablePath(process.env.LOCALAPPDATA||fe.join((0,_8.homedir)(),"AppData","Local"));return J.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=fe.toPortablePath(process.env.XDG_DATA_HOME);return J.resolve(t,"yarn/berry")}return J.resolve(fI(),".yarn/berry")}function fI(){return fe.toPortablePath((0,_8.homedir)()||"/usr/local/share")}function j8(t,e){let r=J.relative(e,t);return r&&!r.startsWith("..")&&!J.isAbsolute(r)}var _8,OQ=Ze(()=>{Dt();_8=Ie("os")});var Eue=_((uMt,yue)=>{"use strict";var G8=Ie("https"),q8=Ie("http"),{URL:mue}=Ie("url"),W8=class extends q8.Agent{constructor(e){let{proxy:r,proxyRequestOptions:s,...a}=e;super(a),this.proxy=typeof r=="string"?new mue(r):r,this.proxyRequestOptions=s||{}}createConnection(e,r){let s={...this.proxyRequestOptions,method:"CONNECT",host:this.proxy.hostname,port:this.proxy.port,path:`${e.host}:${e.port}`,setHost:!1,headers:{...this.proxyRequestOptions.headers,connection:this.keepAlive?"keep-alive":"close",host:`${e.host}:${e.port}`},agent:!1,timeout:e.timeout||0};if(this.proxy.username||this.proxy.password){let n=Buffer.from(`${decodeURIComponent(this.proxy.username||"")}:${decodeURIComponent(this.proxy.password||"")}`).toString("base64");s.headers["proxy-authorization"]=`Basic ${n}`}this.proxy.protocol==="https:"&&(s.servername=this.proxy.hostname);let a=(this.proxy.protocol==="http:"?q8:G8).request(s);a.once("connect",(n,c,f)=>{a.removeAllListeners(),c.removeAllListeners(),n.statusCode===200?r(null,c):(c.destroy(),r(new Error(`Bad response: ${n.statusCode}`),null))}),a.once("timeout",()=>{a.destroy(new Error("Proxy timeout"))}),a.once("error",n=>{a.removeAllListeners(),r(n,null)}),a.end()}},Y8=class extends G8.Agent{constructor(e){let{proxy:r,proxyRequestOptions:s,...a}=e;super(a),this.proxy=typeof r=="string"?new mue(r):r,this.proxyRequestOptions=s||{}}createConnection(e,r){let s={...this.proxyRequestOptions,method:"CONNECT",host:this.proxy.hostname,port:this.proxy.port,path:`${e.host}:${e.port}`,setHost:!1,headers:{...this.proxyRequestOptions.headers,connection:this.keepAlive?"keep-alive":"close",host:`${e.host}:${e.port}`},agent:!1,timeout:e.timeout||0};if(this.proxy.username||this.proxy.password){let n=Buffer.from(`${decodeURIComponent(this.proxy.username||"")}:${decodeURIComponent(this.proxy.password||"")}`).toString("base64");s.headers["proxy-authorization"]=`Basic ${n}`}this.proxy.protocol==="https:"&&(s.servername=this.proxy.hostname);let a=(this.proxy.protocol==="http:"?q8:G8).request(s);a.once("connect",(n,c,f)=>{if(a.removeAllListeners(),c.removeAllListeners(),n.statusCode===200){let p=super.createConnection({...e,socket:c});r(null,p)}else c.destroy(),r(new Error(`Bad response: ${n.statusCode}`),null)}),a.once("timeout",()=>{a.destroy(new Error("Proxy timeout"))}),a.once("error",n=>{a.removeAllListeners(),r(n,null)}),a.end()}};yue.exports={HttpProxyAgent:W8,HttpsProxyAgent:Y8}});var V8,Iue,Cue,wue=Ze(()=>{V8=ut(Eue(),1),Iue=V8.default.HttpProxyAgent,Cue=V8.default.HttpsProxyAgent});var Np=_((Fp,LQ)=>{"use strict";Object.defineProperty(Fp,"__esModule",{value:!0});var Bue=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function pet(t){return Bue.includes(t)}var het=["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",...Bue];function get(t){return het.includes(t)}var det=["null","undefined","string","number","bigint","boolean","symbol"];function met(t){return det.includes(t)}function AI(t){return e=>typeof e===t}var{toString:vue}=Object.prototype,VB=t=>{let e=vue.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&Pe.domElement(t))return"HTMLElement";if(get(e))return e},pi=t=>e=>VB(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=VB(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=AI("undefined");Pe.string=AI("string");var yet=AI("number");Pe.number=t=>yet(t)&&!Pe.nan(t);Pe.bigint=AI("bigint");Pe.function_=AI("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=AI("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,s,a;return(a=(s=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||s===void 0?void 0:s.call(r,t))!==null&&a!==void 0?a:!1};Pe.blob=t=>pi("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=>pi("Promise")(t);var Eet=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)||Eet(t);Pe.generatorFunction=pi("GeneratorFunction");Pe.asyncGeneratorFunction=t=>VB(t)==="AsyncGeneratorFunction";Pe.asyncFunction=t=>VB(t)==="AsyncFunction";Pe.boundFunction=t=>Pe.function_(t)&&!t.hasOwnProperty("prototype");Pe.regExp=pi("RegExp");Pe.date=pi("Date");Pe.error=pi("Error");Pe.map=t=>pi("Map")(t);Pe.set=t=>pi("Set")(t);Pe.weakMap=t=>pi("WeakMap")(t);Pe.weakSet=t=>pi("WeakSet")(t);Pe.int8Array=pi("Int8Array");Pe.uint8Array=pi("Uint8Array");Pe.uint8ClampedArray=pi("Uint8ClampedArray");Pe.int16Array=pi("Int16Array");Pe.uint16Array=pi("Uint16Array");Pe.int32Array=pi("Int32Array");Pe.uint32Array=pi("Uint32Array");Pe.float32Array=pi("Float32Array");Pe.float64Array=pi("Float64Array");Pe.bigInt64Array=pi("BigInt64Array");Pe.bigUint64Array=pi("BigUint64Array");Pe.arrayBuffer=pi("ArrayBuffer");Pe.sharedArrayBuffer=pi("SharedArrayBuffer");Pe.dataView=pi("DataView");Pe.enumCase=(t,e)=>Object.values(e).includes(t);Pe.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;Pe.urlInstance=t=>pi("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)||met(typeof t);Pe.integer=t=>Number.isInteger(t);Pe.safeInteger=t=>Number.isSafeInteger(t);Pe.plainObject=t=>{if(vue.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};Pe.typedArray=t=>pet(VB(t));var Iet=t=>Pe.safeInteger(t)&&t>=0;Pe.arrayLike=t=>!Pe.nullOrUndefined(t)&&!Pe.function_(t)&&Iet(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 Cet=1,wet=["innerHTML","ownerDocument","style","attributes","nodeValue"];Pe.domElement=t=>Pe.object(t)&&t.nodeType===Cet&&Pe.string(t.nodeName)&&!Pe.plainObject(t)&&wet.every(e=>e in t);Pe.observable=t=>{var e,r,s,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(s=t)["@@observable"])===null||a===void 0?void 0:a.call(s)):!1};Pe.nodeStream=t=>Pe.object(t)&&Pe.function_(t.pipe)&&!Pe.observable(t);Pe.infinite=t=>t===1/0||t===-1/0;var Sue=t=>e=>Pe.integer(e)&&Math.abs(e%2)===t;Pe.evenInteger=Sue(0);Pe.oddInteger=Sue(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 Bet=t=>Pe.string(t)&&!/\S/.test(t);Pe.emptyStringOrWhitespace=t=>Pe.emptyString(t)||Bet(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=>pi("FormData")(t);Pe.urlSearchParams=t=>pi("URLSearchParams")(t);var Due=(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(s=>Due(Array.prototype.some,s,e));Pe.all=(t,...e)=>Due(Array.prototype.every,t,e);var _t=(t,e,r,s={})=>{if(!t){let{multipleValues:a}=s,n=a?`received values of types ${[...new Set(r.map(c=>`\`${Pe(c)}\``))].join(", ")}`:`received value of type \`${Pe(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Fp.assert={undefined:t=>_t(Pe.undefined(t),"undefined",t),string:t=>_t(Pe.string(t),"string",t),number:t=>_t(Pe.number(t),"number",t),bigint:t=>_t(Pe.bigint(t),"bigint",t),function_:t=>_t(Pe.function_(t),"Function",t),null_:t=>_t(Pe.null_(t),"null",t),class_:t=>_t(Pe.class_(t),"Class",t),boolean:t=>_t(Pe.boolean(t),"boolean",t),symbol:t=>_t(Pe.symbol(t),"symbol",t),numericString:t=>_t(Pe.numericString(t),"string with a number",t),array:(t,e)=>{_t(Pe.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>_t(Pe.buffer(t),"Buffer",t),blob:t=>_t(Pe.blob(t),"Blob",t),nullOrUndefined:t=>_t(Pe.nullOrUndefined(t),"null or undefined",t),object:t=>_t(Pe.object(t),"Object",t),iterable:t=>_t(Pe.iterable(t),"Iterable",t),asyncIterable:t=>_t(Pe.asyncIterable(t),"AsyncIterable",t),generator:t=>_t(Pe.generator(t),"Generator",t),asyncGenerator:t=>_t(Pe.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>_t(Pe.nativePromise(t),"native Promise",t),promise:t=>_t(Pe.promise(t),"Promise",t),generatorFunction:t=>_t(Pe.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>_t(Pe.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>_t(Pe.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>_t(Pe.boundFunction(t),"Function",t),regExp:t=>_t(Pe.regExp(t),"RegExp",t),date:t=>_t(Pe.date(t),"Date",t),error:t=>_t(Pe.error(t),"Error",t),map:t=>_t(Pe.map(t),"Map",t),set:t=>_t(Pe.set(t),"Set",t),weakMap:t=>_t(Pe.weakMap(t),"WeakMap",t),weakSet:t=>_t(Pe.weakSet(t),"WeakSet",t),int8Array:t=>_t(Pe.int8Array(t),"Int8Array",t),uint8Array:t=>_t(Pe.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>_t(Pe.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>_t(Pe.int16Array(t),"Int16Array",t),uint16Array:t=>_t(Pe.uint16Array(t),"Uint16Array",t),int32Array:t=>_t(Pe.int32Array(t),"Int32Array",t),uint32Array:t=>_t(Pe.uint32Array(t),"Uint32Array",t),float32Array:t=>_t(Pe.float32Array(t),"Float32Array",t),float64Array:t=>_t(Pe.float64Array(t),"Float64Array",t),bigInt64Array:t=>_t(Pe.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>_t(Pe.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>_t(Pe.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>_t(Pe.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>_t(Pe.dataView(t),"DataView",t),enumCase:(t,e)=>_t(Pe.enumCase(t,e),"EnumCase",t),urlInstance:t=>_t(Pe.urlInstance(t),"URL",t),urlString:t=>_t(Pe.urlString(t),"string with a URL",t),truthy:t=>_t(Pe.truthy(t),"truthy",t),falsy:t=>_t(Pe.falsy(t),"falsy",t),nan:t=>_t(Pe.nan(t),"NaN",t),primitive:t=>_t(Pe.primitive(t),"primitive",t),integer:t=>_t(Pe.integer(t),"integer",t),safeInteger:t=>_t(Pe.safeInteger(t),"integer",t),plainObject:t=>_t(Pe.plainObject(t),"plain object",t),typedArray:t=>_t(Pe.typedArray(t),"TypedArray",t),arrayLike:t=>_t(Pe.arrayLike(t),"array-like",t),domElement:t=>_t(Pe.domElement(t),"HTMLElement",t),observable:t=>_t(Pe.observable(t),"Observable",t),nodeStream:t=>_t(Pe.nodeStream(t),"Node.js Stream",t),infinite:t=>_t(Pe.infinite(t),"infinite number",t),emptyArray:t=>_t(Pe.emptyArray(t),"empty array",t),nonEmptyArray:t=>_t(Pe.nonEmptyArray(t),"non-empty array",t),emptyString:t=>_t(Pe.emptyString(t),"empty string",t),emptyStringOrWhitespace:t=>_t(Pe.emptyStringOrWhitespace(t),"empty string or whitespace",t),nonEmptyString:t=>_t(Pe.nonEmptyString(t),"non-empty string",t),nonEmptyStringAndNotWhitespace:t=>_t(Pe.nonEmptyStringAndNotWhitespace(t),"non-empty string and not whitespace",t),emptyObject:t=>_t(Pe.emptyObject(t),"empty object",t),nonEmptyObject:t=>_t(Pe.nonEmptyObject(t),"non-empty object",t),emptySet:t=>_t(Pe.emptySet(t),"empty set",t),nonEmptySet:t=>_t(Pe.nonEmptySet(t),"non-empty set",t),emptyMap:t=>_t(Pe.emptyMap(t),"empty map",t),nonEmptyMap:t=>_t(Pe.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>_t(Pe.propertyKey(t),"PropertyKey",t),formData:t=>_t(Pe.formData(t),"FormData",t),urlSearchParams:t=>_t(Pe.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>_t(Pe.evenInteger(t),"even integer",t),oddInteger:t=>_t(Pe.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>_t(Pe.directInstanceOf(t,e),"T",t),inRange:(t,e)=>_t(Pe.inRange(t,e),"in range",t),any:(t,...e)=>_t(Pe.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>_t(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(Fp.assert,{class:{value:Fp.assert.class_},function:{value:Fp.assert.function_},null:{value:Fp.assert.null_}});Fp.default=Pe;LQ.exports=Pe;LQ.exports.default=Pe;LQ.exports.assert=Fp.assert});var Pue=_((AMt,J8)=>{"use strict";var MQ=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},UQ=class t{static fn(e){return(...r)=>new t((s,a,n)=>{r.push(n),e(...r).then(s,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,s)=>{this._reject=s;let a=f=>{this._isPending=!1,r(f)},n=f=>{this._isPending=!1,s(f)},c=f=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(f)};return Object.defineProperties(c,{shouldReject:{get:()=>this._rejectOnCancel,set:f=>{this._rejectOnCancel=f}}}),e(a,n,c)})}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 MQ(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(UQ.prototype,Promise.prototype);J8.exports=UQ;J8.exports.CancelError=MQ});var bue=_((z8,Z8)=>{"use strict";Object.defineProperty(z8,"__esModule",{value:!0});function vet(t){return t.encrypted}var K8=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let s=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",c=()=>{s&&r.connect(),vet(t)&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?c():t.connecting?t.once("connect",c):t.destroyed&&n&&r.close(t._hadError)};z8.default=K8;Z8.exports=K8;Z8.exports.default=K8});var xue=_(($8,eH)=>{"use strict";Object.defineProperty($8,"__esModule",{value:!0});var Det=bue(),Pet=Number(process.versions.node.split(".")[0]),X8=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=c=>{let f=c.emit.bind(c);c.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,c.emit=f),f(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||Pet>=13)&&(e.phases.total=Date.now()-e.start)});let s=c=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let f=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};c.prependOnceListener("lookup",f),Det.default(c,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(c.removeListener("lookup",f),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?s(t.socket):t.prependOnceListener("socket",s);let a=()=>{var c;e.upload=Date.now(),e.phases.request=e.upload-(c=e.secureConnect,c??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",c=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,c.timings=e,r(c),c.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};$8.default=X8;eH.exports=X8;eH.exports.default=X8});var Oue=_((pMt,nH)=>{"use strict";var{V4MAPPED:bet,ADDRCONFIG:xet,ALL:Nue,promises:{Resolver:kue},lookup:ket}=Ie("dns"),{promisify:tH}=Ie("util"),Qet=Ie("os"),pI=Symbol("cacheableLookupCreateConnection"),rH=Symbol("cacheableLookupInstance"),Que=Symbol("expires"),Ret=typeof Nue=="number",Rue=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},Tet=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},Tue=()=>{let t=!1,e=!1;for(let r of Object.values(Qet.networkInterfaces()))for(let s of r)if(!s.internal&&(s.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},Fet=t=>Symbol.iterator in t,Fue={ttl:!0},Net={all:!0},_Q=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:s=3600,errorTtl:a=.15,resolver:n=new kue,lookup:c=ket}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=tH(c),this._resolver instanceof kue?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=tH(this._resolver.resolve4.bind(this._resolver)),this._resolve6=tH(this._resolver.resolve6.bind(this._resolver))),this._iface=Tue(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,s<1)this._fallback=!1;else{this._fallback=!0;let f=setInterval(()=>{this._hostnamesToFallback.clear()},s*1e3);f.unref&&f.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,s){if(typeof r=="function"?(s=r,r={}):typeof r=="number"&&(r={family:r}),!s)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?s(null,a):s(null,a.address,a.family,a.expires,a.ttl)},s)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let s=await this.query(e);if(r.family===6){let a=s.filter(n=>n.family===6);r.hints&bet&&(Ret&&r.hints&Nue||a.length===0)?Tet(s):s=a}else r.family===4&&(s=s.filter(a=>a.family===4));if(r.hints&xet){let{_iface:a}=this;s=s.filter(n=>n.family===6?a.has6:a.has4)}if(s.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?s:s[0]}async query(e){let r=await this._cache.get(e);if(!r){let s=this._pending[e];if(s)r=await s;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(s=>({...s})),r}async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code==="ENODATA"||E.code==="ENOTFOUND")return[];throw E}},[s,a]=await Promise.all([this._resolve4(e,Fue),this._resolve6(e,Fue)].map(h=>r(h))),n=0,c=0,f=0,p=Date.now();for(let h of s)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,c=Math.max(c,h.ttl);return s.length>0?a.length>0?f=Math.min(n,c):f=n:f=c,{entries:[...s,...a],cacheTtl:f}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,s){if(this.maxTtl>0&&s>0){s=Math.min(s,this.maxTtl)*1e3,r[Que]=Date.now()+s;try{await this._cache.set(e,r,s)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}Fet(this._cache)&&this._tick(s)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,Net);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 s=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,s),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 s=1/0,a=Date.now();for(let[n,c]of this._cache){let f=c[Que];a>=f?this._cache.delete(n):f("lookup"in r||(r.lookup=this.lookup),e[pI](r,s))}uninstall(e){if(Rue(e),e[pI]){if(e[rH]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[pI],delete e[pI],delete e[rH]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=Tue(),(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()}};nH.exports=_Q;nH.exports.default=_Q});var Uue=_((hMt,iH)=>{"use strict";var Oet=typeof URL>"u"?Ie("url").URL:URL,Let="text/plain",Met="us-ascii",Lue=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),Uet=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let s=r[1].split(";"),a=r[2],n=e?"":r[3],c=!1;s[s.length-1]==="base64"&&(s.pop(),c=!0);let f=(s.shift()||"").toLowerCase(),h=[...s.map(E=>{let[C,S=""]=E.split("=").map(b=>b.trim());return C==="charset"&&(S=S.toLowerCase(),S===Met)?"":`${C}${S?`=${S}`:""}`}).filter(Boolean)];return c&&h.push("base64"),(h.length!==0||f&&f!==Let)&&h.unshift(f),`data:${h.join(";")},${c?a.trim():a}${n?`#${n}`:""}`},Mue=(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 Uet(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new Oet(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,c)=>/^(?!\/)/g.test(c)?`${c}/`:"/")),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("/"),c=n[n.length-1];Lue(c,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()])Lue(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};iH.exports=Mue;iH.exports.default=Mue});var jue=_((gMt,Hue)=>{Hue.exports=_ue;function _ue(t,e){if(t&&e)return _ue(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(s){r[s]=t[s]}),r;function r(){for(var s=new Array(arguments.length),a=0;a{var Gue=jue();sH.exports=Gue(HQ);sH.exports.strict=Gue(que);HQ.proto=HQ(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return HQ(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return que(this)},configurable:!0})});function HQ(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function que(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 aH=_((mMt,Yue)=>{var _et=oH(),Het=function(){},jet=function(t){return t.setHeader&&typeof t.abort=="function"},Get=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},Wue=function(t,e,r){if(typeof e=="function")return Wue(t,null,e);e||(e={}),r=_et(r||Het);var s=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,c=e.writable||e.writable!==!1&&t.writable,f=function(){t.writable||p()},p=function(){c=!1,n||r.call(t)},h=function(){n=!1,c||r.call(t)},E=function(I){r.call(t,I?new Error("exited with error code: "+I):null)},C=function(I){r.call(t,I)},S=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(c&&!(s&&s.ended))return r.call(t,new Error("premature close"))},b=function(){t.req.on("finish",p)};return jet(t)?(t.on("complete",p),t.on("abort",S),t.req?b():t.on("request",b)):c&&!s&&(t.on("end",f),t.on("close",f)),Get(t)&&t.on("exit",E),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",C),t.on("close",S),function(){t.removeListener("complete",p),t.removeListener("abort",S),t.removeListener("request",b),t.req&&t.req.removeListener("finish",p),t.removeListener("end",f),t.removeListener("close",f),t.removeListener("finish",p),t.removeListener("exit",E),t.removeListener("end",h),t.removeListener("error",C),t.removeListener("close",S)}};Yue.exports=Wue});var Kue=_((yMt,Jue)=>{var qet=oH(),Wet=aH(),lH=Ie("fs"),JB=function(){},Yet=/^v?\.0/.test(process.version),jQ=function(t){return typeof t=="function"},Vet=function(t){return!Yet||!lH?!1:(t instanceof(lH.ReadStream||JB)||t instanceof(lH.WriteStream||JB))&&jQ(t.close)},Jet=function(t){return t.setHeader&&jQ(t.abort)},Ket=function(t,e,r,s){s=qet(s);var a=!1;t.on("close",function(){a=!0}),Wet(t,{readable:e,writable:r},function(c){if(c)return s(c);a=!0,s()});var n=!1;return function(c){if(!a&&!n){if(n=!0,Vet(t))return t.close(JB);if(Jet(t))return t.abort();if(jQ(t.destroy))return t.destroy();s(c||new Error("stream was destroyed"))}}},Vue=function(t){t()},zet=function(t,e){return t.pipe(e)},Zet=function(){var t=Array.prototype.slice.call(arguments),e=jQ(t[t.length-1]||JB)&&t.pop()||JB;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,s=t.map(function(a,n){var c=n0;return Ket(a,c,f,function(p){r||(r=p),p&&s.forEach(Vue),!c&&(s.forEach(Vue),e(r))})});return t.reduce(zet)};Jue.exports=Zet});var Zue=_((EMt,zue)=>{"use strict";var{PassThrough:Xet}=Ie("stream");zue.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,s=r==="buffer",a=!1;e?a=!(r||s):r=r||"utf8",s&&(r=null);let n=new Xet({objectMode:a});r&&n.setEncoding(r);let c=0,f=[];return n.on("data",p=>{f.push(p),a?c=f.length:c+=p.length}),n.getBufferedValue=()=>e?f:s?Buffer.concat(f,c):f.join(""),n.getBufferedLength=()=>c,n}});var Xue=_((IMt,hI)=>{"use strict";var $et=Kue(),ett=Zue(),GQ=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function qQ(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,s;return await new Promise((a,n)=>{let c=f=>{f&&(f.bufferedData=s.getBufferedValue()),n(f)};s=$et(t,ett(e),f=>{if(f){c(f);return}a()}),s.on("data",()=>{s.getBufferedLength()>r&&c(new GQ)})}),s.getBufferedValue()}hI.exports=qQ;hI.exports.default=qQ;hI.exports.buffer=(t,e)=>qQ(t,{...e,encoding:"buffer"});hI.exports.array=(t,e)=>qQ(t,{...e,array:!0});hI.exports.MaxBufferError=GQ});var efe=_((wMt,$ue)=>{"use strict";var ttt=new Set([200,203,204,206,300,301,308,404,405,410,414,501]),rtt=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),ntt=new Set([500,502,503,504]),itt={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},stt={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function nm(t){let e=parseInt(t,10);return isFinite(e)?e:0}function ott(t){return t?ntt.has(t.status):!0}function cH(t){let e={};if(!t)return e;let r=t.trim().split(/,/);for(let s of r){let[a,n]=s.split(/=/,2);e[a.trim()]=n===void 0?!0:n.trim().replace(/^"|"$/g,"")}return e}function att(t){let e=[];for(let r in t){let s=t[r];e.push(s===!0?r:r+"="+s)}if(e.length)return e.join(", ")}$ue.exports=class{constructor(e,r,{shared:s,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:c,_fromObject:f}={}){if(f){this._fromObject(f);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=s!==!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=cH(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=cH(e.headers["cache-control"]),c&&"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":att(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())&&rtt.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||ttt.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=cH(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 s of r)if(e.headers[s]!==this._reqHeaders[s])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let s in e)itt[s]||(r[s]=e[s]);if(e.connection){let s=e.connection.trim().split(/\s*,\s*/);for(let a of s)delete r[a]}if(r.warning){let s=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));s.length?r.warning=s.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 nm(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 nm(this._rescc["s-maxage"])}if(this._rescc["max-age"])return nm(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let s=Date.parse(this._resHeaders.expires);return Number.isNaN(s)||ss)return Math.max(e,(r-s)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+nm(this._rescc["stale-if-error"]),s=e+nm(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,s)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+nm(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+nm(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()&&ott(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let s=!1;if(r.status!==void 0&&r.status!=304?s=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?s=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?s=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?s=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(s=!0),!s)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let c in this._resHeaders)a[c]=c in r.headers&&!stt[c]?r.headers[c]:this._resHeaders[c];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 WQ=_((BMt,tfe)=>{"use strict";tfe.exports=t=>{let e={};for(let[r,s]of Object.entries(t))e[r.toLowerCase()]=s;return e}});var nfe=_((vMt,rfe)=>{"use strict";var ltt=Ie("stream").Readable,ctt=WQ(),uH=class extends ltt{constructor(e,r,s,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(!(s 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=ctt(r),this.body=s,this.url=a}_read(){this.push(this.body),this.push(null)}};rfe.exports=uH});var sfe=_((SMt,ife)=>{"use strict";var utt=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];ife.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(utt));for(let s of r)s in e||(e[s]=typeof t[s]=="function"?t[s].bind(t):t[s])}});var afe=_((DMt,ofe)=>{"use strict";var ftt=Ie("stream").PassThrough,Att=sfe(),ptt=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new ftt;return Att(t,e),t.pipe(e)};ofe.exports=ptt});var lfe=_(fH=>{fH.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="",s=Array.isArray(e);r=s?"[":"{";var a=!0;for(var n in e){var c=typeof e[n]=="function"||!s&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!c&&(a||(r+=","),a=!1,s?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=s?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};fH.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 Afe=_((bMt,ffe)=>{"use strict";var htt=Ie("events"),cfe=lfe(),gtt=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(Ie(e[r]))(t)}return new Map},ufe=["sqlite","postgres","mysql","mongo","redis","tiered"],AH=class extends htt{constructor(e,{emitErrors:r=!0,...s}={}){if(super(),this.opts={namespace:"keyv",serialize:cfe.stringify,deserialize:cfe.parse,...typeof e=="string"?{uri:e}:e,...s},!this.opts.store){let n={...this.opts};this.opts.store=gtt(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[c,f]of typeof n=="function"?n(this.opts.store.namespace):n){let p=await this.opts.deserialize(f);if(!(this.opts.store.namespace&&!c.includes(this.opts.store.namespace))){if(typeof p.expires=="number"&&Date.now()>p.expires){this.delete(c);continue}yield[this._getKeyUnprefix(c),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 ufe.includes(this.opts.store.opts.dialect)||ufe.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:s}=this.opts,a=Array.isArray(e),n=a?this._getKeyPrefixArray(e):this._getKeyPrefix(e);if(a&&s.getMany===void 0){let c=[];for(let f of n)c.push(Promise.resolve().then(()=>s.get(f)).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(f).then(()=>{}):r&&r.raw?p:p.value}));return Promise.allSettled(c).then(f=>{let p=[];for(let h of f)p.push(h.value);return p})}return Promise.resolve().then(()=>a?s.getMany(n):s.get(n)).then(c=>typeof c=="string"?this.opts.deserialize(c):this.opts.compression?this.opts.deserialize(c):c).then(c=>{if(c!=null)return a?c.map((f,p)=>{if(typeof f=="string"&&(f=this.opts.deserialize(f)),f!=null){if(typeof f.expires=="number"&&Date.now()>f.expires){this.delete(e[p]).then(()=>{});return}return r&&r.raw?f:f.value}}):typeof c.expires=="number"&&Date.now()>c.expires?this.delete(e).then(()=>{}):r&&r.raw?c:c.value})}set(e,r,s){let a=this._getKeyPrefix(e);typeof s>"u"&&(s=this.opts.ttl),s===0&&(s=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let c=typeof s=="number"?Date.now()+s:null;return typeof r=="symbol"&&this.emit("error","symbol cannot be serialized"),r={value:r,expires:c},this.opts.serialize(r)}).then(c=>n.set(a,c,s)).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 c of a)n.push(r.delete(c));return Promise.allSettled(n).then(c=>c.every(f=>f.value===!0))}return Promise.resolve().then(()=>r.deleteMany(a))}let s=this._getKeyPrefix(e);return Promise.resolve().then(()=>r.delete(s))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}has(e){let r=this._getKeyPrefix(e),{store:s}=this.opts;return Promise.resolve().then(async()=>typeof s.has=="function"?s.has(r):await s.get(r)!==void 0)}disconnect(){let{store:e}=this.opts;if(typeof e.disconnect=="function")return e.disconnect()}};ffe.exports=AH});var gfe=_((kMt,hfe)=>{"use strict";var dtt=Ie("events"),YQ=Ie("url"),mtt=Uue(),ytt=Xue(),pH=efe(),pfe=nfe(),Ett=WQ(),Itt=afe(),Ctt=Afe(),KB=class t{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new Ctt({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,s)=>{let a;if(typeof r=="string")a=hH(YQ.parse(r)),r={};else if(r instanceof YQ.URL)a=hH(YQ.parse(r.toString())),r={};else{let[C,...S]=(r.path||"").split("?"),b=S.length>0?`?${S.join("?")}`:"";a=hH({...r,pathname:C,search:b})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...wtt(a)},r.headers=Ett(r.headers);let n=new dtt,c=mtt(YQ.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),f=`${r.method}:${c}`,p=!1,h=!1,E=C=>{h=!0;let S=!1,b,I=new Promise(N=>{b=()=>{S||(S=!0,N())}}),T=N=>{if(p&&!C.forceRefresh){N.status=N.statusCode;let W=pH.fromObject(p.cachePolicy).revalidatedPolicy(C,N);if(!W.modified){let ee=W.policy.responseHeaders();N=new pfe(p.statusCode,ee,p.body,p.url),N.cachePolicy=W.policy,N.fromCache=!0}}N.fromCache||(N.cachePolicy=new pH(C,N,C),N.fromCache=!1);let U;C.cache&&N.cachePolicy.storable()?(U=Itt(N),(async()=>{try{let W=ytt.buffer(N);if(await Promise.race([I,new Promise(le=>N.once("end",le))]),S)return;let ee=await W,ie={cachePolicy:N.cachePolicy.toObject(),url:N.url,statusCode:N.fromCache?p.statusCode:N.statusCode,body:ee},ue=C.strictTtl?N.cachePolicy.timeToLive():void 0;C.maxTtl&&(ue=ue?Math.min(ue,C.maxTtl):C.maxTtl),await this.cache.set(f,ie,ue)}catch(W){n.emit("error",new t.CacheError(W))}})()):C.cache&&p&&(async()=>{try{await this.cache.delete(f)}catch(W){n.emit("error",new t.CacheError(W))}})(),n.emit("response",U||N),typeof s=="function"&&s(U||N)};try{let N=e(C,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 C=async b=>{await Promise.resolve();let I=b.cache?await this.cache.get(f):void 0;if(typeof I>"u")return E(b);let T=pH.fromObject(I.cachePolicy);if(T.satisfiesWithoutRevalidation(b)&&!b.forceRefresh){let N=T.responseHeaders(),U=new pfe(I.statusCode,N,I.body,I.url);U.cachePolicy=T,U.fromCache=!0,n.emit("response",U),typeof s=="function"&&s(U)}else p=I,b.headers=T.revalidationHeaders(b),E(b)},S=b=>n.emit("error",new t.CacheError(b));this.cache.once("error",S),n.on("response",()=>this.cache.removeListener("error",S));try{await C(r)}catch(b){r.automaticFailover&&!h&&E(r),n.emit("error",new t.CacheError(b))}})(),n}}};function wtt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function hH(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}KB.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};KB.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};hfe.exports=KB});var mfe=_((TMt,dfe)=>{"use strict";var Btt=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];dfe.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(Btt)),s={};for(let a of r)a in e||(s[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,s),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 Efe=_((FMt,yfe)=>{"use strict";var{Transform:vtt,PassThrough:Stt}=Ie("stream"),gH=Ie("zlib"),Dtt=mfe();yfe.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof gH.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let s=!0,a=new vtt({transform(f,p,h){s=!1,h(null,f)},flush(f){f()}}),n=new Stt({autoDestroy:!1,destroy(f,p){t.destroy(),p(f)}}),c=r?gH.createBrotliDecompress():gH.createUnzip();return c.once("error",f=>{if(s&&!t.readable){n.end();return}n.destroy(f)}),Dtt(t,n),t.pipe(a).pipe(c).pipe(n),n}});var mH=_((NMt,Ife)=>{"use strict";var dH=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[s,a]of this.oldCache.entries())this.onEviction(s,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)}};Ife.exports=dH});var EH=_((OMt,vfe)=>{"use strict";var Ptt=Ie("events"),btt=Ie("tls"),xtt=Ie("http2"),ktt=mH(),ba=Symbol("currentStreamsCount"),Cfe=Symbol("request"),Tc=Symbol("cachedOriginSet"),gI=Symbol("gracefullyClosing"),Qtt=["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"],Rtt=(t,e,r)=>{let s=0,a=t.length;for(;s>>1;r(t[n],e)?s=n+1:a=n}return s},Ttt=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,yH=(t,e)=>{for(let r of t)r[Tc].lengthe[Tc].includes(s))&&r[ba]+e[ba]<=e.remoteSettings.maxConcurrentStreams&&Bfe(r)},Ftt=(t,e)=>{for(let r of t)e[Tc].lengthr[Tc].includes(s))&&e[ba]+r[ba]<=r.remoteSettings.maxConcurrentStreams&&Bfe(e)},wfe=({agent:t,isFree:e})=>{let r={};for(let s in t.sessions){let n=t.sessions[s].filter(c=>{let f=c[im.kCurrentStreamsCount]{t[gI]=!0,t[ba]===0&&t.close()},im=class t extends Ptt{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:s=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=s,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new ktt({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 s of Qtt)e[s]&&(r+=`:${e[s]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let s=this.queue[e][r];this._sessionsCount{Array.isArray(s)?(s=[...s],a()):s=[{resolve:a,reject:n}];let c=this.normalizeOptions(r),f=t.normalizeOrigin(e,r&&r.servername);if(f===void 0){for(let{reject:E}of s)E(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(c in this.sessions){let E=this.sessions[c],C=-1,S=-1,b;for(let I of E){let T=I.remoteSettings.maxConcurrentStreams;if(T=T||I[gI]||I.destroyed)continue;b||(C=T),N>S&&(b=I,S=N)}}if(b){if(s.length!==1){for(let{reject:I}of s){let T=new Error(`Expected the length of listeners to be 1, got ${s.length}. -Please report this to https://github.com/szmarczak/http2-wrapper/`);I(T)}return}s[0].resolve(b);return}}if(c in this.queue){if(f in this.queue[c]){this.queue[c][f].listeners.push(...s),this._tryToCreateNewSession(c,f);return}}else this.queue[c]={};let p=()=>{c in this.queue&&this.queue[c][f]===h&&(delete this.queue[c][f],Object.keys(this.queue[c]).length===0&&delete this.queue[c])},h=()=>{let E=`${f}:${c}`,C=!1;try{let S=xtt.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(E),...r});S[ba]=0,S[gI]=!1;let b=()=>S[ba]{this.tlsSessionCache.set(E,N)}),S.once("error",N=>{for(let{reject:U}of s)U(N);this.tlsSessionCache.delete(E)}),S.setTimeout(this.timeout,()=>{S.destroy()}),S.once("close",()=>{if(C){I&&this._freeSessionsCount--,this._sessionsCount--;let N=this.sessions[c];N.splice(N.indexOf(S),1),N.length===0&&delete this.sessions[c]}else{let N=new Error("Session closed without receiving a SETTINGS frame");N.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of s)U(N);p()}this._tryToCreateNewSession(c,f)});let T=()=>{if(!(!(c in this.queue)||!b())){for(let N of S[Tc])if(N in this.queue[c]){let{listeners:U}=this.queue[c][N];for(;U.length!==0&&b();)U.shift().resolve(S);let W=this.queue[c];if(W[N].listeners.length===0&&(delete W[N],Object.keys(W).length===0)){delete this.queue[c];break}if(!b())break}}};S.on("origin",()=>{S[Tc]=S.originSet,b()&&(T(),yH(this.sessions[c],S))}),S.once("remoteSettings",()=>{if(S.ref(),S.unref(),this._sessionsCount++,h.destroyed){let N=new Error("Agent has been destroyed");for(let U of s)U.reject(N);S.destroy();return}S[Tc]=S.originSet;{let N=this.sessions;if(c in N){let U=N[c];U.splice(Rtt(U,S,Ttt),0,S)}else N[c]=[S]}this._freeSessionsCount+=1,C=!0,this.emit("session",S),T(),p(),S[ba]===0&&this._freeSessionsCount>this.maxFreeSessions&&S.close(),s.length!==0&&(this.getSession(f,r,s),s.length=0),S.on("remoteSettings",()=>{T(),yH(this.sessions[c],S)})}),S[Cfe]=S.request,S.request=(N,U)=>{if(S[gI])throw new Error("The session is gracefully closing. No new streams are allowed.");let W=S[Cfe](N,U);return S.ref(),++S[ba],S[ba]===S.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,W.once("close",()=>{if(I=b(),--S[ba],!S.destroyed&&!S.closed&&(Ftt(this.sessions[c],S),b()&&!S.closed)){I||(this._freeSessionsCount++,I=!0);let ee=S[ba]===0;ee&&S.unref(),ee&&(this._freeSessionsCount>this.maxFreeSessions||S[gI])?S.close():(yH(this.sessions[c],S),T())}}),W}}catch(S){for(let b of s)b.reject(S);p()}};h.listeners=s,h.completed=!1,h.destroyed=!1,this.queue[c][f]=h,this._tryToCreateNewSession(c,f)})}request(e,r,s,a){return new Promise((n,c)=>{this.getSession(e,r,[{reject:c,resolve:f=>{try{n(f.request(s,a))}catch(p){c(p)}}}])})}createConnection(e,r){return t.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let s=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),btt.connect(s,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[ba]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let s of r)s.destroy(e);for(let r of Object.values(this.queue))for(let s of Object.values(r))s.destroyed=!0;this.queue={}}get freeSessions(){return wfe({agent:this,isFree:!0})}get busySessions(){return wfe({agent:this,isFree:!1})}};im.kCurrentStreamsCount=ba;im.kGracefullyClosing=gI;vfe.exports={Agent:im,globalAgent:new im}});var CH=_((LMt,Sfe)=>{"use strict";var{Readable:Ntt}=Ie("stream"),IH=class extends Ntt{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()}};Sfe.exports=IH});var wH=_((MMt,Dfe)=>{"use strict";Dfe.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 bfe=_((UMt,Pfe)=>{"use strict";Pfe.exports=(t,e,r)=>{for(let s of r)t.on(s,(...a)=>e.emit(s,...a))}});var kfe=_((_Mt,xfe)=>{"use strict";xfe.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var Rfe=_((jMt,Qfe)=>{"use strict";var dI=(t,e,r)=>{Qfe.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};dI(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],s=Array.isArray(r);return s&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${s?"one of":"of"} type ${r}. Received ${typeof t[2]}`});dI(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);dI(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);dI(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);dI(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);dI(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var PH=_((GMt,Ufe)=>{"use strict";var Ott=Ie("http2"),{Writable:Ltt}=Ie("stream"),{Agent:Tfe,globalAgent:Mtt}=EH(),Utt=CH(),_tt=wH(),Htt=bfe(),jtt=kfe(),{ERR_INVALID_ARG_TYPE:BH,ERR_INVALID_PROTOCOL:Gtt,ERR_HTTP_HEADERS_SENT:Ffe,ERR_INVALID_HTTP_TOKEN:qtt,ERR_HTTP_INVALID_HEADER_VALUE:Wtt,ERR_INVALID_CHAR:Ytt}=Rfe(),{HTTP2_HEADER_STATUS:Nfe,HTTP2_HEADER_METHOD:Ofe,HTTP2_HEADER_PATH:Lfe,HTTP2_METHOD_CONNECT:Vtt}=Ott.constants,Jo=Symbol("headers"),vH=Symbol("origin"),SH=Symbol("session"),Mfe=Symbol("options"),VQ=Symbol("flushedHeaders"),zB=Symbol("jobs"),Jtt=/^[\^`\-\w!#$%&*+.|~]+$/,Ktt=/[^\t\u0020-\u007E\u0080-\u00FF]/,DH=class extends Ltt{constructor(e,r,s){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=_tt(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(s=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[SH]=r.h2session;else if(r.agent===!1)this.agent=new Tfe({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new Tfe({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=Mtt;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new BH("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new Gtt(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,c=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:f}=r;if(r.timeout=void 0,this[Jo]=Object.create(null),this[zB]=[],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[Jo])&&(this[Jo].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[Mfe]=r,n===443?(this[vH]=`https://${c}`,":authority"in this[Jo]||(this[Jo][":authority"]=c)):(this[vH]=`https://${c}:${n}`,":authority"in this[Jo]||(this[Jo][":authority"]=`${c}:${n}`)),f&&this.setTimeout(f),s&&this.once("response",s),this[VQ]=!1}get method(){return this[Jo][Ofe]}set method(e){e&&(this[Jo][Ofe]=e.toUpperCase())}get path(){return this[Jo][Lfe]}set path(e){e&&(this[Jo][Lfe]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,s){if(this._mustNotHaveABody){s(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,s);this._request?a():this[zB].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[zB].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[VQ]||this.destroyed)return;this[VQ]=!0;let e=this.method===Vtt,r=s=>{if(this._request=s,this.destroyed){s.destroy();return}e||Htt(s,this,["timeout","continue","close","error"]);let a=c=>(...f)=>{!this.writable&&!this.destroyed?c(...f):this.once("finish",()=>{c(...f)})};s.once("response",a((c,f,p)=>{let h=new Utt(this.socket,s.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=c[Nfe],h.headers=c,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,s,Buffer.alloc(0))?this.emit("close"):s.destroy()):(s.on("data",E=>{!h._dumped&&!h.push(E)&&s.pause()}),s.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),s.once("headers",a(c=>this.emit("information",{statusCode:c[Nfe]}))),s.once("trailers",a((c,f,p)=>{let{res:h}=this;h.trailers=c,h.rawTrailers=p}));let{socket:n}=s.session;this.socket=n,this.connection=n;for(let c of this[zB])c();this.emit("socket",this.socket)};if(this[SH])try{r(this[SH].request(this[Jo]))}catch(s){this.emit("error",s)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[vH],this[Mfe],this[Jo]))}catch(s){this.emit("error",s)}}}getHeader(e){if(typeof e!="string")throw new BH("name","string",e);return this[Jo][e.toLowerCase()]}get headersSent(){return this[VQ]}removeHeader(e){if(typeof e!="string")throw new BH("name","string",e);if(this.headersSent)throw new Ffe("remove");delete this[Jo][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new Ffe("set");if(typeof e!="string"||!Jtt.test(e)&&!jtt(e))throw new qtt("Header name",e);if(typeof r>"u")throw new Wtt(r,e);if(Ktt.test(r))throw new Ytt("header content",e);this[Jo][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let s=()=>this._request.setTimeout(e,r);return this._request?s():this[zB].push(s),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};Ufe.exports=DH});var Hfe=_((qMt,_fe)=>{"use strict";var ztt=Ie("tls");_fe.exports=(t={},e=ztt.connect)=>new Promise((r,s)=>{let a=!1,n,c=async()=>{await p,n.off("timeout",f),n.off("error",s),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}))},f=async()=>{a=!0,c()},p=(async()=>{try{n=await e(t,c),n.on("error",s),n.once("timeout",f)}catch(h){s(h)}})()})});var Gfe=_((WMt,jfe)=>{"use strict";var Ztt=Ie("net");jfe.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]),Ztt.isIP(e)?"":e}});var Yfe=_((YMt,xH)=>{"use strict";var qfe=Ie("http"),bH=Ie("https"),Xtt=Hfe(),$tt=mH(),ert=PH(),trt=Gfe(),rrt=wH(),JQ=new $tt({maxSize:100}),ZB=new Map,Wfe=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let s=()=>{t.emit("free",e,r)};e.on("free",s);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",s),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},nrt=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!JQ.has(e)){if(ZB.has(e))return(await ZB.get(e)).alpnProtocol;let{path:r,agent:s}=t;t.path=t.socketPath;let a=Xtt(t);ZB.set(e,a);try{let{socket:n,alpnProtocol:c}=await a;if(JQ.set(e,c),t.path=r,c==="h2")n.destroy();else{let{globalAgent:f}=bH,p=bH.Agent.prototype.createConnection;s?s.createConnection===p?Wfe(s,n,t):n.destroy():f.createConnection===p?Wfe(f,n,t):n.destroy()}return ZB.delete(e),c}catch(n){throw ZB.delete(e),n}}return JQ.get(e)};xH.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=rrt(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 s=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||trt(e),e.port=e.port||(s?443:80),e._defaultAgent=s?bH.globalAgent:qfe.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[s?"https":"http"]}return s&&await nrt(e)==="h2"?(a&&(e.agent=a.http2),new ert(e,r)):qfe.request(e,r)};xH.exports.protocolCache=JQ});var Jfe=_((VMt,Vfe)=>{"use strict";var irt=Ie("http2"),srt=EH(),kH=PH(),ort=CH(),art=Yfe(),lrt=(t,e,r)=>new kH(t,e,r),crt=(t,e,r)=>{let s=new kH(t,e,r);return s.end(),s};Vfe.exports={...irt,ClientRequest:kH,IncomingMessage:ort,...srt,request:lrt,get:crt,auto:art}});var RH=_(QH=>{"use strict";Object.defineProperty(QH,"__esModule",{value:!0});var Kfe=Np();QH.default=t=>Kfe.default.nodeStream(t)&&Kfe.default.function_(t.getBoundary)});var $fe=_(TH=>{"use strict";Object.defineProperty(TH,"__esModule",{value:!0});var Zfe=Ie("fs"),Xfe=Ie("util"),zfe=Np(),urt=RH(),frt=Xfe.promisify(Zfe.stat);TH.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(zfe.default.string(t))return Buffer.byteLength(t);if(zfe.default.buffer(t))return t.length;if(urt.default(t))return Xfe.promisify(t.getLength.bind(t))();if(t instanceof Zfe.ReadStream){let{size:r}=await frt(t.path);return r===0?void 0:r}}});var NH=_(FH=>{"use strict";Object.defineProperty(FH,"__esModule",{value:!0});function Art(t,e,r){let s={};for(let a of r)s[a]=(...n)=>{e.emit(a,...n)},t.on(a,s[a]);return()=>{for(let a of r)t.off(a,s[a])}}FH.default=Art});var eAe=_(OH=>{"use strict";Object.defineProperty(OH,"__esModule",{value:!0});OH.default=()=>{let t=[];return{once(e,r,s){e.once(r,s),t.push({origin:e,event:r,fn:s})},unhandleAll(){for(let e of t){let{origin:r,event:s,fn:a}=e;r.removeListener(s,a)}t.length=0}}}});var rAe=_(XB=>{"use strict";Object.defineProperty(XB,"__esModule",{value:!0});XB.TimeoutError=void 0;var prt=Ie("net"),hrt=eAe(),tAe=Symbol("reentry"),grt=()=>{},KQ=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};XB.TimeoutError=KQ;XB.default=(t,e,r)=>{if(tAe in t)return grt;t[tAe]=!0;let s=[],{once:a,unhandleAll:n}=hrt.default(),c=(C,S,b)=>{var I;let T=setTimeout(S,C,C,b);(I=T.unref)===null||I===void 0||I.call(T);let N=()=>{clearTimeout(T)};return s.push(N),N},{host:f,hostname:p}=r,h=(C,S)=>{t.destroy(new KQ(C,S))},E=()=>{for(let C of s)C();n()};if(t.once("error",C=>{if(E(),t.listenerCount("error")===0)throw C}),t.once("close",E),a(t,"response",C=>{a(C,"end",E)}),typeof e.request<"u"&&c(e.request,h,"request"),typeof e.socket<"u"){let C=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,C),s.push(()=>{t.removeListener("timeout",C)})}return a(t,"socket",C=>{var S;let{socketPath:b}=t;if(C.connecting){let I=!!(b??prt.isIP((S=p??f)!==null&&S!==void 0?S:"")!==0);if(typeof e.lookup<"u"&&!I&&typeof C.address().address>"u"){let T=c(e.lookup,h,"lookup");a(C,"lookup",T)}if(typeof e.connect<"u"){let T=()=>c(e.connect,h,"connect");I?a(C,"connect",T()):a(C,"lookup",N=>{N===null&&a(C,"connect",T())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(C,"connect",()=>{let T=c(e.secureConnect,h,"secureConnect");a(C,"secureConnect",T)})}if(typeof e.send<"u"){let I=()=>c(e.send,h,"send");C.connecting?a(C,"connect",()=>{a(t,"upload-complete",I())}):a(t,"upload-complete",I())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let C=c(e.response,h,"response");a(t,"response",C)}),E}});var iAe=_(LH=>{"use strict";Object.defineProperty(LH,"__esModule",{value:!0});var nAe=Np();LH.default=t=>{t=t;let e={protocol:t.protocol,hostname:nAe.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 nAe.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 sAe=_(MH=>{"use strict";Object.defineProperty(MH,"__esModule",{value:!0});var drt=Ie("url"),mrt=["protocol","host","hostname","port","pathname","search"];MH.default=(t,e)=>{var r,s;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}//${(s=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&s!==void 0?s:""}`}let a=new drt.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 mrt)e[n]&&(a[n]=e[n].toString());return a}});var oAe=_(_H=>{"use strict";Object.defineProperty(_H,"__esModule",{value:!0});var UH=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)}};_H.default=UH});var jH=_(HH=>{"use strict";Object.defineProperty(HH,"__esModule",{value:!0});var yrt=async t=>{let e=[],r=0;for await(let s of t)e.push(s),r+=Buffer.byteLength(s);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};HH.default=yrt});var lAe=_(sm=>{"use strict";Object.defineProperty(sm,"__esModule",{value:!0});sm.dnsLookupIpVersionToFamily=sm.isDnsLookupIpVersion=void 0;var aAe={auto:0,ipv4:4,ipv6:6};sm.isDnsLookupIpVersion=t=>t in aAe;sm.dnsLookupIpVersionToFamily=t=>{if(sm.isDnsLookupIpVersion(t))return aAe[t];throw new Error("Invalid DNS lookup IP version")}});var GH=_(zQ=>{"use strict";Object.defineProperty(zQ,"__esModule",{value:!0});zQ.isResponseOk=void 0;zQ.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var uAe=_(qH=>{"use strict";Object.defineProperty(qH,"__esModule",{value:!0});var cAe=new Set;qH.default=t=>{cAe.has(t)||(cAe.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var fAe=_(WH=>{"use strict";Object.defineProperty(WH,"__esModule",{value:!0});var Si=Np(),Ert=(t,e)=>{if(Si.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");Si.assert.any([Si.default.string,Si.default.undefined],t.encoding),Si.assert.any([Si.default.boolean,Si.default.undefined],t.resolveBodyOnly),Si.assert.any([Si.default.boolean,Si.default.undefined],t.methodRewriting),Si.assert.any([Si.default.boolean,Si.default.undefined],t.isStream),Si.assert.any([Si.default.string,Si.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:s=>s.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},Si.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(s=>s.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):Si.default.number(r)&&(t.retry.limit=r),Si.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(Si.default.number))),Si.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:s}=t;if(!Si.default.function_(s.transform))throw new Error("`options.pagination.transform` must be implemented");if(!Si.default.function_(s.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!Si.default.function_(s.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!Si.default.function_(s.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};WH.default=Ert});var AAe=_($B=>{"use strict";Object.defineProperty($B,"__esModule",{value:!0});$B.retryAfterStatusCodes=void 0;$B.retryAfterStatusCodes=new Set([413,429,503]);var Irt=({attemptCount:t,retryOptions:e,error:r,retryAfter:s})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),c=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!c)return 0;if(r.response){if(s)return e.maxRetryAfter===void 0||s>e.maxRetryAfter?0:s;if(r.response.statusCode===413)return 0}let f=Math.random()*100;return 2**(t-1)*1e3+f};$B.default=Irt});var rv=_(Ln=>{"use strict";Object.defineProperty(Ln,"__esModule",{value:!0});Ln.UnsupportedProtocolError=Ln.ReadError=Ln.TimeoutError=Ln.UploadError=Ln.CacheError=Ln.HTTPError=Ln.MaxRedirectsError=Ln.RequestError=Ln.setNonEnumerableProperties=Ln.knownHookEvents=Ln.withoutBody=Ln.kIsNormalizedAlready=void 0;var pAe=Ie("util"),hAe=Ie("stream"),Crt=Ie("fs"),w0=Ie("url"),gAe=Ie("http"),YH=Ie("http"),wrt=Ie("https"),Brt=xue(),vrt=Oue(),dAe=gfe(),Srt=Efe(),Drt=Jfe(),Prt=WQ(),at=Np(),brt=$fe(),mAe=RH(),xrt=NH(),yAe=rAe(),krt=iAe(),EAe=sAe(),Qrt=oAe(),Rrt=jH(),IAe=lAe(),Trt=GH(),B0=uAe(),Frt=fAe(),Nrt=AAe(),VH,po=Symbol("request"),$Q=Symbol("response"),mI=Symbol("responseSize"),yI=Symbol("downloadedSize"),EI=Symbol("bodySize"),II=Symbol("uploadedSize"),ZQ=Symbol("serverResponsesPiped"),CAe=Symbol("unproxyEvents"),wAe=Symbol("isFromCache"),JH=Symbol("cancelTimeouts"),BAe=Symbol("startedReading"),CI=Symbol("stopReading"),XQ=Symbol("triggerRead"),v0=Symbol("body"),ev=Symbol("jobs"),vAe=Symbol("originalResponse"),SAe=Symbol("retryTimeout");Ln.kIsNormalizedAlready=Symbol("isNormalizedAlready");var Ort=at.default.string(process.versions.brotli);Ln.withoutBody=new Set(["GET","HEAD"]);Ln.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function Lrt(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 Mrt(t){return at.default.object(t)&&!("statusCode"in t)}var KH=new Qrt.default,Urt=async t=>new Promise((e,r)=>{let s=a=>{r(a)};t.pending||e(),t.once("error",s),t.once("ready",()=>{t.off("error",s),e()})}),_rt=new Set([300,301,302,303,304,307,308]),Hrt=["context","body","json","form"];Ln.setNonEnumerableProperties=(t,e)=>{let r={};for(let s of t)if(s)for(let a of Hrt)a in s&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:s[a]});Object.defineProperties(e,r)};var us=class extends Error{constructor(e,r,s){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,s instanceof oR?(Object.defineProperty(this,"request",{enumerable:!1,value:s}),Object.defineProperty(this,"response",{enumerable:!1,value:s[$Q]}),Object.defineProperty(this,"options",{enumerable:!1,value:s.options})):Object.defineProperty(this,"options",{enumerable:!1,value:s}),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,c=this.stack.slice(n).split(` -`).reverse(),f=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` -`).reverse();for(;f.length!==0&&f[0]===c[0];)c.shift();this.stack=`${this.stack.slice(0,n)}${c.reverse().join(` -`)}${f.reverse().join(` -`)}`}}};Ln.RequestError=us;var eR=class extends us{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Ln.MaxRedirectsError=eR;var tR=class extends us{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Ln.HTTPError=tR;var rR=class extends us{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Ln.CacheError=rR;var nR=class extends us{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Ln.UploadError=nR;var iR=class extends us{constructor(e,r,s){super(e.message,e,s),this.name="TimeoutError",this.event=e.event,this.timings=r}};Ln.TimeoutError=iR;var tv=class extends us{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Ln.ReadError=tv;var sR=class extends us{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Ln.UnsupportedProtocolError=sR;var jrt=["socket","connect","continue","information","upgrade","timeout"],oR=class extends hAe.Duplex{constructor(e,r={},s){super({autoDestroy:!1,highWaterMark:0}),this[yI]=0,this[II]=0,this.requestInitialized=!1,this[ZQ]=new Set,this.redirects=[],this[CI]=!1,this[XQ]=!1,this[ev]=[],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 YH.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:c,body:f,form:p}=r;if((c||f||p)&&this._lockWrite(),Ln.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,s)}catch(h){at.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof Crt.ReadStream&&await Urt(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[po])===null||h===void 0||h.destroy();return}for(let C of this[ev])C();this[ev].length=0,this.requestInitialized=!0}catch(E){if(E instanceof us){this._beforeError(E);return}this.destroyed||this.destroy(E)}})()}static normalizeArguments(e,r,s){var a,n,c,f,p;let h=r;if(at.default.object(e)&&!at.default.urlInstance(e))r={...s,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...s,...r},e!==void 0&&(r.url=e),at.default.urlInstance(r.url)&&(r.url=new w0.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([IAe.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===s?.headers?r.headers={...r.headers}:r.headers=Prt({...s?.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!==s?.searchParams){let b;if(at.default.string(r.searchParams)||r.searchParams instanceof w0.URLSearchParams)b=new w0.URLSearchParams(r.searchParams);else{Lrt(r.searchParams),b=new w0.URLSearchParams;for(let I in r.searchParams){let T=r.searchParams[I];T===null?b.append(I,""):T!==void 0&&b.append(I,T)}}(a=s?.searchParams)===null||a===void 0||a.forEach((I,T)=>{b.has(T)||b.append(T,I)}),r.searchParams=b}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(c=r.password)!==null&&c!==void 0?c:"",at.default.undefined(r.prefixUrl)?r.prefixUrl=(f=s?.prefixUrl)!==null&&f!==void 0?f:"":(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=EAe.default(r.prefixUrl+r.url,r)}else(at.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=EAe.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 w0.URL(T+N.href.slice(b.length)),b=T},get:()=>b});let{protocol:I}=r.url;if(I==="unix:"&&(I="http:",r.url=new w0.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),I!=="http:"&&I!=="https:")throw new sR(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:I}=E;at.assert.function_(b),at.assert.function_(I),b.length===4&&I.length===0&&(b=pAe.promisify(b.bind(r.cookieJar)),I=pAe.promisify(I.bind(r.cookieJar)),r.cookieJar={setCookie:b,getCookieString:I})}let{cache:C}=r;if(C&&(KH.has(C)||KH.set(C,new dAe((b,I)=>{let T=b[po](b,I);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},C))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)VH||(VH=new vrt.default),r.dnsCache=VH;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}:s&&r.timeout!==s.timeout?r.timeout={...s.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let S=r.hooks===s?.hooks;r.hooks={...r.hooks};for(let b of Ln.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(s&&!S)for(let b of Ln.knownHookEvents)s.hooks[b].length>0&&(r.hooks[b]=[...s.hooks[b],...r.hooks[b]]);if("family"in r&&B0.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),s?.https&&(r.https={...s.https,...r.https}),"rejectUnauthorized"in r&&B0.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&B0.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&B0.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&B0.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&B0.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&B0.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&B0.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,Ln.setNonEnumerableProperties([s,h],r),Frt.default(r,s)}_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,s=!at.default.undefined(e.form),a=!at.default.undefined(e.json),n=!at.default.undefined(e.body),c=s||a||n,f=Ln.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=f,c){if(f)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,s,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof hAe.Readable)&&!at.default.string(e.body)&&!at.default.buffer(e.body)&&!mAe.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(s&&!at.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!at.default.string(r["content-type"]);n?(mAe.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[v0]=e.body):s?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[v0]=new w0.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[v0]=e.stringifyJson(e.json));let h=await brt.default(this[v0],e.headers);at.default.undefined(r["content-length"])&&at.default.undefined(r["transfer-encoding"])&&!f&&!at.default.undefined(h)&&(r["content-length"]=String(h))}}else f?this._lockWrite():this._unlockWrite();this[EI]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:s}=r;this[vAe]=e,r.decompress&&(e=Srt(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:gAe.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[wAe]=n.isFromCache,this[mI]=Number(e.headers["content-length"])||void 0,this[$Q]=e,e.once("end",()=>{this[mI]=this[yI],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",f=>{e.destroy(),this._beforeError(new tv(f,this))}),e.once("aborted",()=>{this._beforeError(new tv({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let c=e.headers["set-cookie"];if(at.default.object(r.cookieJar)&&c){let f=c.map(async p=>r.cookieJar.setCookie(p,s.toString()));r.ignoreInvalidCookies&&(f=f.map(async p=>p.catch(()=>{})));try{await Promise.all(f)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&_rt.has(a)){if(e.resume(),this[po]&&(this[JH](),delete this[po],this[CAe]()),(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[v0]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new eR(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new w0.URL(p,s),E=h.toString();decodeURI(E),h.hostname!==s.hostname||h.port!==s.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 C of r.hooks.beforeRedirect)await C(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!Trt.isResponseOk(n)){this._beforeError(new tR(n));return}e.on("readable",()=>{this[XQ]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let f of this[ZQ])if(!f.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,E=e.headers[p];h&&f.setHeader(p,E)}f.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:s,url:a}=r;Brt.default(e),this[JH]=yAe.default(e,s,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 yAe.TimeoutError?new iR(p,this.timings,this):new us(p.message,p,this),this._beforeError(p)}),this[CAe]=xrt.default(e,this,jrt),this[po]=e,this.emit("uploadProgress",this.uploadProgress);let c=this[v0],f=this.redirects.length===0?this:e;at.default.nodeStream(c)?(c.pipe(f),c.once("error",p=>{this._beforeError(new nR(p,this))})):(this._unlockWrite(),at.default.undefined(c)?(this._cannotHaveBody||this._noPipe)&&(f.end(),this._lockWrite()):(this._writeRequest(c,void 0,()=>{}),f.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((s,a)=>{Object.assign(r,krt.default(e)),delete r.url;let n,c=KH.get(r.cache)(r,async f=>{f._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",f),s(f)});r.url=e,c.once("error",a),c.once("request",async f=>{n=f,s(n)})})}async _makeRequest(){var e,r,s,a,n;let{options:c}=this,{headers:f}=c;for(let U in f)if(at.default.undefined(f[U]))delete f[U];else if(at.default.null_(f[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(c.decompress&&at.default.undefined(f["accept-encoding"])&&(f["accept-encoding"]=Ort?"gzip, deflate, br":"gzip, deflate"),c.cookieJar){let U=await c.cookieJar.getCookieString(c.url.toString());at.default.nonEmptyString(U)&&(c.headers.cookie=U)}for(let U of c.hooks.beforeRequest){let W=await U(c);if(!at.default.undefined(W)){c.request=()=>W;break}}c.body&&this[v0]!==c.body&&(this[v0]=c.body);let{agent:p,request:h,timeout:E,url:C}=c;if(c.dnsCache&&!("lookup"in c)&&(c.lookup=c.dnsCache.lookup),C.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${C.pathname}${C.search}`);if(U?.groups){let{socketPath:W,path:ee}=U.groups;Object.assign(c,{socketPath:W,path:ee,host:""})}}let S=C.protocol==="https:",b;c.http2?b=Drt.auto:b=S?wrt.request:gAe.request;let I=(e=c.request)!==null&&e!==void 0?e:b,T=c.cache?this._createCacheableRequest:I;p&&!c.http2&&(c.agent=p[S?"https":"http"]),c[po]=I,delete c.request,delete c.timeout;let N=c;if(N.shared=(r=c.cacheOptions)===null||r===void 0?void 0:r.shared,N.cacheHeuristic=(s=c.cacheOptions)===null||s===void 0?void 0:s.cacheHeuristic,N.immutableMinTimeToLive=(a=c.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,N.ignoreCargoCult=(n=c.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,c.dnsLookupIpVersion!==void 0)try{N.family=IAe.dnsLookupIpVersionToFamily(c.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}c.https&&("rejectUnauthorized"in c.https&&(N.rejectUnauthorized=c.https.rejectUnauthorized),c.https.checkServerIdentity&&(N.checkServerIdentity=c.https.checkServerIdentity),c.https.certificateAuthority&&(N.ca=c.https.certificateAuthority),c.https.certificate&&(N.cert=c.https.certificate),c.https.key&&(N.key=c.https.key),c.https.passphrase&&(N.passphrase=c.https.passphrase),c.https.pfx&&(N.pfx=c.https.pfx));try{let U=await T(C,N);at.default.undefined(U)&&(U=b(C,N)),c.request=h,c.timeout=E,c.agent=p,c.https&&("rejectUnauthorized"in c.https&&delete N.rejectUnauthorized,c.https.checkServerIdentity&&delete N.checkServerIdentity,c.https.certificateAuthority&&delete N.ca,c.https.certificate&&delete N.cert,c.https.key&&delete N.key,c.https.passphrase&&delete N.passphrase,c.https.pfx&&delete N.pfx),Mrt(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 dAe.CacheError?new rR(U,this):new us(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new us(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[CI])return;let{options:r}=this,s=this.retryCount+1;this[CI]=!0,e instanceof us||(e=new us(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await Rrt.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let c;try{let f;n&&"retry-after"in n.headers&&(f=Number(n.headers["retry-after"]),Number.isNaN(f)?(f=Date.parse(n.headers["retry-after"])-Date.now(),f<=0&&(f=1)):f*=1e3),c=await r.retry.calculateDelay({attemptCount:s,retryOptions:r.retry,error:a,retryAfter:f,computedValue:Nrt.default({attemptCount:s,retryOptions:r.retry,error:a,retryAfter:f,computedValue:0})})}catch(f){this._error(new us(f.message,f,this));return}if(c){let f=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,s)}catch(p){this._error(new us(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",s,e))};this[SAe]=setTimeout(f,c);return}}this._error(a)})()}_read(){this[XQ]=!0;let e=this[$Q];if(e&&!this[CI]){e.readableLength&&(this[XQ]=!1);let r;for(;(r=e.read())!==null;){this[yI]+=r.length,this[BAe]=!0;let s=this.downloadProgress;s.percent<1&&this.emit("downloadProgress",s),this.push(r)}}}_write(e,r,s){let a=()=>{this._writeRequest(e,r,s)};this.requestInitialized?a():this[ev].push(a)}_writeRequest(e,r,s){this[po].destroyed||(this._progressCallbacks.push(()=>{this[II]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[po].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),s(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(po in this)){e();return}if(this[po].destroyed){e();return}this[po].end(s=>{s||(this[EI]=this[II],this.emit("uploadProgress",this.uploadProgress),this[po].emit("upload-complete")),e(s)})};this.requestInitialized?r():this[ev].push(r)}_destroy(e,r){var s;this[CI]=!0,clearTimeout(this[SAe]),po in this&&(this[JH](),!((s=this[$Q])===null||s===void 0)&&s.complete||this[po].destroy()),e!==null&&!at.default.undefined(e)&&!(e instanceof us)&&(e=new us(e.message,e,this)),r(e)}get _isAboutToError(){return this[CI]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,s;return((r=(e=this[po])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((s=this[vAe])===null||s===void 0)&&s.complete)}get socket(){var e,r;return(r=(e=this[po])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[mI]?e=this[yI]/this[mI]:this[mI]===this[yI]?e=1:e=0,{percent:e,transferred:this[yI],total:this[mI]}}get uploadProgress(){let e;return this[EI]?e=this[II]/this[EI]:this[EI]===this[II]?e=1:e=0,{percent:e,transferred:this[II],total:this[EI]}}get timings(){var e;return(e=this[po])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[wAe]}pipe(e,r){if(this[BAe])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof YH.ServerResponse&&this[ZQ].add(e),super.pipe(e,r)}unpipe(e){return e instanceof YH.ServerResponse&&this[ZQ].delete(e),super.unpipe(e),this}};Ln.default=oR});var nv=_(qu=>{"use strict";var Grt=qu&&qu.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),qrt=qu&&qu.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Grt(e,t,r)};Object.defineProperty(qu,"__esModule",{value:!0});qu.CancelError=qu.ParseError=void 0;var DAe=rv(),zH=class extends DAe.RequestError{constructor(e,r){let{options:s}=r.request;super(`${e.message} in "${s.url.toString()}"`,e,r.request),this.name="ParseError"}};qu.ParseError=zH;var ZH=class extends DAe.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};qu.CancelError=ZH;qrt(rv(),qu)});var bAe=_(XH=>{"use strict";Object.defineProperty(XH,"__esModule",{value:!0});var PAe=nv(),Wrt=(t,e,r,s)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(s);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new PAe.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new PAe.ParseError(n,t)}};XH.default=Wrt});var $H=_(S0=>{"use strict";var Yrt=S0&&S0.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),Vrt=S0&&S0.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Yrt(e,t,r)};Object.defineProperty(S0,"__esModule",{value:!0});var Jrt=Ie("events"),Krt=Np(),zrt=Pue(),aR=nv(),xAe=bAe(),kAe=rv(),Zrt=NH(),Xrt=jH(),QAe=GH(),$rt=["request","response","redirect","uploadProgress","downloadProgress"];function RAe(t){let e,r,s=new Jrt.EventEmitter,a=new zrt((c,f,p)=>{let h=E=>{let C=new kAe.default(void 0,t);C.retryCount=E,C._noPipe=!0,p(()=>C.destroy()),p.shouldReject=!1,p(()=>f(new aR.CancelError(C))),e=C,C.once("response",async I=>{var T;if(I.retryCount=E,I.request.aborted)return;let N;try{N=await Xrt.default(C),I.rawBody=N}catch{return}if(C._isAboutToError)return;let U=((T=I.headers["content-encoding"])!==null&&T!==void 0?T:"").toLowerCase(),W=["gzip","deflate","br"].includes(U),{options:ee}=C;if(W&&!ee.decompress)I.body=N;else try{I.body=xAe.default(I,ee.responseType,ee.parseJson,ee.encoding)}catch(ie){if(I.body=N.toString(),QAe.isResponseOk(I)){C._beforeError(ie);return}}try{for(let[ie,ue]of ee.hooks.afterResponse.entries())I=await ue(I,async le=>{let me=kAe.default.normalizeArguments(void 0,{...le,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},ee);me.hooks.afterResponse=me.hooks.afterResponse.slice(0,ie);for(let Be of me.hooks.beforeRetry)await Be(me);let pe=RAe(me);return p(()=>{pe.catch(()=>{}),pe.cancel()}),pe})}catch(ie){C._beforeError(new aR.RequestError(ie.message,ie,C));return}if(!QAe.isResponseOk(I)){C._beforeError(new aR.HTTPError(I));return}r=I,c(C.options.resolveBodyOnly?I.body:I)});let S=I=>{if(a.isCanceled)return;let{options:T}=C;if(I instanceof aR.HTTPError&&!T.throwHttpErrors){let{response:N}=I;c(C.options.resolveBodyOnly?N.body:N);return}f(I)};C.once("error",S);let b=C.options.body;C.once("retry",(I,T)=>{var N,U;if(b===((N=T.request)===null||N===void 0?void 0:N.options.body)&&Krt.default.nodeStream((U=T.request)===null||U===void 0?void 0:U.options.body)){S(T);return}h(I)}),Zrt.default(C,s,$rt)};h(0)});a.on=(c,f)=>(s.on(c,f),a);let n=c=>{let f=(async()=>{await a;let{options:p}=r.request;return xAe.default(r,c,p.parseJson,p.encoding)})();return Object.defineProperties(f,Object.getOwnPropertyDescriptors(a)),f};return a.json=()=>{let{headers:c}=e.options;return!e.writableFinished&&c.accept===void 0&&(c.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}S0.default=RAe;Vrt(nv(),S0)});var TAe=_(ej=>{"use strict";Object.defineProperty(ej,"__esModule",{value:!0});var ent=nv();function tnt(t,...e){let r=(async()=>{if(t instanceof ent.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),s=()=>r;return r.json=s,r.text=s,r.buffer=s,r.on=s,r}ej.default=tnt});var OAe=_(tj=>{"use strict";Object.defineProperty(tj,"__esModule",{value:!0});var FAe=Np();function NAe(t){for(let e of Object.values(t))(FAe.default.plainObject(e)||FAe.default.array(e))&&NAe(e);return Object.freeze(t)}tj.default=NAe});var MAe=_(LAe=>{"use strict";Object.defineProperty(LAe,"__esModule",{value:!0})});var rj=_(Nc=>{"use strict";var rnt=Nc&&Nc.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),nnt=Nc&&Nc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&rnt(e,t,r)};Object.defineProperty(Nc,"__esModule",{value:!0});Nc.defaultHandler=void 0;var UAe=Np(),Fc=$H(),int=TAe(),cR=rv(),snt=OAe(),ont={RequestError:Fc.RequestError,CacheError:Fc.CacheError,ReadError:Fc.ReadError,HTTPError:Fc.HTTPError,MaxRedirectsError:Fc.MaxRedirectsError,TimeoutError:Fc.TimeoutError,ParseError:Fc.ParseError,CancelError:Fc.CancelError,UnsupportedProtocolError:Fc.UnsupportedProtocolError,UploadError:Fc.UploadError},ant=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:lR}=cR.default,_Ae=(...t)=>{let e;for(let r of t)e=lR(void 0,r,e);return e},lnt=t=>t.isStream?new cR.default(void 0,t):Fc.default(t),cnt=t=>"defaults"in t&&"options"in t.defaults,unt=["get","post","put","patch","head","delete"];Nc.defaultHandler=(t,e)=>e(t);var HAe=(t,e)=>{if(t)for(let r of t)r(e)},jAe=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(s=>(a,n)=>{let c,f=s(a,p=>(c=n(p),c));if(f!==c&&!a.isStream&&c){let p=f,{then:h,catch:E,finally:C}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(c)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(c)),p.then=h,p.catch=E,p.finally=C}return f});let e=(s,a={},n)=>{var c,f;let p=0,h=E=>t.handlers[p++](E,p===t.handlers.length?lnt:h);if(UAe.default.plainObject(s)){let E={...s,...a};cR.setNonEnumerableProperties([s,a],E),a=E,s=void 0}try{let E;try{HAe(t.options.hooks.init,a),HAe((c=a.hooks)===null||c===void 0?void 0:c.init,a)}catch(S){E=S}let C=lR(s,a,n??t.options);if(C[cR.kIsNormalizedAlready]=!0,E)throw new Fc.RequestError(E.message,E,C);return h(C)}catch(E){if(a.isStream)throw E;return int.default(E,t.options.hooks.beforeError,(f=a.hooks)===null||f===void 0?void 0:f.beforeError)}};e.extend=(...s)=>{let a=[t.options],n=[...t._rawHandlers],c;for(let f of s)cnt(f)?(a.push(f.defaults.options),n.push(...f.defaults._rawHandlers),c=f.defaults.mutableDefaults):(a.push(f),"handlers"in f&&n.push(...f.handlers),c=f.mutableDefaults);return n=n.filter(f=>f!==Nc.defaultHandler),n.length===0&&n.push(Nc.defaultHandler),jAe({options:_Ae(...a),handlers:n,mutableDefaults:!!c})};let r=async function*(s,a){let n=lR(s,a,t.options);n.resolveBodyOnly=!1;let c=n.pagination;if(!UAe.default.object(c))throw new TypeError("`options.pagination` must be implemented");let f=[],{countLimit:p}=c,h=0;for(;h{let n=[];for await(let c of r(s,a))n.push(c);return n},e.paginate.each=r,e.stream=(s,a)=>e(s,{...a,isStream:!0});for(let s of unt)e[s]=(a,n)=>e(a,{...n,method:s}),e.stream[s]=(a,n)=>e(a,{...n,method:s,isStream:!0});return Object.assign(e,ont),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:snt.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=_Ae,e};Nc.default=jAe;nnt(MAe(),Nc)});var WAe=_((Op,uR)=>{"use strict";var fnt=Op&&Op.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),GAe=Op&&Op.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&fnt(e,t,r)};Object.defineProperty(Op,"__esModule",{value:!0});var Ant=Ie("url"),qAe=rj(),pnt={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 s of e){let a=s.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new Ant.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:[qAe.defaultHandler],mutableDefaults:!1},nj=qAe.default(pnt);Op.default=nj;uR.exports=nj;uR.exports.default=nj;uR.exports.__esModule=!0;GAe(rj(),Op);GAe($H(),Op)});var ln={};Vt(ln,{Method:()=>ZAe,del:()=>ynt,get:()=>oj,getNetworkSettings:()=>zAe,post:()=>aj,put:()=>mnt,request:()=>iv});async function ij(t){return Yl(VAe,t,()=>ce.readFilePromise(t).then(e=>(VAe.set(t,e),e)))}function dnt({statusCode:t,statusMessage:e},r){let s=Ht(r,t,ht.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return KE(r,`${s}${e?` (${e})`:""}`,a)}async function fR(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(s){if(s.name!=="HTTPError")throw s;let a=r?.(s,e)??s.response.body?.error;a==null&&(s.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=s.message),s.code==="ETIMEDOUT"&&s.event==="socket"&&(a+=`(can be increased via ${Ht(e,"httpTimeout",ht.SETTING)})`);let n=new jt(35,a,c=>{s.response&&c.reportError(35,` ${Kf(e,{label:"Response Code",value:_u(ht.NO_HINT,dnt(s.response,e))})}`),s.request&&(c.reportError(35,` ${Kf(e,{label:"Request Method",value:_u(ht.NO_HINT,s.request.options.method)})}`),c.reportError(35,` ${Kf(e,{label:"Request URL",value:_u(ht.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&c.reportError(35,` ${Kf(e,{label:"Request Redirects",value:_u(ht.NO_HINT,z4(e,s.request.redirects,ht.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&c.reportError(35,` ${Kf(e,{label:"Request Retry Count",value:_u(ht.NO_HINT,`${Ht(e,s.request.retryCount,ht.NUMBER)} (can be increased via ${Ht(e,"httpRetry",ht.SETTING)})`)})}`)});throw n.originalError=s,n}}function zAe(t,e){let r=[...e.configuration.get("networkSettings")].sort(([c],[f])=>f.length-c.length),s={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(s),n=typeof t=="string"?new URL(t):t;for(let[c,f]of r)if(sj.default.isMatch(n.hostname,c))for(let p of a){let h=f.get(p);h!==null&&typeof s[p]>"u"&&(s[p]=h)}for(let c of a)typeof s[c]>"u"&&(s[c]=e.configuration.get(c));return s}async function iv(t,e,{configuration:r,headers:s,jsonRequest:a,jsonResponse:n,method:c="GET",wrapNetworkRequest:f}){let p={target:t,body:e,configuration:r,headers:s,jsonRequest:a,jsonResponse:n,method:c},h=async()=>await Ent(t,e,p),E=typeof f<"u"?await f(h,p):h;return await(await r.reduceHook(S=>S.wrapNetworkRequest,E,p))()}async function oj(t,{configuration:e,jsonResponse:r,customErrorMessage:s,wrapNetworkRequest:a,...n}){let c=()=>fR(iv(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:s}).then(p=>p.body),f=await(typeof a<"u"?c():Yl(YAe,t,()=>c().then(p=>(YAe.set(t,p),p))));return r?JSON.parse(f.toString()):f}async function mnt(t,e,{customErrorMessage:r,...s}){return(await fR(iv(t,e,{...s,method:"PUT"}),{customErrorMessage:r,configuration:s.configuration})).body}async function aj(t,e,{customErrorMessage:r,...s}){return(await fR(iv(t,e,{...s,method:"POST"}),{customErrorMessage:r,configuration:s.configuration})).body}async function ynt(t,{customErrorMessage:e,...r}){return(await fR(iv(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function Ent(t,e,{configuration:r,headers:s,jsonRequest:a,jsonResponse:n,method:c="GET"}){let f=typeof t=="string"?new URL(t):t,p=zAe(f,{configuration:r});if(p.enableNetwork===!1)throw new jt(80,`Request to '${f.href}' has been blocked because of your configuration settings`);if(f.protocol==="http:"&&!sj.default.isMatch(f.hostname,r.get("unsafeHttpWhitelist")))throw new jt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${f.hostname})`);let h={headers:s,method:c};h.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?h.body=e:h.json=e);let E=r.get("httpTimeout"),C=r.get("httpRetry"),S=r.get("enableStrictSsl"),b=p.httpsCaFilePath,I=p.httpsCertFilePath,T=p.httpsKeyFilePath,{default:N}=await Promise.resolve().then(()=>ut(WAe())),U=b?await ij(b):void 0,W=I?await ij(I):void 0,ee=T?await ij(T):void 0,ie={rejectUnauthorized:S,ca:U,cert:W,key:ee},ue={http:p.httpProxy?new Iue({proxy:p.httpProxy,proxyRequestOptions:ie}):hnt,https:p.httpsProxy?new Cue({proxy:p.httpsProxy,proxyRequestOptions:ie}):gnt},le=N.extend({timeout:{socket:E},retry:C,agent:ue,https:{rejectUnauthorized:S,certificateAuthority:U,certificate:W,key:ee},...h});return r.getLimit("networkConcurrency")(()=>le(f))}var JAe,KAe,sj,YAe,VAe,hnt,gnt,ZAe,AR=Ze(()=>{Dt();wue();JAe=Ie("https"),KAe=Ie("http"),sj=ut(Go());Rc();xc();bc();YAe=new Map,VAe=new Map,hnt=new KAe.Agent({keepAlive:!0}),gnt=new JAe.Agent({keepAlive:!0});ZAe=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(ZAe||{})});var fs={};Vt(fs,{availableParallelism:()=>cj,getArchitecture:()=>sv,getArchitectureName:()=>vnt,getArchitectureSet:()=>lj,getCaller:()=>bnt,major:()=>Int,openUrl:()=>Cnt});function Bnt(){if(process.platform!=="linux")return null;let t;try{t=ce.readFileSync(wnt)}catch{}if(typeof t<"u"){if(t&&(t.includes("GLIBC")||t.includes("GNU libc")||t.includes("GNU C Library")))return"glibc";if(t&&t.includes("musl"))return"musl"}let r=(process.report?.getReport()??{}).sharedObjects??[],s=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return p0(r,a=>{let n=a.match(s);if(!n)return p0.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 sv(){return $Ae=$Ae??{os:(process.env.YARN_IS_TEST_ENV?process.env.YARN_OS_OVERRIDE:void 0)??process.platform,cpu:(process.env.YARN_IS_TEST_ENV?process.env.YARN_CPU_OVERRIDE:void 0)??process.arch,libc:(process.env.YARN_IS_TEST_ENV?process.env.YARN_LIBC_OVERRIDE:void 0)??Bnt()}}function vnt(t=sv()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function lj(){let t=sv();return epe=epe??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function Pnt(t){let e=Snt.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,s=e[2]&&e[2].indexOf("eval")===0,a=Dnt.exec(e[2]);return s&&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 bnt(){let e=new Error().stack.split(` -`)[3];return Pnt(e)}function cj(){return typeof pR.default.availableParallelism<"u"?pR.default.availableParallelism():Math.max(1,pR.default.cpus().length)}var pR,Int,XAe,Cnt,wnt,$Ae,epe,Snt,Dnt,hR=Ze(()=>{Dt();pR=ut(Ie("os"));gR();bc();Int=Number(process.versions.node.split(".")[0]),XAe=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),Cnt=typeof XAe<"u"?async t=>{try{return await uj(XAe,[t],{cwd:J.cwd()}),!0}catch{return!1}}:void 0,wnt="/usr/bin/ldd";Snt=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Dnt=/\((\S*)(?::(\d+))(?::(\d+))\)/});function gj(t,e,r,s,a){let n=YB(r);if(s.isArray||s.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((c,f)=>fj(t,`${e}[${f}]`,c,s,a)):String(n).split(/,/).map(c=>fj(t,e,c,s,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return fj(t,e,r,s,a)}function fj(t,e,r,s,a){let n=YB(r);switch(s.type){case"ANY":return FQ(n);case"SHAPE":return Rnt(t,e,r,s,a);case"MAP":return Tnt(t,e,r,s,a)}if(n===null&&!s.isNullable&&s.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(s.values?.includes(n))return n;let f=(()=>{if(s.type==="BOOLEAN"&&typeof n!="string")return kB(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=Vk(n,{env:t.env});switch(s.type){case"ABSOLUTE_PATH":{let h=a,E=U8(r);return E&&E[0]!=="<"&&(h=J.dirname(E)),J.resolve(h,fe.toPortablePath(p))}case"LOCATOR_LOOSE":return Qp(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return Qp(p);case"BOOLEAN":return kB(p);default:return p}})();if(s.values&&!s.values.includes(f))throw new Error(`Invalid value, expected one of ${s.values.join(", ")}`);return f}function Rnt(t,e,r,s,a){let n=YB(r);if(typeof n!="object"||Array.isArray(n))throw new nt(`Object configuration settings "${e}" must be an object`);let c=dj(t,s,{ignoreArrays:!0});if(n===null)return c;for(let[f,p]of Object.entries(n)){let h=`${e}.${f}`;if(!s.properties[f])throw new nt(`Unrecognized configuration settings found: ${e}.${f} - run "yarn config" to see the list of settings supported in Yarn`);c.set(f,gj(t,h,p,s.properties[f],a))}return c}function Tnt(t,e,r,s,a){let n=YB(r),c=new Map;if(typeof n!="object"||Array.isArray(n))throw new nt(`Map configuration settings "${e}" must be an object`);if(n===null)return c;for(let[f,p]of Object.entries(n)){let h=s.normalizeKeys?s.normalizeKeys(f):f,E=`${e}['${h}']`,C=s.valueDefinition;c.set(h,gj(t,E,p,C,a))}return c}function dj(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let s=new Map;for(let[a,n]of Object.entries(e.properties))s.set(a,dj(t,n));return s}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(s=>J.normalize(s)):J.isAbsolute(e.default)?J.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(s=>J.resolve(t.projectCwd,s)):J.resolve(t.projectCwd,e.default);default:return e.default}}function mR(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return Qnt;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return fe.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let s=[];for(let a of t)s.push(mR(a,e,r));return s}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let s=new Map;for(let[a,n]of t.entries()){let c=mR(n,e.valueDefinition,r);typeof c<"u"&&s.set(a,c)}return s}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let s=new Map;for(let[a,n]of t.entries()){let c=e.properties[a],f=mR(n,c,r);typeof f<"u"&&s.set(a,f)}return s}return t}function Fnt(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(yR)&&(e=(0,rpe.default)(e.slice(yR.length)),t[e]=r);return t}function pj(){let t=`${yR}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return hj}async function tpe(t){try{return await ce.readFilePromise(t)}catch{return Buffer.of()}}async function Nnt(t,e){return Buffer.compare(...await Promise.all([tpe(t),tpe(e)]))===0}async function Ont(t,e){let[r,s]=await Promise.all([ce.statPromise(t),ce.statPromise(e)]);return r.dev===s.dev&&r.ino===s.ino}async function Mnt({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await Lnt(r,e)?null:r}var rpe,Lp,npe,ipe,spe,Aj,xnt,ov,knt,Mp,yR,hj,Qnt,wI,ope,ER,dR,Lnt,ze,av=Ze(()=>{Dt();wc();rpe=ut(Cre()),Lp=ut(Fd());Yt();npe=ut(hne()),ipe=Ie("module"),spe=ut(Ld()),Aj=Ie("stream");$ce();oI();Q8();R8();T8();fue();F8();tm();due();OQ();xc();I0();AR();bc();hR();Tp();Wo();xnt=function(){if(!Lp.GITHUB_ACTIONS||!process.env.GITHUB_EVENT_PATH)return!1;let t=fe.toPortablePath(process.env.GITHUB_EVENT_PATH),e;try{e=ce.readJsonSync(t)}catch{return!1}return!(!("repository"in e)||!e.repository||(e.repository.private??!0))}(),ov=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"]),knt=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","zipDataEpilogue","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","osOverride","cpuOverride","libcOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),Mp=/^(?!v)[a-z0-9._-]+$/i,yR="yarn_",hj=".yarnrc.yml",Qnt="********",wI=(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))(wI||{}),ope=ht,ER=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(ER||{}),dR={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:H8()},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:pj()},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:Zk,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:K4,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:Lp.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:!Lp.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:!Lp.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:cj()},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($k),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:Lp.isPR&&xnt,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}}}}}}}};Lnt=process.platform==="win32"?Nnt:Ont;ze=class t{constructor(e){this.isCI=Lp.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,s){let a=new t(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(dR);let n=typeof s<"u"?s:r instanceof Map?r:new Map;for(let[c,f]of n)a.activatePlugin(c,f);return a}static async find(e,r,{strict:s=!0,usePathCheck:a=null,useRc:n=!0}={}){let c=Fnt();delete c.rcFilename;let f=new t(e),p=await t.findRcFiles(e),h=await t.findFolderRcFile(fI());h&&(p.find(me=>me.path===h.path)||p.unshift(h));let E=gue(p.map(le=>[le.path,le.data])),C=vt.dot,S=new Set(Object.keys(dR)),b=({yarnPath:le,ignorePath:me,injectEnvironmentFiles:pe})=>({yarnPath:le,ignorePath:me,injectEnvironmentFiles:pe}),I=({yarnPath:le,ignorePath:me,injectEnvironmentFiles:pe,...Be})=>{let Ce={};for(let[g,we]of Object.entries(Be))S.has(g)&&(Ce[g]=we);return Ce},T=({yarnPath:le,ignorePath:me,...pe})=>{let Be={};for(let[Ce,g]of Object.entries(pe))S.has(Ce)||(Be[Ce]=g);return Be};if(f.importSettings(b(dR)),f.useWithSource("",b(c),e,{strict:!1}),E){let[le,me]=E;f.useWithSource(le,b(me),C,{strict:!1})}if(a){if(await Mnt({configuration:f,selfPath:a})!==null)return f;f.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let N=await t.findProjectCwd(e);f.startingCwd=e,f.projectCwd=N;let U=Object.assign(Object.create(null),process.env);f.env=U;let W=await Promise.all(f.get("injectEnvironmentFiles").map(async le=>{let me=le.endsWith("?")?await ce.readFilePromise(le.slice(0,-1),"utf8").catch(()=>""):await ce.readFilePromise(le,"utf8");return(0,npe.parse)(me)}));for(let le of W)for(let[me,pe]of Object.entries(le))f.env[me]=Vk(pe,{env:U});if(f.importSettings(I(dR)),f.useWithSource("",I(c),e,{strict:s}),E){let[le,me]=E;f.useWithSource(le,I(me),C,{strict:s})}let ee=le=>"default"in le?le.default:le,ie=new Map([["@@core",Xce]]);if(r!==null)for(let le of r.plugins.keys())ie.set(le,ee(r.modules.get(le)));for(let[le,me]of ie)f.activatePlugin(le,me);let ue=new Map([]);if(r!==null){let le=new Map;for(let[Be,Ce]of r.modules)le.set(Be,()=>Ce);let me=new Set,pe=async(Be,Ce)=>{let{factory:g,name:we}=bp(Be);if(!g||me.has(we))return;let ye=new Map(le),Ae=X=>{if((0,ipe.isBuiltin)(X))return bp(X);if(ye.has(X))return ye.get(X)();throw new nt(`This plugin cannot access the package referenced via ${X} which is neither a builtin, nor an exposed entry`)},se=await qE(async()=>ee(await g(Ae)),X=>`${X} (when initializing ${we}, defined in ${Ce})`);le.set(we,()=>se),me.add(we),ue.set(we,se)};if(c.plugins)for(let Be of c.plugins.split(";")){let Ce=J.resolve(e,fe.toPortablePath(Be));await pe(Ce,"")}for(let{path:Be,cwd:Ce,data:g}of p)if(n&&Array.isArray(g.plugins))for(let we of g.plugins){let ye=typeof we!="string"?we.path:we,Ae=we?.spec??"",se=we?.checksum??"";if(ov.has(Ae))continue;let X=J.resolve(Ce,fe.toPortablePath(ye));if(!await ce.existsPromise(X)){if(!Ae){let mt=Ht(f,J.basename(X,".cjs"),ht.NAME),j=Ht(f,".gitignore",ht.NAME),rt=Ht(f,f.values.get("rcFilename"),ht.NAME),Fe=Ht(f,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",ht.URL);throw new nt(`Missing source for the ${mt} plugin - please try to remove the plugin from ${rt} then reinstall it manually. This error usually occurs because ${j} is incorrect, check ${Fe} to make sure your plugin folder isn't gitignored.`)}if(!Ae.match(/^https?:/)){let mt=Ht(f,J.basename(X,".cjs"),ht.NAME),j=Ht(f,f.values.get("rcFilename"),ht.NAME);throw new nt(`Failed to recognize the source for the ${mt} plugin - please try to delete the plugin from ${j} then reinstall it manually.`)}let De=await oj(Ae,{configuration:f}),Te=cs(De);if(se&&se!==Te){let mt=Ht(f,J.basename(X,".cjs"),ht.NAME),j=Ht(f,f.values.get("rcFilename"),ht.NAME),rt=Ht(f,`yarn plugin import ${Ae}`,ht.CODE);throw new nt(`Failed to fetch the ${mt} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${j} then run ${rt} to reimport it.`)}await ce.mkdirPromise(J.dirname(X),{recursive:!0}),await ce.writeFilePromise(X,De)}await pe(X,Be)}}for(let[le,me]of ue)f.activatePlugin(le,me);if(f.useWithSource("",T(c),e,{strict:s}),E){let[le,me]=E;f.useWithSource(le,T(me),C,{strict:s})}return f.get("enableGlobalCache")&&(f.values.set("cacheFolder",`${f.get("globalFolder")}/cache`),f.sources.set("cacheFolder","")),f}static async findRcFiles(e){let r=pj(),s=[],a=e,n=null;for(;a!==n;){n=a;let c=J.join(n,r);if(ce.existsSync(c)){let f,p;try{p=await ce.readFilePromise(c,"utf8"),f=as(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 nt(`Parse error when loading ${c}; please check it's proper Yaml${h}`)}s.unshift({path:c,cwd:n,data:f})}a=J.dirname(n)}return s}static async findFolderRcFile(e){let r=J.join(e,Er.rc),s;try{s=await ce.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=as(s);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,s=e,a=null;for(;s!==a;){if(a=s,ce.existsSync(J.join(a,Er.lockfile)))return a;ce.existsSync(J.join(a,Er.manifest))&&(r=a),s=J.dirname(a)}return r}static async updateConfiguration(e,r,s={}){let a=pj(),n=J.join(e,a),c=ce.existsSync(n)?as(await ce.readFilePromise(n,"utf8")):{},f=!1,p;if(typeof r=="function"){try{p=r(c)}catch{p=r({})}if(p===c)return!1}else{p=c;for(let h of Object.keys(r)){let E=c[h],C=r[h],S;if(typeof C=="function")try{S=C(E)}catch{S=C(void 0)}else S=C;E!==S&&(S===t.deleteProperty?delete p[h]:p[h]=S,f=!0)}if(!f)return!1}return await ce.changeFilePromise(n,nl(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await t.updateConfiguration(e,s=>{let a=s.plugins??[];if(a.length===0)return{...s,plugins:r};let n=[],c=[...r];for(let f of a){let p=typeof f!="string"?f.path:f,h=c.find(E=>E.path===p);h?(n.push(h),c=c.filter(E=>E!==h)):n.push(f)}return n.push(...c),{...s,plugins:n}})}static async updateHomeConfiguration(e){let r=fI();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,s]of Object.entries(e))if(s!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,s),this.values.set(r,dj(this,s))}}useWithSource(e,r,s,a){try{this.use(e,r,s,a)}catch(n){throw n.message+=` (in ${Ht(this,e,ht.PATH)})`,n}}use(e,r,s,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let c of["enableStrictSettings",...Object.keys(r)]){let f=r[c],p=U8(f);if(p&&(e=p),typeof f>"u"||c==="plugins"||e===""&&knt.has(c))continue;if(c==="rcFilename")throw new nt(`The rcFilename settings can only be set via ${`${yR}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(c);if(!h){let C=fI(),S=e[0]!=="<"?J.dirname(e):null;if(a&&!(S!==null?C===S:!1))throw new nt(`Unrecognized or legacy configuration settings found: ${c} - run "yarn config" to see the list of settings supported in Yarn`);this.invalid.set(c,e);continue}if(this.sources.has(c)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let E;try{E=gj(this,c,f,h,s)}catch(C){throw C.message+=` in ${Ht(this,e,ht.PATH)}`,C}if(c==="enableStrictSettings"&&e!==""){a=E;continue}if(h.type==="MAP"){let C=this.values.get(c);this.values.set(c,new Map(n?[...C,...E]:[...E,...C])),this.sources.set(c,`${this.sources.get(c)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let C=this.values.get(c);this.values.set(c,n?[...C,...E]:[...E,...C]),this.sources.set(c,`${this.sources.get(c)}, ${e}`)}else this.values.set(c,E),this.sources.set(c,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:s=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new nt(`Couldn't find a configuration settings named "${e}"`);return mR(a,n,{hideSecrets:r,getNativePaths:s})}getSubprocessStreams(e,{header:r,prefix:s,report:a}){let n,c,f=ce.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${s} ${Ht(this,"STDOUT","green")}`),h=a.createStreamReporter(`${s} ${Ht(this,"STDERR","red")}`);n=new Aj.PassThrough,n.pipe(p),n.pipe(f),c=new Aj.PassThrough,c.pipe(h),c.pipe(f)}else n=f,c=f,typeof r<"u"&&n.write(`${r} -`);return{stdout:n,stderr:c}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let s of r.resolvers||[])e.push(new s);return new rm([new TQ,new Ei,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let s of r.fetchers||[])e.push(new s);return new aI([new lI,new cI,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let s of r.linkers||[])e.push(new s);return e}getSupportedArchitectures(){let e=sv(),r=this.get("supportedArchitectures"),s=r.get("os");s!==null&&(s=s.map(c=>c==="current"?e.os:c));let a=r.get("cpu");a!==null&&(a=a.map(c=>c==="current"?e.cpu:c));let n=r.get("libc");return n!==null&&(n=Wl(n,c=>c==="current"?e.libc??Wl.skip:c)),{os:s,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=(s,a,{userProvided:n=!1}={})=>{if(!cl(s.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let c=new Ut;c.load(a,{yamlCompatibilityMode:!0});let f=xB(e,s.identHash),p=[];f.push([s.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:s};for(let E of c.dependencies.values())p.push({...h,type:"Dependency",descriptor:E});for(let E of c.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:E});for(let[E,C]of c.peerDependenciesMeta)for(let[S,b]of Object.entries(C))p.push({...h,type:"PeerDependencyMeta",selector:E,key:S,value:b})};await this.triggerHook(s=>s.registerPackageExtensions,this,r);for(let[s,a]of this.get("packageExtensions"))r(C0(s,!0),Yk(a),{userProvided:!0});return e}normalizeLocator(e){return cl(e.reference)?Ws(e,`${this.get("defaultProtocol")}${e.reference}`):Mp.test(e.reference)?Ws(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return cl(e.range)?On(e,`${this.get("defaultProtocol")}${e.range}`):Mp.test(e.range)?On(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,s])=>[r,this.normalizeDependency(s)]))}normalizePackage(e,{packageExtensions:r}){let s=LB(e),a=r.get(e.identHash);if(typeof a<"u"){let c=e.version;if(c!==null){for(let[f,p]of a)if(Xf(c,f))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof s.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",s.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof s.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",s.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let E=s.peerDependenciesMeta.get(h.selector);(typeof E>"u"||!Object.hasOwn(E,h.key)||E[h.key]!==h.value)&&(h.status="active",Yl(s.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:H4(h)}}}let n=c=>c.scope?`${c.scope}__${c.name}`:`${c.name}`;for(let c of s.peerDependenciesMeta.keys()){let f=Sa(c);s.peerDependencies.has(f.identHash)||s.peerDependencies.set(f.identHash,On(f,"*"))}for(let c of s.peerDependencies.values()){if(c.scope==="types")continue;let f=n(c),p=Da("types",f),h=un(p);s.peerDependencies.has(p.identHash)||s.peerDependenciesMeta.has(h)||s.dependencies.has(p.identHash)||(s.peerDependencies.set(p.identHash,On(p,"*")),s.peerDependenciesMeta.set(h,{optional:!0}))}return s.dependencies=new Map(qs(s.dependencies,([,c])=>al(c))),s.peerDependencies=new Map(qs(s.peerDependencies,([,c])=>al(c))),s}getLimit(e){return Yl(this.limits,e,()=>(0,spe.default)(this.get(e)))}async triggerHook(e,...r){for(let s of this.plugins.values()){let a=s.hooks;if(!a)continue;let n=e(a);n&&await n(...r)}}async triggerMultipleHooks(e,r){for(let s of r)await this.triggerHook(e,...s)}async reduceHook(e,r,...s){let a=r;for(let n of this.plugins.values()){let c=n.hooks;if(!c)continue;let f=e(c);f&&(a=await f(a,...s))}return a}async firstHook(e,...r){for(let s of this.plugins.values()){let a=s.hooks;if(!a)continue;let n=e(a);if(!n)continue;let c=await n(...r);if(typeof c<"u")return c}return null}}});var qr={};Vt(qr,{EndStrategy:()=>Ij,ExecError:()=>IR,PipeError:()=>lv,execvp:()=>uj,pipevp:()=>Wu});function om(t){return t!==null&&typeof t.fd=="number"}function mj(){}function yj(){for(let t of am)t.kill()}async function Wu(t,e,{cwd:r,env:s=process.env,strict:a=!1,stdin:n=null,stdout:c,stderr:f,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":om(n)&&(h[0]=n),om(c)&&(h[1]=c),om(f)&&(h[2]=f);let E=(0,Ej.default)(t,e,{cwd:fe.fromPortablePath(r),env:{...s,PWD:fe.fromPortablePath(r)},stdio:h});am.add(E),am.size===1&&(process.on("SIGINT",mj),process.on("SIGTERM",yj)),!om(n)&&n!==null&&n.pipe(E.stdin),om(c)||E.stdout.pipe(c,{end:!1}),om(f)||E.stderr.pipe(f,{end:!1});let C=()=>{for(let S of new Set([c,f]))om(S)||S.end()};return new Promise((S,b)=>{E.on("error",I=>{am.delete(E),am.size===0&&(process.off("SIGINT",mj),process.off("SIGTERM",yj)),(p===2||p===1)&&C(),b(I)}),E.on("close",(I,T)=>{am.delete(E),am.size===0&&(process.off("SIGINT",mj),process.off("SIGTERM",yj)),(p===2||p===1&&I!==0)&&C(),I===0||!a?S({code:Cj(I,T)}):b(new lv({fileName:t,code:I,signal:T}))})})}async function uj(t,e,{cwd:r,env:s=process.env,encoding:a="utf8",strict:n=!1}){let c=["ignore","pipe","pipe"],f=[],p=[],h=fe.fromPortablePath(r);typeof s.PWD<"u"&&(s={...s,PWD:h});let E=(0,Ej.default)(t,e,{cwd:h,env:s,stdio:c});return E.stdout.on("data",C=>{f.push(C)}),E.stderr.on("data",C=>{p.push(C)}),await new Promise((C,S)=>{E.on("error",b=>{let I=ze.create(r),T=Ht(I,t,ht.PATH);S(new jt(1,`Process ${T} failed to spawn`,N=>{N.reportError(1,` ${Kf(I,{label:"Thrown Error",value:_u(ht.NO_HINT,b.message)})}`)}))}),E.on("close",(b,I)=>{let T=a==="buffer"?Buffer.concat(f):Buffer.concat(f).toString(a),N=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);b===0||!n?C({code:Cj(b,I),stdout:T,stderr:N}):S(new IR({fileName:t,code:b,signal:I,stdout:T,stderr:N}))})})}function Cj(t,e){let r=Unt.get(e);return typeof r<"u"?128+r:t??1}function _nt(t,e,{configuration:r,report:s}){s.reportError(1,` ${Kf(r,t!==null?{label:"Exit Code",value:_u(ht.NUMBER,t)}:{label:"Exit Signal",value:_u(ht.CODE,e)})}`)}var Ej,Ij,lv,IR,am,Unt,gR=Ze(()=>{Dt();Ej=ut(UU());av();Rc();xc();Ij=(s=>(s[s.Never=0]="Never",s[s.ErrorCode=1]="ErrorCode",s[s.Always=2]="Always",s))(Ij||{}),lv=class extends jt{constructor({fileName:e,code:r,signal:s}){let a=ze.create(J.cwd()),n=Ht(a,e,ht.PATH);super(1,`Child ${n} reported an error`,c=>{_nt(r,s,{configuration:a,report:c})}),this.code=Cj(r,s)}},IR=class extends lv{constructor({fileName:e,code:r,signal:s,stdout:a,stderr:n}){super({fileName:e,code:r,signal:s}),this.stdout=a,this.stderr=n}};am=new Set;Unt=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function lpe(t){ape=t}function cv(){return typeof wj>"u"&&(wj=ape()),wj}var wj,ape,Bj=Ze(()=>{ape=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var cpe=_((CR,Sj)=>{var Hnt=Object.assign({},Ie("fs")),vj=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:{},s,a;r.ready=new Promise(function(Ke,st){s=Ke,a=st});var n={},c;for(c in r)r.hasOwnProperty(c)&&(n[c]=r[c]);var f=[],p="./this.program",h=function(Ke,st){throw st},E=!1,C=!0,S="";function b(Ke){return r.locateFile?r.locateFile(Ke,S):S+Ke}var I,T,N,U;C&&(E?S=Ie("path").dirname(S)+"/":S=__dirname+"/",I=function(st,St){var lr=Me(st);return lr?St?lr:lr.toString():(N||(N=Hnt),U||(U=Ie("path")),st=U.normalize(st),N.readFileSync(st,St?null:"utf8"))},T=function(st){var St=I(st,!0);return St.buffer||(St=new Uint8Array(St)),we(St.buffer),St},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),f=process.argv.slice(2),h=function(Ke){process.exit(Ke)},r.inspect=function(){return"[Emscripten Module object]"});var W=r.print||console.log.bind(console),ee=r.printErr||console.warn.bind(console);for(c in n)n.hasOwnProperty(c)&&(r[c]=n[c]);n=null,r.arguments&&(f=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var ie=0,ue=function(Ke){ie=Ke},le;r.wasmBinary&&(le=r.wasmBinary);var me=r.noExitRuntime||!0;typeof WebAssembly!="object"&&ts("no native wasm support detected");function pe(Ke,st,St){switch(st=st||"i8",st.charAt(st.length-1)==="*"&&(st="i32"),st){case"i1":return Ve[Ke>>0];case"i8":return Ve[Ke>>0];case"i16":return mh((Ke>>1)*2);case"i32":return to((Ke>>2)*4);case"i64":return to((Ke>>2)*4);case"float":return Af((Ke>>2)*4);case"double":return dh((Ke>>3)*8);default:ts("invalid type for getValue: "+st)}return null}var Be,Ce=!1,g;function we(Ke,st){Ke||ts("Assertion failed: "+st)}function ye(Ke){var st=r["_"+Ke];return we(st,"Cannot call unknown function "+Ke+", make sure it is exported"),st}function Ae(Ke,st,St,lr,te){var Ee={string:function(Gi){var Rn=0;if(Gi!=null&&Gi!==0){var Ga=(Gi.length<<2)+1;Rn=wi(Ga),mt(Gi,Rn,Ga)}return Rn},array:function(Gi){var Rn=wi(Gi.length);return Fe(Gi,Rn),Rn}};function Oe(Gi){return st==="string"?De(Gi):st==="boolean"?!!Gi:Gi}var dt=ye(Ke),Et=[],Pt=0;if(lr)for(var tr=0;tr=St)&&ke[lr];)++lr;return X.decode(ke.subarray(Ke,lr))}function Te(Ke,st,St,lr){if(!(lr>0))return 0;for(var te=St,Ee=St+lr-1,Oe=0;Oe=55296&&dt<=57343){var Et=Ke.charCodeAt(++Oe);dt=65536+((dt&1023)<<10)|Et&1023}if(dt<=127){if(St>=Ee)break;st[St++]=dt}else if(dt<=2047){if(St+1>=Ee)break;st[St++]=192|dt>>6,st[St++]=128|dt&63}else if(dt<=65535){if(St+2>=Ee)break;st[St++]=224|dt>>12,st[St++]=128|dt>>6&63,st[St++]=128|dt&63}else{if(St+3>=Ee)break;st[St++]=240|dt>>18,st[St++]=128|dt>>12&63,st[St++]=128|dt>>6&63,st[St++]=128|dt&63}}return st[St]=0,St-te}function mt(Ke,st,St){return Te(Ke,ke,st,St)}function j(Ke){for(var st=0,St=0;St=55296&&lr<=57343&&(lr=65536+((lr&1023)<<10)|Ke.charCodeAt(++St)&1023),lr<=127?++st:lr<=2047?st+=2:lr<=65535?st+=3:st+=4}return st}function rt(Ke){var st=j(Ke)+1,St=La(st);return St&&Te(Ke,Ve,St,st),St}function Fe(Ke,st){Ve.set(Ke,st)}function Ne(Ke,st){return Ke%st>0&&(Ke+=st-Ke%st),Ke}var be,Ve,ke,it,Ue,x,w,P,y,F;function z(Ke){be=Ke,r.HEAP_DATA_VIEW=F=new DataView(Ke),r.HEAP8=Ve=new Int8Array(Ke),r.HEAP16=it=new Int16Array(Ke),r.HEAP32=x=new Int32Array(Ke),r.HEAPU8=ke=new Uint8Array(Ke),r.HEAPU16=Ue=new Uint16Array(Ke),r.HEAPU32=w=new Uint32Array(Ke),r.HEAPF32=P=new Float32Array(Ke),r.HEAPF64=y=new Float64Array(Ke)}var Z=r.INITIAL_MEMORY||16777216,$,oe=[],xe=[],Re=[],lt=!1;function Ct(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bt(r.preRun.shift());Rs(oe)}function qt(){lt=!0,Rs(xe)}function ir(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)br(r.postRun.shift());Rs(Re)}function bt(Ke){oe.unshift(Ke)}function gn(Ke){xe.unshift(Ke)}function br(Ke){Re.unshift(Ke)}var Ir=0,Or=null,nn=null;function ai(Ke){Ir++,r.monitorRunDependencies&&r.monitorRunDependencies(Ir)}function Io(Ke){if(Ir--,r.monitorRunDependencies&&r.monitorRunDependencies(Ir),Ir==0&&(Or!==null&&(clearInterval(Or),Or=null),nn)){var st=nn;nn=null,st()}}r.preloadedImages={},r.preloadedAudios={};function ts(Ke){r.onAbort&&r.onAbort(Ke),Ke+="",ee(Ke),Ce=!0,g=1,Ke="abort("+Ke+"). Build with -s ASSERTIONS=1 for more info.";var st=new WebAssembly.RuntimeError(Ke);throw a(st),st}var $s="data:application/octet-stream;base64,";function Co(Ke){return Ke.startsWith($s)}var Hi="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/AAkAvwEJAH8ACQB/AQkA/wAJAP8BCQAAAAcAQAAHACAABwBgAAcAEAAHAFAABwAwAAcAcAAHAAgABwBIAAcAKAAHAGgABwAYAAcAWAAHADgABwB4AAcABAAHAEQABwAkAAcAZAAHABQABwBUAAcANAAHAHQABwADAAgAgwAIAEMACADDAAgAIwAIAKMACABjAAgA4wAIAAAABQAQAAUACAAFABgABQAEAAUAFAAFAAwABQAcAAUAAgAFABIABQAKAAUAGgAFAAYABQAWAAUADgAFAB4ABQABAAUAEQAFAAkABQAZAAUABQAFABUABQANAAUAHQAFAAMABQATAAUACwAFABsABQAHAAUAFwAFAEGBywAL7AYBAgMEBAUFBgYGBgcHBwcICAgICAgICAkJCQkJCQkJCgoKCgoKCgoKCgoKCgoKCgsLCwsLCwsLCwsLCwsLCwsMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8AABAREhITExQUFBQVFRUVFhYWFhYWFhYXFxcXFxcXFxgYGBgYGBgYGBgYGBgYGBgZGRkZGRkZGRkZGRkZGRkZGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhobGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAAECAwQFBgcICAkJCgoLCwwMDAwNDQ0NDg4ODg8PDw8QEBAQEBAQEBEREREREREREhISEhISEhITExMTExMTExQUFBQUFBQUFBQUFBQUFBQVFRUVFRUVFRUVFRUVFRUVFhYWFhYWFhYWFhYWFhYWFhcXFxcXFxcXFxcXFxcXFxcYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhobGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbHAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAQYTSAAutAQEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAgCAAAMApAAABAQAAHgEAAA8AAAAAJQAAQCoAAAAAAAAeAAAADwAAAAAAAADAKgAAAAAAABMAAAAHAEHg0wALTQEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAMAAAADAAAAAwAAAAQAAAAEAAAABAAAAAQAAAAFAAAABQAAAAUAAAAFAEHQ1AALZQEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAUAAAAGAAAABgAAAAcAAAAHAAAACAAAAAgAAAAJAAAACQAAAAoAAAAKAAAACwAAAAsAAAAMAAAADAAAAA0AAAANAEGA1gALIwIAAAADAAAABwAAAAAAAAAQERIACAcJBgoFCwQMAw0CDgEPAEHQ1gALTQEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAMAAAADAAAAAwAAAAQAAAAEAAAABAAAAAQAAAAFAAAABQAAAAUAAAAFAEHA1wALZQEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAUAAAAGAAAABgAAAAcAAAAHAAAACAAAAAgAAAAJAAAACQAAAAoAAAAKAAAACwAAAAsAAAAMAAAADAAAAA0AAAANAEG42AALASwAQcTYAAthLQAAAAQABAAIAAQALgAAAAQABgAQAAYALwAAAAQADAAgABgALwAAAAgAEAAgACAALwAAAAgAEACAAIAALwAAAAgAIACAAAABMAAAACAAgAACAQAEMAAAACAAAgECAQAQMABBsNkAC6UTAwAEAAUABgAHAAgACQAKAAsADQAPABEAEwAXABsAHwAjACsAMwA7AEMAUwBjAHMAgwCjAMMA4wACAQAAAAAAABAAEAAQABAAEAAQABAAEAARABEAEQARABIAEgASABIAEwATABMAEwAUABQAFAAUABUAFQAVABUAEABNAMoAAAABAAIAAwAEAAUABwAJAA0AEQAZACEAMQBBAGEAgQDBAAEBgQEBAgEDAQQBBgEIAQwBEAEYASABMAFAAWAAAAAAEAAQABAAEAARABEAEgASABMAEwAUABQAFQAVABYAFgAXABcAGAAYABkAGQAaABoAGwAbABwAHAAdAB0AQABAAGAHAAAACFAAAAgQABQIcwASBx8AAAhwAAAIMAAACcAAEAcKAAAIYAAACCAAAAmgAAAIAAAACIAAAAhAAAAJ4AAQBwYAAAhYAAAIGAAACZAAEwc7AAAIeAAACDgAAAnQABEHEQAACGgAAAgoAAAJsAAACAgAAAiIAAAISAAACfAAEAcEAAAIVAAACBQAFQjjABMHKwAACHQAAAg0AAAJyAARBw0AAAhkAAAIJAAACagAAAgEAAAIhAAACEQAAAnoABAHCAAACFwAAAgcAAAJmAAUB1MAAAh8AAAIPAAACdgAEgcXAAAIbAAACCwAAAm4AAAIDAAACIwAAAhMAAAJ+AAQBwMAAAhSAAAIEgAVCKMAEwcjAAAIcgAACDIAAAnEABEHCwAACGIAAAgiAAAJpAAACAIAAAiCAAAIQgAACeQAEAcHAAAIWgAACBoAAAmUABQHQwAACHoAAAg6AAAJ1AASBxMAAAhqAAAIKgAACbQAAAgKAAAIigAACEoAAAn0ABAHBQAACFYAAAgWAEAIAAATBzMAAAh2AAAINgAACcwAEQcPAAAIZgAACCYAAAmsAAAIBgAACIYAAAhGAAAJ7AAQBwkAAAheAAAIHgAACZwAFAdjAAAIfgAACD4AAAncABIHGwAACG4AAAguAAAJvAAACA4AAAiOAAAITgAACfwAYAcAAAAIUQAACBEAFQiDABIHHwAACHEAAAgxAAAJwgAQBwoAAAhhAAAIIQAACaIAAAgBAAAIgQAACEEAAAniABAHBgAACFkAAAgZAAAJkgATBzsAAAh5AAAIOQAACdIAEQcRAAAIaQAACCkAAAmyAAAICQAACIkAAAhJAAAJ8gAQBwQAAAhVAAAIFQAQCAIBEwcrAAAIdQAACDUAAAnKABEHDQAACGUAAAglAAAJqgAACAUAAAiFAAAIRQAACeoAEAcIAAAIXQAACB0AAAmaABQHUwAACH0AAAg9AAAJ2gASBxcAAAhtAAAILQAACboAAAgNAAAIjQAACE0AAAn6ABAHAwAACFMAAAgTABUIwwATByMAAAhzAAAIMwAACcYAEQcLAAAIYwAACCMAAAmmAAAIAwAACIMAAAhDAAAJ5gAQBwcAAAhbAAAIGwAACZYAFAdDAAAIewAACDsAAAnWABIHEwAACGsAAAgrAAAJtgAACAsAAAiLAAAISwAACfYAEAcFAAAIVwAACBcAQAgAABMHMwAACHcAAAg3AAAJzgARBw8AAAhnAAAIJwAACa4AAAgHAAAIhwAACEcAAAnuABAHCQAACF8AAAgfAAAJngAUB2MAAAh/AAAIPwAACd4AEgcbAAAIbwAACC8AAAm+AAAIDwAACI8AAAhPAAAJ/gBgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnBABAHCgAACGAAAAggAAAJoQAACAAAAAiAAAAIQAAACeEAEAcGAAAIWAAACBgAAAmRABMHOwAACHgAAAg4AAAJ0QARBxEAAAhoAAAIKAAACbEAAAgIAAAIiAAACEgAAAnxABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACckAEQcNAAAIZAAACCQAAAmpAAAIBAAACIQAAAhEAAAJ6QAQBwgAAAhcAAAIHAAACZkAFAdTAAAIfAAACDwAAAnZABIHFwAACGwAAAgsAAAJuQAACAwAAAiMAAAITAAACfkAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxQARBwsAAAhiAAAIIgAACaUAAAgCAAAIggAACEIAAAnlABAHBwAACFoAAAgaAAAJlQAUB0MAAAh6AAAIOgAACdUAEgcTAAAIagAACCoAAAm1AAAICgAACIoAAAhKAAAJ9QAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnNABEHDwAACGYAAAgmAAAJrQAACAYAAAiGAAAIRgAACe0AEAcJAAAIXgAACB4AAAmdABQHYwAACH4AAAg+AAAJ3QASBxsAAAhuAAAILgAACb0AAAgOAAAIjgAACE4AAAn9AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcMAEAcKAAAIYQAACCEAAAmjAAAIAQAACIEAAAhBAAAJ4wAQBwYAAAhZAAAIGQAACZMAEwc7AAAIeQAACDkAAAnTABEHEQAACGkAAAgpAAAJswAACAkAAAiJAAAISQAACfMAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJywARBw0AAAhlAAAIJQAACasAAAgFAAAIhQAACEUAAAnrABAHCAAACF0AAAgdAAAJmwAUB1MAAAh9AAAIPQAACdsAEgcXAAAIbQAACC0AAAm7AAAIDQAACI0AAAhNAAAJ+wAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnHABEHCwAACGMAAAgjAAAJpwAACAMAAAiDAAAIQwAACecAEAcHAAAIWwAACBsAAAmXABQHQwAACHsAAAg7AAAJ1wASBxMAAAhrAAAIKwAACbcAAAgLAAAIiwAACEsAAAn3ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc8AEQcPAAAIZwAACCcAAAmvAAAIBwAACIcAAAhHAAAJ7wAQBwkAAAhfAAAIHwAACZ8AFAdjAAAIfwAACD8AAAnfABIHGwAACG8AAAgvAAAJvwAACA8AAAiPAAAITwAACf8AEAUBABcFAQETBREAGwUBEBEFBQAZBQEEFQVBAB0FAUAQBQMAGAUBAhQFIQAcBQEgEgUJABoFAQgWBYEAQAUAABAFAgAXBYEBEwUZABsFARgRBQcAGQUBBhUFYQAdBQFgEAUEABgFAQMUBTEAHAUBMBIFDQAaBQEMFgXBAEAFAAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEHg7AALQREACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABAAkLCwAACQYLAAALAAYRAAAAERERAEGx7QALIQsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwBB6+0ACwEMAEH37QALFQwAAAAADAAAAAAJDAAAAAAADAAADABBpe4ACwEOAEGx7gALFQ0AAAAEDQAAAAAJDgAAAAAADgAADgBB3+4ACwEQAEHr7gALHg8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgBBou8ACw4SAAAAEhISAAAAAAAACQBB0+8ACwELAEHf7wALFQoAAAAACgAAAAAJCwAAAAAACwAACwBBjfAACwEMAEGZ8AALJwwAAAAADAAAAAAJDAAAAAAADAAADAAAMDEyMzQ1Njc4OUFCQ0RFRgBB5PAACwE+AEGL8QALBf//////AEHQ8QALVxkSRDsCPyxHFD0zMAobBkZLRTcPSQ6OFwNAHTxpKzYfSi0cASAlKSEIDBUWIi4QOD4LNDEYZHR1di9BCX85ESNDMkKJiosFBCYoJw0qHjWMBxpIkxOUlQBBsPIAC4oOSWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";Co(Hi)||(Hi=b(Hi));function eo(Ke){try{if(Ke==Hi&&le)return new Uint8Array(le);var st=Me(Ke);if(st)return st;if(T)return T(Ke);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(St){ts(St)}}function wo(Ke,st){var St,lr,te;try{te=eo(Ke),lr=new WebAssembly.Module(te),St=new WebAssembly.Instance(lr,st)}catch(Oe){var Ee=Oe.toString();throw ee("failed to compile wasm module: "+Ee),(Ee.includes("imported Memory")||Ee.includes("memory import"))&&ee("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)."),Oe}return[St,lr]}function QA(){var Ke={a:cu};function st(te,Ee){var Oe=te.exports;r.asm=Oe,Be=r.asm.g,z(Be.buffer),$=r.asm.W,gn(r.asm.h),Io("wasm-instantiate")}if(ai("wasm-instantiate"),r.instantiateWasm)try{var St=r.instantiateWasm(Ke,st);return St}catch(te){return ee("Module.instantiateWasm callback failed with error: "+te),!1}var lr=wo(Hi,Ke);return st(lr[0]),r.asm}function Af(Ke){return F.getFloat32(Ke,!0)}function dh(Ke){return F.getFloat64(Ke,!0)}function mh(Ke){return F.getInt16(Ke,!0)}function to(Ke){return F.getInt32(Ke,!0)}function jn(Ke,st){F.setInt32(Ke,st,!0)}function Rs(Ke){for(;Ke.length>0;){var st=Ke.shift();if(typeof st=="function"){st(r);continue}var St=st.func;typeof St=="number"?st.arg===void 0?$.get(St)():$.get(St)(st.arg):St(st.arg===void 0?null:st.arg)}}function ro(Ke,st){var St=new Date(to((Ke>>2)*4)*1e3);jn((st>>2)*4,St.getUTCSeconds()),jn((st+4>>2)*4,St.getUTCMinutes()),jn((st+8>>2)*4,St.getUTCHours()),jn((st+12>>2)*4,St.getUTCDate()),jn((st+16>>2)*4,St.getUTCMonth()),jn((st+20>>2)*4,St.getUTCFullYear()-1900),jn((st+24>>2)*4,St.getUTCDay()),jn((st+36>>2)*4,0),jn((st+32>>2)*4,0);var lr=Date.UTC(St.getUTCFullYear(),0,1,0,0,0,0),te=(St.getTime()-lr)/(1e3*60*60*24)|0;return jn((st+28>>2)*4,te),ro.GMTString||(ro.GMTString=rt("GMT")),jn((st+40>>2)*4,ro.GMTString),st}function ou(Ke,st){return ro(Ke,st)}function au(Ke,st,St){ke.copyWithin(Ke,st,st+St)}function lu(Ke){try{return Be.grow(Ke-be.byteLength+65535>>>16),z(Be.buffer),1}catch{}}function RA(Ke){var st=ke.length;Ke=Ke>>>0;var St=2147483648;if(Ke>St)return!1;for(var lr=1;lr<=4;lr*=2){var te=st*(1+.2/lr);te=Math.min(te,Ke+100663296);var Ee=Math.min(St,Ne(Math.max(Ke,te),65536)),Oe=lu(Ee);if(Oe)return!0}return!1}function TA(Ke){ue(Ke)}function oa(Ke){var st=Date.now()/1e3|0;return Ke&&jn((Ke>>2)*4,st),st}function aa(){if(aa.called)return;aa.called=!0;var Ke=new Date().getFullYear(),st=new Date(Ke,0,1),St=new Date(Ke,6,1),lr=st.getTimezoneOffset(),te=St.getTimezoneOffset(),Ee=Math.max(lr,te);jn((vl()>>2)*4,Ee*60),jn((Is()>>2)*4,+(lr!=te));function Oe(An){var li=An.toTimeString().match(/\(([A-Za-z ]+)\)$/);return li?li[1]:"GMT"}var dt=Oe(st),Et=Oe(St),Pt=rt(dt),tr=rt(Et);te>2)*4,Pt),jn((Mi()+4>>2)*4,tr)):(jn((Mi()>>2)*4,tr),jn((Mi()+4>>2)*4,Pt))}function FA(Ke){aa();var st=Date.UTC(to((Ke+20>>2)*4)+1900,to((Ke+16>>2)*4),to((Ke+12>>2)*4),to((Ke+8>>2)*4),to((Ke+4>>2)*4),to((Ke>>2)*4),0),St=new Date(st);jn((Ke+24>>2)*4,St.getUTCDay());var lr=Date.UTC(St.getUTCFullYear(),0,1,0,0,0,0),te=(St.getTime()-lr)/(1e3*60*60*24)|0;return jn((Ke+28>>2)*4,te),St.getTime()/1e3|0}var gr=typeof atob=="function"?atob:function(Ke){var st="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",St="",lr,te,Ee,Oe,dt,Et,Pt,tr=0;Ke=Ke.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Oe=st.indexOf(Ke.charAt(tr++)),dt=st.indexOf(Ke.charAt(tr++)),Et=st.indexOf(Ke.charAt(tr++)),Pt=st.indexOf(Ke.charAt(tr++)),lr=Oe<<2|dt>>4,te=(dt&15)<<4|Et>>2,Ee=(Et&3)<<6|Pt,St=St+String.fromCharCode(lr),Et!==64&&(St=St+String.fromCharCode(te)),Pt!==64&&(St=St+String.fromCharCode(Ee));while(tr0||(Ct(),Ir>0))return;function st(){Qn||(Qn=!0,r.calledRun=!0,!Ce&&(qt(),s(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),ir()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),st()},1)):st()}if(r.run=Ac,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return Ac(),e}}();typeof CR=="object"&&typeof Sj=="object"?Sj.exports=vj:typeof define=="function"&&define.amd?define([],function(){return vj}):typeof CR=="object"&&(CR.createModule=vj)});var Up,upe,fpe,Ape=Ze(()=>{Up=["number","number"],upe=(X=>(X[X.ZIP_ER_OK=0]="ZIP_ER_OK",X[X.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",X[X.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",X[X.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",X[X.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",X[X.ZIP_ER_READ=5]="ZIP_ER_READ",X[X.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",X[X.ZIP_ER_CRC=7]="ZIP_ER_CRC",X[X.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",X[X.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",X[X.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",X[X.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",X[X.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",X[X.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",X[X.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",X[X.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",X[X.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",X[X.ZIP_ER_EOF=17]="ZIP_ER_EOF",X[X.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",X[X.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",X[X.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",X[X.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",X[X.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",X[X.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",X[X.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",X[X.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",X[X.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",X[X.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",X[X.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",X[X.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",X[X.ZIP_ER_TELL=30]="ZIP_ER_TELL",X[X.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",X))(upe||{}),fpe=t=>({get HEAPU8(){return t.HEAPU8},errors:upe,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",...Up,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Up,"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",...Up,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Up,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Up,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Up,"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",...Up,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Up,"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",...Up,"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 Dj(t,e){let r=t.indexOf(e);if(r<=0)return null;let s=r;for(;r>=0&&(s=r+e.length,t[s]!==J.sep);){if(t[r-1]===J.sep)return null;r=t.indexOf(e,s)}return t.length>s&&t[s]!==J.sep?null:t.slice(0,s)}var $f,ppe=Ze(()=>{Dt();Dt();eA();$f=class t extends e0{static async openPromise(e,r){let s=new t(r);try{return await e(s)}finally{s.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,s=e.readOnlyArchives,a=typeof r>"u"?f=>Dj(f,".zip"):f=>{for(let p of r){let h=Dj(f,p);if(h)return h}return null},n=(f,p)=>new As(p,{baseFs:f,readOnly:s,stats:f.statSync(p),customZipImplementation:e.customZipImplementation}),c=async(f,p)=>{let h={baseFs:f,readOnly:s,stats:await f.statPromise(p),customZipImplementation:e.customZipImplementation};return()=>new As(p,h)};super({...e,factorySync:n,factoryPromise:c,getMountPoint:a})}}});var Pj,BI,bj=Ze(()=>{Bj();Pj=class extends Error{constructor(e,r){super(e),this.name="Libzip Error",this.code=r}},BI=class{constructor(e){this.filesShouldBeCached=!0;let r="buffer"in e?e.buffer:e.baseFs.readFileSync(e.path);this.libzip=cv();let s=this.libzip.malloc(4);try{let c=0;e.readOnly&&(c|=this.libzip.ZIP_RDONLY);let f=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(f,c,s),this.lzSource=f}catch(p){throw this.libzip.source.free(f),p}if(this.zip===0){let p=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(p,this.libzip.getValue(s,"i32")),this.makeLibzipError(p)}}finally{this.libzip.free(s)}let a=this.libzip.getNumEntries(this.zip,0),n=new Array(a);for(let c=0;c>>0,n=this.libzip.struct.statMtime(r)>>>0,c=this.libzip.struct.statCrc(r)>>>0;return{size:a,mtime:n,crc:c}}makeLibzipError(e){let r=this.libzip.struct.errorCodeZip(e),s=this.libzip.error.strerror(e),a=new Pj(s,this.libzip.errors[r]);if(r===this.libzip.errors.ZIP_ER_CHANGED)throw new Error(`Assertion failed: Unexpected libzip error: ${a.message}`);return a}setFileSource(e,r,s){let a=this.allocateSource(s);try{let n=this.libzip.file.add(this.zip,e,a,this.libzip.ZIP_FL_OVERWRITE);if(n===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(r!==null&&this.libzip.file.setCompression(this.zip,n,0,r[0],r[1])===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return n}catch(n){throw this.libzip.source.free(a),n}}setMtime(e,r){if(this.libzip.file.setMtime(this.zip,e,0,r,0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}getExternalAttributes(e){if(this.libzip.file.getExternalAttributes(this.zip,e,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let s=this.libzip.getValue(this.libzip.uint08S,"i8")>>>0,a=this.libzip.getValue(this.libzip.uint32S,"i32")>>>0;return[s,a]}setExternalAttributes(e,r,s){if(this.libzip.file.setExternalAttributes(this.zip,e,0,0,r,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}locate(e){return this.libzip.name.locate(this.zip,e,0)}getFileSource(e){let r=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,e,0,0,r)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.libzip.struct.statCompSize(r),n=this.libzip.struct.statCompMethod(r),c=this.libzip.malloc(a);try{let f=this.libzip.fopenIndex(this.zip,e,0,this.libzip.ZIP_FL_COMPRESSED);if(f===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let p=this.libzip.fread(f,c,a,0);if(p===-1)throw this.makeLibzipError(this.libzip.file.getError(f));if(pa)throw new Error("Overread");let h=this.libzip.HEAPU8.subarray(c,c+a);return{data:Buffer.from(h),compressionMethod:n}}finally{this.libzip.fclose(f)}}finally{this.libzip.free(c)}}deleteEntry(e){if(this.libzip.delete(this.zip,e)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}addDirectory(e){let r=this.libzip.dir.add(this.zip,e);if(r===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return r}getBufferAndClose(){try{if(this.libzip.source.keep(this.lzSource),this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.libzip.source.open(this.lzSource)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_END)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let e=this.libzip.source.tell(this.lzSource);if(e===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_SET)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let r=this.libzip.malloc(e);if(!r)throw new Error("Couldn't allocate enough memory");try{let s=this.libzip.source.read(this.lzSource,r,e);if(s===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(se)throw new Error("Overread");let a=Buffer.from(this.libzip.HEAPU8.subarray(r,r+e));return process.env.YARN_IS_TEST_ENV&&process.env.YARN_ZIP_DATA_EPILOGUE&&(a=Buffer.concat([a,Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)])),a}finally{this.libzip.free(r)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource)}}allocateBuffer(e){Buffer.isBuffer(e)||(e=Buffer.from(e));let r=this.libzip.malloc(e.byteLength);if(!r)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,r,e.byteLength).set(e),{buffer:r,byteLength:e.byteLength}}allocateUnattachedSource(e){let r=this.libzip.struct.errorS(),{buffer:s,byteLength:a}=this.allocateBuffer(e),n=this.libzip.source.fromUnattachedBuffer(s,a,0,1,r);if(n===0)throw this.libzip.free(r),this.makeLibzipError(r);return n}allocateSource(e){let{buffer:r,byteLength:s}=this.allocateBuffer(e),a=this.libzip.source.fromBuffer(this.zip,r,s,0,1);if(a===0)throw this.libzip.free(r),this.makeLibzipError(this.libzip.getError(this.zip));return a}discard(){this.libzip.discard(this.zip)}}});function jnt(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(hpe.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function wR(){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 xa,xj,hpe,kj,lm,Qj,Rj,gpe,As,BR=Ze(()=>{Dt();Dt();Dt();Dt();Dt();Dt();xa=Ie("fs"),xj=Ie("stream"),hpe=Ie("util"),kj=ut(Ie("zlib"));bj();lm=3,Qj=0,Rj=8,gpe="mixed";As=class extends Uf{constructor(r,s={}){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;s.readOnly&&(this.readOnly=!0);let a=s;this.level=typeof a.level<"u"?a.level:gpe;let n=s.customZipImplementation??BI;if(typeof r=="string"){let{baseFs:f=new Yn}=a;this.baseFs=f,this.path=r}else this.path=null,this.baseFs=null;if(s.stats)this.stats=s.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(f){if(f.code==="ENOENT"&&a.create)this.stats=$a.makeDefaultStats();else throw f}else this.stats=$a.makeDefaultStats();typeof r=="string"?s.create?this.zipImpl=new n({buffer:wR(),readOnly:this.readOnly}):this.zipImpl=new n({path:r,baseFs:this.baseFs,readOnly:this.readOnly,size:this.stats.size}):this.zipImpl=new n({buffer:r??wR(),readOnly:this.readOnly}),this.listings.set(vt.root,new Set);let c=this.zipImpl.getListings();for(let f=0;f{this.closeSync(f)}})}async readPromise(r,s,a,n,c){return this.readSync(r,s,a,n,c)}readSync(r,s,a=0,n=s.byteLength,c=-1){let f=this.fds.get(r);if(typeof f>"u")throw or.EBADF("read");let p=c===-1||c===null?f.cursor:c,h=this.readFileSync(f.p);h.copy(s,a,p,p+n);let E=Math.max(0,Math.min(h.length-p,n));return(c===-1||c===null)&&(f.cursor+=E),E}async writePromise(r,s,a,n,c){return typeof s=="string"?this.writeSync(r,s,c):this.writeSync(r,s,a,n,c)}writeSync(r,s,a,n,c){throw typeof this.fds.get(r)>"u"?or.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw or.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:s}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new xj.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(f,p)=>{clearImmediate(c),this.closeSync(a),p(f)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),c=setImmediate(async()=>{try{let f=await this.readFilePromise(r,s);n.bytesRead=f.length,n.end(f)}catch(f){n.destroy(f)}});return n}createWriteStream(r,{encoding:s}={}){if(this.readOnly)throw or.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),c=Object.assign(new xj.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(f,p)=>{try{f?p(f):(this.writeFileSync(r,Buffer.concat(a),s),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){c.destroy()},bytesWritten:0,path:r,pending:!1});return c.on("data",f=>{let p=Buffer.from(f);c.bytesWritten+=p.length,a.push(p)}),c}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let s=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(s)&&!this.listings.has(s))throw or.ENOENT(`lstat '${r}'`);return s}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw or.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=J.resolve(vt.root,r);return this.entries.has(a)||this.listings.has(a)}let s;try{s=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return s===void 0?!1:this.entries.has(s)||this.listings.has(s)}async accessPromise(r,s){return this.accessSync(r,s)}accessSync(r,s=xa.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw or.ENOENT(`access '${r}'`);if(this.readOnly&&s&xa.constants.W_OK)throw or.EROFS(`access '${r}'`)}async statPromise(r,s={bigint:!1}){return s.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,s={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,s.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(s.throwIfNoEntry===!1)return;throw or.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw or.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,s)}}async fstatPromise(r,s){return this.fstatSync(r,s)}fstatSync(r,s){let a=this.fds.get(r);if(typeof a>"u")throw or.EBADF("fstatSync");let{p:n}=a,c=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(c)&&!this.listings.has(c))throw or.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(c))throw or.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,c,s)}async lstatPromise(r,s={bigint:!1}){return s.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,s={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,s.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(s.throwIfNoEntry===!1)return;throw or.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw or.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,s)}}statImpl(r,s,a={}){let n=this.entries.get(s);if(typeof n<"u"){let c=this.zipImpl.stat(n),f=c.crc,p=c.size,h=c.mtime*1e3,E=this.stats.uid,C=this.stats.gid,S=512,b=Math.ceil(c.size/S),I=h,T=h,N=h,U=new Date(I),W=new Date(T),ee=new Date(N),ie=new Date(h),ue=this.listings.has(s)?xa.constants.S_IFDIR:this.isSymbolicLink(n)?xa.constants.S_IFLNK:xa.constants.S_IFREG,le=ue===xa.constants.S_IFDIR?493:420,me=ue|this.getUnixMode(n,le)&511,pe=Object.assign(new $a.StatEntry,{uid:E,gid:C,size:p,blksize:S,blocks:b,atime:U,birthtime:W,ctime:ee,mtime:ie,atimeMs:I,birthtimeMs:T,ctimeMs:N,mtimeMs:h,mode:me,crc:f});return a.bigint===!0?$a.convertToBigIntStats(pe):pe}if(this.listings.has(s)){let c=this.stats.uid,f=this.stats.gid,p=0,h=512,E=0,C=this.stats.mtimeMs,S=this.stats.mtimeMs,b=this.stats.mtimeMs,I=this.stats.mtimeMs,T=new Date(C),N=new Date(S),U=new Date(b),W=new Date(I),ee=xa.constants.S_IFDIR|493,ue=Object.assign(new $a.StatEntry,{uid:c,gid:f,size:p,blksize:h,blocks:E,atime:T,birthtime:N,ctime:U,mtime:W,atimeMs:C,birthtimeMs:S,ctimeMs:b,mtimeMs:I,mode:ee,crc:0});return a.bigint===!0?$a.convertToBigIntStats(ue):ue}throw new Error("Unreachable")}getUnixMode(r,s){let[a,n]=this.zipImpl.getExternalAttributes(r);return a!==lm?s:n>>>16}registerListing(r){let s=this.listings.get(r);if(s)return s;this.registerListing(J.dirname(r)).add(J.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,s){this.registerListing(J.dirname(r)).add(J.basename(r)),this.entries.set(r,s)}unregisterListing(r){this.listings.delete(r),this.listings.get(J.dirname(r))?.delete(J.basename(r))}unregisterEntry(r){this.unregisterListing(r);let s=this.entries.get(r);this.entries.delete(r),!(typeof s>"u")&&(this.fileSources.delete(s),this.isSymbolicLink(s)&&this.symlinkCount--)}deleteEntry(r,s){this.unregisterEntry(r),this.zipImpl.deleteEntry(s)}resolveFilename(r,s,a=!0,n=!0){if(!this.ready)throw or.EBUSY(`archive closed, ${r}`);let c=J.resolve(vt.root,s);if(c==="/")return vt.root;let f=this.entries.get(c);if(a&&f!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(f)){let p=this.getFileSource(f).toString();return this.resolveFilename(r,J.resolve(J.dirname(c),p),!0,n)}else return c;for(;;){let p=this.resolveFilename(r,J.dirname(c),!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 or.ENOENT(r)}if(!h)throw or.ENOTDIR(r);if(c=J.resolve(p,J.basename(c)),!a||this.symlinkCount===0)break;let C=this.zipImpl.locate(c.slice(1));if(C===-1)break;if(this.isSymbolicLink(C)){let S=this.getFileSource(C).toString();c=J.resolve(J.dirname(c),S)}else break}return c}setFileSource(r,s){let a=Buffer.isBuffer(s)?s:Buffer.from(s),n=J.relative(vt.root,r),c=null;this.level!=="mixed"&&(c=[this.level===0?Qj:Rj,this.level]);let f=this.zipImpl.setFileSource(n,c,a);return this.fileSources.set(f,a),f}isSymbolicLink(r){if(this.symlinkCount===0)return!1;let[s,a]=this.zipImpl.getExternalAttributes(r);return s!==lm?!1:(a>>>16&xa.constants.S_IFMT)===xa.constants.S_IFLNK}getFileSource(r,s={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let{data:n,compressionMethod:c}=this.zipImpl.getFileSource(r);if(c===Qj)return this.zipImpl.filesShouldBeCached&&this.fileSources.set(r,n),n;if(c===Rj){if(s.asyncDecompress)return new Promise((f,p)=>{kj.default.inflateRaw(n,(h,E)=>{h?p(h):(this.zipImpl.filesShouldBeCached&&this.fileSources.set(r,E),f(E))})});{let f=kj.default.inflateRawSync(n);return this.zipImpl.filesShouldBeCached&&this.fileSources.set(r,f),f}}else throw new Error(`Unsupported compression method: ${c}`)}async fchmodPromise(r,s){return this.chmodPromise(this.fdToPath(r,"fchmod"),s)}fchmodSync(r,s){return this.chmodSync(this.fdToPath(r,"fchmodSync"),s)}async chmodPromise(r,s){return this.chmodSync(r,s)}chmodSync(r,s){if(this.readOnly)throw or.EROFS(`chmod '${r}'`);s&=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 f=this.getUnixMode(n,xa.constants.S_IFREG|0)&-512|s;this.zipImpl.setExternalAttributes(n,lm,f<<16)}async fchownPromise(r,s,a){return this.chownPromise(this.fdToPath(r,"fchown"),s,a)}fchownSync(r,s,a){return this.chownSync(this.fdToPath(r,"fchownSync"),s,a)}async chownPromise(r,s,a){return this.chownSync(r,s,a)}chownSync(r,s,a){throw new Error("Unimplemented")}async renamePromise(r,s){return this.renameSync(r,s)}renameSync(r,s){throw new Error("Unimplemented")}async copyFilePromise(r,s,a){let{indexSource:n,indexDest:c,resolvedDestP:f}=this.prepareCopyFile(r,s,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(f,p);h!==c&&this.registerEntry(f,h)}copyFileSync(r,s,a=0){let{indexSource:n,indexDest:c,resolvedDestP:f}=this.prepareCopyFile(r,s,a),p=this.getFileSource(n),h=this.setFileSource(f,p);h!==c&&this.registerEntry(f,h)}prepareCopyFile(r,s,a=0){if(this.readOnly)throw or.EROFS(`copyfile '${r} -> '${s}'`);if(a&xa.constants.COPYFILE_FICLONE_FORCE)throw or.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${s}'`);let n=this.resolveFilename(`copyfile '${r} -> ${s}'`,r),c=this.entries.get(n);if(typeof c>"u")throw or.EINVAL(`copyfile '${r}' -> '${s}'`);let f=this.resolveFilename(`copyfile '${r}' -> ${s}'`,s),p=this.entries.get(f);if(a&(xa.constants.COPYFILE_EXCL|xa.constants.COPYFILE_FICLONE_FORCE)&&typeof p<"u")throw or.EEXIST(`copyfile '${r}' -> '${s}'`);return{indexSource:c,resolvedDestP:f,indexDest:p}}async appendFilePromise(r,s,a){if(this.readOnly)throw or.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,s,a)}appendFileSync(r,s,a={}){if(this.readOnly)throw or.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,s,a)}fdToPath(r,s){let a=this.fds.get(r)?.p;if(typeof a>"u")throw or.EBADF(s);return a}async writeFilePromise(r,s,a){let{encoding:n,mode:c,index:f,resolvedP:p}=this.prepareWriteFile(r,a);f!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(s=Buffer.concat([await this.getFileSource(f,{asyncDecompress:!0}),Buffer.from(s)])),n!==null&&(s=s.toString(n));let h=this.setFileSource(p,s);h!==f&&this.registerEntry(p,h),c!==null&&await this.chmodPromise(p,c)}writeFileSync(r,s,a){let{encoding:n,mode:c,index:f,resolvedP:p}=this.prepareWriteFile(r,a);f!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(s=Buffer.concat([this.getFileSource(f),Buffer.from(s)])),n!==null&&(s=s.toString(n));let h=this.setFileSource(p,s);h!==f&&this.registerEntry(p,h),c!==null&&this.chmodSync(p,c)}prepareWriteFile(r,s){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw or.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw or.EISDIR(`open '${r}'`);let n=null,c=null;typeof s=="string"?n=s:typeof s=="object"&&({encoding:n=null,mode:c=null}=s);let f=this.entries.get(a);return{encoding:n,mode:c,resolvedP:a,index:f}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw or.EROFS(`unlink '${r}'`);let s=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(s))throw or.EISDIR(`unlink '${r}'`);let a=this.entries.get(s);if(typeof a>"u")throw or.EINVAL(`unlink '${r}'`);this.deleteEntry(s,a)}async utimesPromise(r,s,a){return this.utimesSync(r,s,a)}utimesSync(r,s,a){if(this.readOnly)throw or.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,s,a){return this.lutimesSync(r,s,a)}lutimesSync(r,s,a){if(this.readOnly)throw or.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,s){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");this.zipImpl.setMtime(a,jnt(s))}async mkdirPromise(r,s){return this.mkdirSync(r,s)}mkdirSync(r,{mode:s=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:s});if(this.readOnly)throw or.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw or.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,s)}async rmdirPromise(r,s){return this.rmdirSync(r,s)}rmdirSync(r,{recursive:s=!1}={}){if(this.readOnly)throw or.EROFS(`rmdir '${r}'`);if(s){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw or.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw or.ENOTEMPTY(`rmdir '${r}'`);let c=this.entries.get(a);if(typeof c>"u")throw or.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,c)}async rmPromise(r,s){return this.rmSync(r,s)}rmSync(r,{recursive:s=!1}={}){if(this.readOnly)throw or.EROFS(`rm '${r}'`);if(s){this.removeSync(r);return}let a=this.resolveFilename(`rm '${r}'`,r),n=this.listings.get(a);if(!n)throw or.ENOTDIR(`rm '${r}'`);if(n.size>0)throw or.ENOTEMPTY(`rm '${r}'`);let c=this.entries.get(a);if(typeof c>"u")throw or.EINVAL(`rm '${r}'`);this.deleteEntry(r,c)}hydrateDirectory(r){let s=this.zipImpl.addDirectory(J.relative(vt.root,r));return this.registerListing(r),this.registerEntry(r,s),s}async linkPromise(r,s){return this.linkSync(r,s)}linkSync(r,s){throw or.EOPNOTSUPP(`link '${r}' -> '${s}'`)}async symlinkPromise(r,s){return this.symlinkSync(r,s)}symlinkSync(r,s){if(this.readOnly)throw or.EROFS(`symlink '${r}' -> '${s}'`);let a=this.resolveFilename(`symlink '${r}' -> '${s}'`,s);if(this.listings.has(a))throw or.EISDIR(`symlink '${r}' -> '${s}'`);if(this.entries.has(a))throw or.EEXIST(`symlink '${r}' -> '${s}'`);let n=this.setFileSource(a,r);this.registerEntry(a,n),this.zipImpl.setExternalAttributes(n,lm,(xa.constants.S_IFLNK|511)<<16),this.symlinkCount+=1}async readFilePromise(r,s){typeof s=="object"&&(s=s?s.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return s?a.toString(s):a}readFileSync(r,s){typeof s=="object"&&(s=s?s.encoding:void 0);let a=this.readFileBuffer(r);return s?a.toString(s):a}readFileBuffer(r,s={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 or.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw or.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw or.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,s)}async readdirPromise(r,s){return this.readdirSync(r,s)}readdirSync(r,s){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw or.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw or.ENOTDIR(`scandir '${r}'`);if(s?.recursive)if(s?.withFileTypes){let c=Array.from(n,f=>Object.assign(this.statImpl("lstat",J.join(r,f)),{name:f,path:vt.dot,parentPath:vt.dot}));for(let f of c){if(!f.isDirectory())continue;let p=J.join(f.path,f.name),h=this.listings.get(J.join(a,p));for(let E of h)c.push(Object.assign(this.statImpl("lstat",J.join(r,p,E)),{name:E,path:p,parentPath:p}))}return c}else{let c=[...n];for(let f of c){let p=this.listings.get(J.join(a,f));if(!(typeof p>"u"))for(let h of p)c.push(J.join(f,h))}return c}else return s?.withFileTypes?Array.from(n,c=>Object.assign(this.statImpl("lstat",J.join(r,c)),{name:c,path:void 0,parentPath:void 0})):[...n]}async readlinkPromise(r){let s=this.prepareReadlink(r);return(await this.getFileSource(s,{asyncDecompress:!0})).toString()}readlinkSync(r){let s=this.prepareReadlink(r);return this.getFileSource(s).toString()}prepareReadlink(r){let s=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(s)&&!this.listings.has(s))throw or.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(s))throw or.ENOTDIR(`open '${r}'`);if(this.listings.has(s))throw or.EINVAL(`readlink '${r}'`);let a=this.entries.get(s);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw or.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,s=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw or.EINVAL(`open '${r}'`);let c=await this.getFileSource(n,{asyncDecompress:!0}),f=Buffer.alloc(s,0);return c.copy(f),await this.writeFilePromise(r,f)}truncateSync(r,s=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw or.EINVAL(`open '${r}'`);let c=this.getFileSource(n),f=Buffer.alloc(s,0);return c.copy(f),this.writeFileSync(r,f)}async ftruncatePromise(r,s){return this.truncatePromise(this.fdToPath(r,"ftruncate"),s)}ftruncateSync(r,s){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),s)}watch(r,s,a){let n;switch(typeof s){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=s);break}if(!n)return{on:()=>{},close:()=>{}};let c=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(c)}}}watchFile(r,s,a){let n=J.resolve(vt.root,r);return sE(this,n,s,a)}unwatchFile(r,s){let a=J.resolve(vt.root,r);return md(this,a,s)}}});function mpe(t,e,r=Buffer.alloc(0),s){let a=new As(r),n=C=>C===e||C.startsWith(`${e}/`)?C.slice(0,e.length):null,c=async(C,S)=>()=>a,f=(C,S)=>a,p={...t},h=new Yn(p),E=new e0({baseFs:h,getMountPoint:n,factoryPromise:c,factorySync:f,magicByte:21,maxAge:1/0,typeCheck:s?.typeCheck});return U2(dpe.default,new t0(E)),a}var dpe,ype=Ze(()=>{Dt();dpe=ut(Ie("fs"));BR()});var Epe=Ze(()=>{ppe();BR();ype()});var Tj,uv,vR,Ipe=Ze(()=>{Dt();BR();Tj={CENTRAL_DIRECTORY:33639248,END_OF_CENTRAL_DIRECTORY:101010256},uv=22,vR=class t{constructor(e){this.filesShouldBeCached=!1;if("buffer"in e)throw new Error("Buffer based zip archives are not supported");if(!e.readOnly)throw new Error("Writable zip archives are not supported");this.baseFs=e.baseFs,this.fd=this.baseFs.openSync(e.path,"r");try{this.entries=t.readZipSync(this.fd,this.baseFs,e.size)}catch(r){throw this.baseFs.closeSync(this.fd),this.fd="closed",r}}static readZipSync(e,r,s){if(s=0;N--)if(n.readUInt32LE(N)===Tj.END_OF_CENTRAL_DIRECTORY){a=N;break}if(a===-1)throw new Error("Not a zip archive")}let c=n.readUInt16LE(a+10),f=n.readUInt32LE(a+12),p=n.readUInt32LE(a+16),h=n.readUInt16LE(a+20);if(a+h+uv>n.length)throw new Error("Zip archive inconsistent");if(c==65535||f==4294967295||p==4294967295)throw new Error("Zip 64 is not supported");if(f>s)throw new Error("Zip archive inconsistent");if(c>f/46)throw new Error("Zip archive inconsistent");let E=Buffer.alloc(f);if(r.readSync(e,E,0,E.length,p)!==E.length)throw new Error("Zip archive inconsistent");let C=[],S=0,b=0,I=0;for(;bE.length)throw new Error("Zip archive inconsistent");if(E.readUInt32LE(S)!==Tj.CENTRAL_DIRECTORY)throw new Error("Zip archive inconsistent");let N=E.readUInt16LE(S+4)>>>8;if(E.readUInt16LE(S+8)&1)throw new Error("Encrypted zip files are not supported");let W=E.readUInt16LE(S+10),ee=E.readUInt32LE(S+16),ie=E.readUInt16LE(S+28),ue=E.readUInt16LE(S+30),le=E.readUInt16LE(S+32),me=E.readUInt32LE(S+42),pe=E.toString("utf8",S+46,S+46+ie).replaceAll("\0"," ");if(pe.includes("\0"))throw new Error("Invalid ZIP file");let Be=E.readUInt32LE(S+20),Ce=E.readUInt32LE(S+38);C.push({name:pe,os:N,mtime:fi.SAFE_TIME,crc:ee,compressionMethod:W,isSymbolicLink:N===lm&&(Ce>>>16&fi.S_IFMT)===fi.S_IFLNK,size:E.readUInt32LE(S+24),compressedSize:Be,externalAttributes:Ce,localHeaderOffset:me}),I+=Be,b+=1,S+=46+ie+ue+le}if(I>s)throw new Error("Zip archive inconsistent");if(S!==E.length)throw new Error("Zip archive inconsistent");return C}getExternalAttributes(e){let r=this.entries[e];return[r.os,r.externalAttributes]}getListings(){return this.entries.map(e=>e.name)}getSymlinkCount(){let e=0;for(let r of this.entries)r.isSymbolicLink&&(e+=1);return e}stat(e){let r=this.entries[e];return{crc:r.crc,mtime:r.mtime,size:r.size}}locate(e){for(let r=0;rgpe,DEFLATE:()=>Rj,JsZipImpl:()=>vR,LibZipImpl:()=>BI,STORE:()=>Qj,ZIP_UNIX:()=>lm,ZipFS:()=>As,ZipOpenFS:()=>$f,getArchivePart:()=>Dj,getLibzipPromise:()=>qnt,getLibzipSync:()=>Gnt,makeEmptyArchive:()=>wR,mountMemoryDrive:()=>mpe});function Gnt(){return cv()}async function qnt(){return cv()}var Cpe,eA=Ze(()=>{Bj();Cpe=ut(cpe());Ape();Epe();Ipe();bj();lpe(()=>{let t=(0,Cpe.default)();return fpe(t)})});var Av,wpe=Ze(()=>{Dt();Yt();pv();Av=class extends ot{constructor(){super(...arguments);this.cwd=ge.String("--cwd",process.cwd(),{description:"The directory to run the command in"});this.commandName=ge.String();this.args=ge.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 vI(r,[],{cwd:fe.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}}});var Vl,Bpe=Ze(()=>{Vl=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var PR={};Vt(PR,{fastGlobOptions:()=>Dpe,isBraceExpansion:()=>Fj,isGlobPattern:()=>Wnt,match:()=>Ynt,micromatchOptions:()=>DR});function Wnt(t){if(!SR.default.scan(t,DR).isGlob)return!1;try{SR.default.parse(t,DR)}catch{return!1}return!0}function Ynt(t,{cwd:e,baseFs:r}){return(0,vpe.default)(t,{...Dpe,cwd:fe.fromPortablePath(e),fs:ax(Spe.default,new t0(r))})}function Fj(t){return SR.default.scan(t,DR).isBrace}var vpe,Spe,SR,DR,Dpe,Ppe=Ze(()=>{Dt();vpe=ut(wQ()),Spe=ut(Ie("fs")),SR=ut(Go()),DR={strictBrackets:!0},Dpe={onlyDirectories:!1,onlyFiles:!1}});function Nj(){}function Oj(){for(let t of cm)t.kill()}function Qpe(t,e,r,s){return a=>{let n=a[0]instanceof tA.Transform?"pipe":a[0],c=a[1]instanceof tA.Transform?"pipe":a[1],f=a[2]instanceof tA.Transform?"pipe":a[2],p=(0,xpe.default)(t,e,{...s,stdio:[n,c,f]});return cm.add(p),cm.size===1&&(process.on("SIGINT",Nj),process.on("SIGTERM",Oj)),a[0]instanceof tA.Transform&&a[0].pipe(p.stdin),a[1]instanceof tA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof tA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",E=>{switch(cm.delete(p),cm.size===0&&(process.off("SIGINT",Nj),process.off("SIGTERM",Oj)),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=>{cm.delete(p),cm.size===0&&(process.off("SIGINT",Nj),process.off("SIGTERM",Oj)),h(E!==null?E:129)})})}}}function Rpe(t){return e=>{let r=e[0]==="pipe"?new tA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function bR(t,e){return Mj.start(t,e)}function bpe(t,e=null){let r=new tA.PassThrough,s=new kpe.StringDecoder,a="";return r.on("data",n=>{let c=s.write(n),f;do if(f=c.indexOf(` -`),f!==-1){let p=a+c.substring(0,f);c=c.substring(f+1),a="",t(e!==null?`${e} ${p}`:p)}while(f!==-1);a+=c}),r.on("end",()=>{let n=s.end();n!==""&&t(e!==null?`${e} ${n}`:n)}),r}function Tpe(t,{prefix:e}){return{stdout:bpe(r=>t.stdout.write(`${r} -`),t.stdout.isTTY?e:null),stderr:bpe(r=>t.stderr.write(`${r} -`),t.stderr.isTTY?e:null)}}var xpe,tA,kpe,cm,Oc,Lj,Mj,Uj=Ze(()=>{xpe=ut(UU()),tA=Ie("stream"),kpe=Ie("string_decoder"),cm=new Set;Oc=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},Lj=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}},Mj=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:s,stderr:a}){let n=new t(null,e);return n.stdin=r,n.stdout=s,n.stderr=a,n}pipeTo(e,r=1){let s=new t(this,e),a=new Lj;return s.pipe=a,s.stdout=this.stdout,s.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),s}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 s;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");s=this.stderr,e[2]=s.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),s.close(),n))}async run(){let e=[];for(let s=this;s;s=s.ancestor)e.push(s.exec());return(await Promise.all(e))[0]}}});var mv={};Vt(mv,{EntryCommand:()=>Av,ShellError:()=>Vl,execute:()=>vI,globUtils:()=>PR});function Fpe(t,e,r){let s=new Jl.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(s,{end:!1}),(e&2)===2&&r.stdin instanceof Jl.Writable&&s.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(s,{end:!1}),(e&2)===2&&s.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(s,{end:!1}),(e&2)===2&&s.pipe(r.stderr,{end:!1});break;default:throw new Vl(`Bad file descriptor: "${t}"`)}return s}function kR(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function Jnt(t,e,r){let s=[],a=new Jl.PassThrough;return a.on("data",n=>s.push(n)),await QR(t,e,kR(r,{stdout:a})),Buffer.concat(s).toString().replace(/[\r\n]+$/,"")}async function Npe(t,e,r){let s=t.map(async n=>{let c=await um(n.args,e,r);return{name:n.name,value:c.join(" ")}});return(await Promise.all(s)).reduce((n,c)=>(n[c.name]=c.value,n),{})}function xR(t){return t.match(/[^ \r\n\t]+/g)||[]}async function Hpe(t,e,r,s,a=s){switch(t.name){case"$":s(String(process.pid));break;case"#":s(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 c=xR(n);for(let f=0;f=0&&n"u"&&(t.defaultValue?c=(await um(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(c="")),typeof c>"u")throw f?new Vl(`Unbound argument #${n}`):new Vl(`Unbound variable "${t.name}"`);if(t.quoted)s(c);else{let p=xR(c);for(let E=0;Es.push(n));let a=Number(s.join(" "));return Number.isNaN(a)?hv({type:"variable",name:s.join(" ")},e,r):hv({type:"number",value:a},e,r)}else return Knt[t.type](await hv(t.left,e,r),await hv(t.right,e,r))}async function um(t,e,r){let s=new Map,a=[],n=[],c=E=>{n.push(E)},f=()=>{n.length>0&&a.push(n.join("")),n=[]},p=E=>{c(E),f()},h=(E,C,S)=>{let b=JSON.stringify({type:E,fd:C}),I=s.get(b);typeof I>"u"&&s.set(b,I=[]),I.push(S)};for(let E of t){let C=!1;switch(E.type){case"redirection":{let S=await um(E.args,e,r);for(let b of S)h(E.subtype,E.fd,b)}break;case"argument":for(let S of E.segments)switch(S.type){case"text":c(S.text);break;case"glob":c(S.pattern),C=!0;break;case"shell":{let b=await Jnt(S.shell,e,r);if(S.quoted)c(b);else{let I=xR(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(S,{cwd:r.cwd,baseFs:e.baseFs});if(b.length===0){let I=Fj(S)?". 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 Vl(`No matches found: "${S}"${I}`)}for(let I of b.sort())p(I)}}if(s.size>0){let E=[];for(let[C,S]of s.entries())E.splice(E.length,0,C,String(S.length),...S);a.splice(0,0,"__ysh_set_redirects",...E,"--")}return a}function gv(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let s=fe.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:s});let[n,...c]=t;if(n==="command")return Qpe(c[0],c.slice(1),e,{cwd:s,env:a});let f=e.builtins.get(n);if(typeof f>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return Rpe(async({stdin:p,stdout:h,stderr:E})=>{let{stdin:C,stdout:S,stderr:b}=r;r.stdin=p,r.stdout=h,r.stderr=E;try{return await f(c,e,r)}finally{r.stdin=C,r.stdout=S,r.stderr=b}})}function znt(t,e,r){return s=>{let a=new Jl.PassThrough,n=QR(t,e,kR(r,{stdin:a}));return{stdin:a,promise:n}}}function Znt(t,e,r){return s=>{let a=new Jl.PassThrough,n=QR(t,e,r);return{stdin:a,promise:n}}}function Ope(t,e,r,s){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(s.procedures,a));return s.procedures={...s.procedures},s.procedures[a]=t,gv([...e,"__ysh_run_procedure",a],r,s)}}async function Lpe(t,e,r){let s=t,a=null,n=null;for(;s;){let c=s.then?{...r}:r,f;switch(s.type){case"command":{let p=await um(s.args,e,r),h=await Npe(s.envs,e,r);f=s.envs.length?gv(p,e,kR(c,{environment:h})):gv(p,e,c)}break;case"subshell":{let p=await um(s.args,e,r),h=znt(s.subshell,e,c);f=Ope(h,p,e,c)}break;case"group":{let p=await um(s.args,e,r),h=Znt(s.group,e,c);f=Ope(h,p,e,c)}break;case"envs":{let p=await Npe(s.envs,e,r);c.environment={...c.environment,...p},f=gv(["true"],e,c)}break}if(typeof f>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=bR(f,{stdin:new Oc(c.stdin),stdout:new Oc(c.stdout),stderr:new Oc(c.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(f,1);break;case"|&":n=n.pipeTo(f,3);break}}s.then?(a=s.then.type,s=s.then.chain):s=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function Xnt(t,e,r,{background:s=!1}={}){function a(n){let c=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],f=c[n%c.length];return Mpe.default.hex(f)}if(s){let n=r.nextBackgroundJobIndex++,c=a(n),f=`[${n}]`,p=c(f),{stdout:h,stderr:E}=Tpe(r,{prefix:p});return r.backgroundJobs.push(Lpe(t,e,kR(r,{stdout:h,stderr:E})).catch(C=>E.write(`${C.message} -`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${c(AE(t))}' has ended -`)})),0}return await Lpe(t,e,r)}async function $nt(t,e,r,{background:s=!1}={}){let a,n=f=>{a=f,r.variables["?"]=String(f)},c=async f=>{try{return await Xnt(f.chain,e,r,{background:s&&typeof f.then>"u"})}catch(p){if(!(p instanceof Vl))throw p;return r.stderr.write(`${p.message} -`),1}};for(n(await c(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await c(t.then.line));break;case"||":a!==0&&n(await c(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function QR(t,e,r){let s=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:c}of t){if(a=await $nt(n,e,r,{background:c==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=s,a}function jpe(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=>dv(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>dv(e));case"arithmetic":return _j(t.arithmetic);case"shell":return Hj(t.shell);default:return!1}}function dv(t){switch(t.type){case"redirection":return t.args.some(e=>dv(e));case"argument":return t.segments.some(e=>jpe(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function _j(t){switch(t.type){case"variable":return jpe(t);case"number":return!1;default:return _j(t.left)||_j(t.right)}}function Hj(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let s;switch(r.type){case"subshell":s=Hj(r.subshell);break;case"command":s=r.envs.some(a=>a.args.some(n=>dv(n)))||r.args.some(a=>dv(a));break}if(s)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function vI(t,e=[],{baseFs:r=new Yn,builtins:s={},cwd:a=fe.toPortablePath(process.cwd()),env:n=process.env,stdin:c=process.stdin,stdout:f=process.stdout,stderr:p=process.stderr,variables:h={},glob:E=PR}={}){let C={};for(let[I,T]of Object.entries(n))typeof T<"u"&&(C[I]=T);let S=new Map(Vnt);for(let[I,T]of Object.entries(s))S.set(I,T);c===null&&(c=new Jl.PassThrough,c.end());let b=ux(t,E);if(!Hj(b)&&b.length>0&&e.length>0){let{command:I}=b[b.length-1];for(;I.then;)I=I.then.line;let T=I.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 QR(b,{args:e,baseFs:r,builtins:S,initialStdin:c,initialStdout:f,initialStderr:p,glob:E},{cwd:a,environment:C,exitCode:null,procedures:{},stdin:c,stdout:f,stderr:p,variables:Object.assign({},h,{"?":0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var Mpe,Upe,Jl,_pe,Vnt,Knt,pv=Ze(()=>{Dt();wc();Mpe=ut(RE()),Upe=Ie("os"),Jl=Ie("stream"),_pe=Ie("timers/promises");wpe();Bpe();Ppe();Uj();Uj();Vnt=new Map([["cd",async([t=(0,Upe.homedir)(),...e],r,s)=>{let a=J.resolve(s.cwd,fe.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(c=>{throw c.code==="ENOENT"?new Vl(`cd: no such file or directory: ${t}`):c})).isDirectory())throw new Vl(`cd: not a directory: ${t}`);return s.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${fe.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,s)=>s.exitCode=parseInt(t??s.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} -`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new Vl("sleep: missing operand");let s=Number(t);if(Number.isNaN(s))throw new Vl(`sleep: invalid time interval '${t}'`);return await(0,_pe.setTimeout)(1e3*s,0)}],["unset",async(t,e,r)=>{for(let s of t)delete r.environment[s],delete r.variables[s];return 0}],["__ysh_run_procedure",async(t,e,r)=>{let s=r.procedures[t[0]];return await bR(s,{stdin:new Oc(r.stdin),stdout:new Oc(r.stdout),stderr:new Oc(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let s=r.stdin,a=r.stdout,n=r.stderr,c=[],f=[],p=[],h=0;for(;t[h]!=="--";){let C=t[h++],{type:S,fd:b}=JSON.parse(C),I=W=>{switch(b){case null:case 0:c.push(W);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},T=W=>{switch(b){case null:case 1:f.push(W);break;case 2:p.push(W);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},N=Number(t[h++]),U=h+N;for(let W=h;We.baseFs.createReadStream(J.resolve(r.cwd,fe.toPortablePath(t[W]))));break;case"<<<":I(()=>{let ee=new Jl.PassThrough;return process.nextTick(()=>{ee.write(`${t[W]} -`),ee.end()}),ee});break;case"<&":I(()=>Fpe(Number(t[W]),1,r));break;case">":case">>":{let ee=J.resolve(r.cwd,fe.toPortablePath(t[W]));T(ee==="/dev/null"?new Jl.Writable({autoDestroy:!0,emitClose:!0,write(ie,ue,le){setImmediate(le)}}):e.baseFs.createWriteStream(ee,S===">>"?{flags:"a"}:void 0))}break;case">&":T(Fpe(Number(t[W]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${S}"`)}}if(c.length>0){let C=new Jl.PassThrough;s=C;let S=b=>{if(b===c.length)C.end();else{let I=c[b]();I.pipe(C,{end:!1}),I.on("end",()=>{S(b+1)})}};S(0)}if(f.length>0){let C=new Jl.PassThrough;a=C;for(let S of f)C.pipe(S)}if(p.length>0){let C=new Jl.PassThrough;n=C;for(let S of p)C.pipe(S)}let E=await bR(gv(t.slice(h+1),e,r),{stdin:new Oc(s),stdout:new Oc(a),stderr:new Oc(n)}).run();return await Promise.all(f.map(C=>new Promise((S,b)=>{C.on("error",I=>{b(I)}),C.on("close",()=>{S()}),C.end()}))),await Promise.all(p.map(C=>new Promise((S,b)=>{C.on("error",I=>{b(I)}),C.on("close",()=>{S()}),C.end()}))),E}]]);Knt={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var Gpe=_((d4t,RR)=>{function eit(){var t=0,e=1,r=2,s=3,a=4,n=5,c=6,f=7,p=8,h=9,E=10,C=11,S=12,b=13,I=14,T=15,N=16,U=17,W=0,ee=1,ie=2,ue=3,le=4;function me(g,we){return 55296<=g.charCodeAt(we)&&g.charCodeAt(we)<=56319&&56320<=g.charCodeAt(we+1)&&g.charCodeAt(we+1)<=57343}function pe(g,we){we===void 0&&(we=0);var ye=g.charCodeAt(we);if(55296<=ye&&ye<=56319&&we=1){var Ae=g.charCodeAt(we-1),se=ye;return 55296<=Ae&&Ae<=56319?(Ae-55296)*1024+(se-56320)+65536:se}return ye}function Be(g,we,ye){var Ae=[g].concat(we).concat([ye]),se=Ae[Ae.length-2],X=ye,De=Ae.lastIndexOf(I);if(De>1&&Ae.slice(1,De).every(function(j){return j==s})&&[s,b,U].indexOf(g)==-1)return ie;var Te=Ae.lastIndexOf(a);if(Te>0&&Ae.slice(1,Te).every(function(j){return j==a})&&[S,a].indexOf(se)==-1)return Ae.filter(function(j){return j==a}).length%2==1?ue:le;if(se==t&&X==e)return W;if(se==r||se==t||se==e)return X==I&&we.every(function(j){return j==s})?ie:ee;if(X==r||X==t||X==e)return ee;if(se==c&&(X==c||X==f||X==h||X==E))return W;if((se==h||se==f)&&(X==f||X==p))return W;if((se==E||se==p)&&X==p)return W;if(X==s||X==T)return W;if(X==n)return W;if(se==S)return W;var mt=Ae.indexOf(s)!=-1?Ae.lastIndexOf(s)-1:Ae.length-2;return[b,U].indexOf(Ae[mt])!=-1&&Ae.slice(mt+1,-1).every(function(j){return j==s})&&X==I||se==T&&[N,U].indexOf(X)!=-1?W:we.indexOf(a)!=-1?ie:se==a&&X==a?W:ee}this.nextBreak=function(g,we){if(we===void 0&&(we=0),we<0)return 0;if(we>=g.length-1)return g.length;for(var ye=Ce(pe(g,we)),Ae=[],se=we+1;se{var tit=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,TR;function rit(){if(TR)return TR;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return TR=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=Gpe(),e=new t;return TR=r=>e.splitGraphemes(r)}}qpe.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let s=r-e,a="",n=0,c=0;for(;t.length>0;){let f=t.match(tit)||[t,t,void 0],p=rit()(f[1]),h=Math.min(e-n,p.length);p=p.slice(h);let E=Math.min(s-c,p.length);a+=p.slice(0,E).join(""),n+=h,c+=E,typeof f[2]<"u"&&(a+=f[2]),t=t.slice(f[0].length)}return a}});var fn,yv=Ze(()=>{fn=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.10.3"});function Zpe(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Yf(t===null?0:t);return!r&&t===null?Ht(e,a,"grey"):a}function jj(t,{configuration:e,json:r}){let s=Zpe(t,{configuration:e,json:r});if(!s||t===null||t===0)return s;let a=Br[t],n=`https://yarnpkg.com/advanced/error-codes#${s}---${a}`.toLowerCase();return KE(e,s,n)}async function SI({configuration:t,stdout:e,forceError:r},s){let a=await Ot.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let c=!1,f=!1;for(let p of s)typeof p.option<"u"&&(p.error||r?(f=!0,n.reportError(50,p.message)):(c=!0,n.reportWarning(50,p.message)),p.callback?.());c&&!f&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Kpe,FR,nit,Ype,Vpe,D0,zpe,Jpe,iit,sit,NR,oit,Ot,Ev=Ze(()=>{Kpe=ut(Wpe()),FR=ut(Fd());Gx();Rc();yv();xc();nit="\xB7",Ype=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Vpe=80,D0=FR.default.GITHUB_ACTIONS?{start:t=>`::group::${t} -`,end:t=>`::endgroup:: -`}:FR.default.TRAVIS?{start:t=>`travis_fold:start:${t} -`,end:t=>`travis_fold:end:${t} -`}:FR.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,zpe=D0!==null,Jpe=new Date,iit=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,sit=t=>t,NR=sit({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}}),oit=iit&&Object.keys(NR).find(t=>{let e=NR[t];return!(e.date&&(e.date[0]!==Jpe.getDate()||e.date[1]!==Jpe.getMonth()+1))})||"default";Ot=class extends Ao{constructor({configuration:r,stdout:s,json:a=!1,forceSectionAlignment:n=!1,includeNames:c=!0,includePrefix:f=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:E=h,includeWarnings:C=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(TB(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=c,this.includePrefix=f,this.includeFooter=p,this.includeInfos=E,this.includeWarnings=C,this.json=a,this.stdout=s,r.get("enableProgressBars")&&!a&&s.isTTY&&s.columns>22){let S=r.get("progressBarStyle")||oit;if(!Object.hasOwn(NR,S))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=NR[S];let b=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*b/80)}}static async start(r,s){let a=new this(r),n=process.emitWarning;process.emitWarning=(c,f)=>{if(typeof c!="string"){let h=c;c=h.message,f=f??h.name}let p=typeof f<"u"?`${f}: ${c}`:c;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,zd(r.configuration,`Yarn ${fn}`,2));try{await s(a)}catch(c){a.reportExceptionOnce(c)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let s=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,s-12-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:s,skipIfEmpty:a},n){let c={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(c):(c.action(),c.committed=!0);let f=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(c),c.committed&&s?.(p-f)}}async startSectionPromise({reportHeader:r,reportFooter:s,skipIfEmpty:a},n){let c={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(c):(c.action(),c.committed=!0);let f=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(c),c.committed&&s?.(p-f)}}startTimerImpl(r,s,a){return{cb:typeof s=="function"?s:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,D0!==null&&!this.json&&this.includeInfos&&this.stdout.write(D0.start(r))},reportFooter:f=>{if(this.indent-=1,D0!==null&&!this.json&&this.includeInfos){this.stdout.write(D0.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&f>200?this.reportInfo(null,`\u2514 Completed in ${Ht(this.configuration,f,ht.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof s=="function"?{}:s).skipIfEmpty}}startTimerSync(r,s,a){let{cb:n,...c}=this.startTimerImpl(r,s,a);return this.startSectionSync(c,n)}async startTimerPromise(r,s,a){let{cb:n,...c}=this.startTimerImpl(r,s,a);return this.startSectionPromise(c,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,s){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",c=`${this.formatPrefix(n,"blueBright")}${s}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:s}):this.writeLine(c)}reportWarning(r,s){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:s}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${s}`)}reportError(r,s){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,s)),this.reportErrorImpl(r,s)}reportErrorImpl(r,s){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:s}):this.writeLine(`${this.formatPrefix(n,"redBright")}${s}`,{truncate:!1})}reportFold(r,s){if(!D0)return;let a=`${D0.start(r)}${s}${D0.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 s=!1,a=Promise.resolve().then(async()=>{let c={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:c,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:f,title:p}of r)s||c.progress===f&&c.title===p||(c.progress=f,c.title=p,this.refreshProgress());n()}),n=()=>{s||(s=!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 s=Ht(this.configuration,Date.now()-this.startTime,ht.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${s}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:s}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:s})} -`),this.writeProgress()}writeLines(r,{truncate:s}={}){this.clearProgress({delta:r.length});for(let a of r)this.stdout.write(`${this.truncate(a,{truncate:s})} -`);this.writeProgress()}commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let s of r)s.committed=!0,s.action()}clearProgress({delta:r=0,clear:s=!1}){this.progressStyle!==null&&this.progress.size+r>0&&(this.stdout.write(`\x1B[${this.progress.size+r}A`),(r>0||s)&&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>Vpe&&(this.progressFrame=(this.progressFrame+1)%Ype.length,this.progressTime=r);let s=Ype[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 c=this.formatName(null),f=c?`${c}: `:"",p=a.definition.title?` ${a.definition.title}`:"";this.stdout.write(`${Ht(this.configuration,"\u27A4","blueBright")} ${f}${s}${n}${p} -`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},Vpe)}refreshProgress({delta:r=0,force:s=!1}={}){let a=!1,n=!1;if(s||this.progress.size===0)a=!0;else for(let c of this.progress.values()){let f=typeof c.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*c.definition.progress):void 0,p=c.lastScaledSize;c.lastScaledSize=f;let h=c.lastTitle;if(c.lastTitle=c.definition.title,f!==p||(n=h!==c.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:s}={}){return this.progressStyle===null&&(s=!1),typeof s>"u"&&(s=this.configuration.get("preferTruncatedLines")),s&&(r=(0,Kpe.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?Zpe(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,s){return this.includePrefix?`${Ht(this.configuration,"\u27A4",s)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?jj(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${nit} `}}});var In={};Vt(In,{PackageManager:()=>$pe,detectPackageManager:()=>ehe,executePackageAccessibleBinary:()=>she,executePackageScript:()=>OR,executePackageShellcode:()=>Gj,executeWorkspaceAccessibleBinary:()=>pit,executeWorkspaceLifecycleScript:()=>nhe,executeWorkspaceScript:()=>rhe,getPackageAccessibleBinaries:()=>LR,getWorkspaceAccessibleBinaries:()=>ihe,hasPackageScript:()=>uit,hasWorkspaceScript:()=>qj,isNodeScript:()=>Wj,makeScriptEnv:()=>Iv,maybeExecuteWorkspaceLifecycleScript:()=>Ait,prepareExternalProject:()=>cit});async function P0(t,e,r,s=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${s.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await ce.writeFilePromise(J.format({dir:t,name:e,ext:".cmd"}),a)}await ce.writeFilePromise(J.join(t,e),`#!/bin/sh -exec "${r}" ${s.map(a=>`'${a.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" -`,{mode:493})}async function ehe(t){let e=await Ut.tryFind(t);if(e?.packageManager){let s=bQ(e.packageManager);if(s?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=s.reference.split(".");switch(s.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 ce.readFilePromise(J.join(t,Er.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'}:ce.existsSync(J.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:ce.existsSync(J.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function Iv({project:t,locator:e,binFolder:r,ignoreCorepack:s,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let c={};for(let[E,C]of Object.entries(n))typeof C<"u"&&(c[E.toLowerCase()!=="path"?E:"PATH"]=C);let f=fe.fromPortablePath(r);c.BERRY_BIN_FOLDER=fe.fromPortablePath(f);let p=process.env.COREPACK_ROOT&&!s?fe.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([P0(r,"node",process.execPath),...fn!==null?[P0(r,"run",process.execPath,[p,"run"]),P0(r,"yarn",process.execPath,[p]),P0(r,"yarnpkg",process.execPath,[p]),P0(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(c.INIT_CWD=fe.fromPortablePath(t.configuration.startingCwd),c.PROJECT_CWD=fe.fromPortablePath(t.cwd)),c.PATH=c.PATH?`${f}${fe.delimiter}${c.PATH}`:`${f}`,c.npm_execpath=`${f}${fe.sep}yarn`,c.npm_node_execpath=`${f}${fe.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let E=t.tryWorkspaceByLocator(e),C=E?E.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";c.npm_package_name=un(e),c.npm_package_version=C;let S;if(E)S=E.cwd;else{let b=t.storedPackages.get(e.locatorHash);if(!b)throw new Error(`Package for ${Yr(t.configuration,e)} not found in the project`);let I=t.configuration.getLinkers(),T={project:t,report:new Ot({stdout:new b0.PassThrough,configuration:t.configuration})},N=I.find(U=>U.supportsPackage(b,T));if(!N)throw new Error(`The package ${Yr(t.configuration,b)} isn't supported by any of the available linkers`);S=await N.findPackageLocation(b,T)}c.npm_package_json=fe.fromPortablePath(J.join(S,Er.manifest))}let h=fn!==null?`yarn/${fn}`:`yarn/${bp("@yarnpkg/core").version}-core`;return c.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(c.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(E=>E.setupScriptEnvironment,t,c,async(E,C,S)=>await P0(r,E,C,S)),c}async function cit(t,e,{configuration:r,report:s,workspace:a=null,locator:n=null}){await lit(async()=>{await ce.mktempPromise(async c=>{let f=J.join(c,"pack.log"),p=null,{stdout:h,stderr:E}=r.getSubprocessStreams(f,{prefix:fe.fromPortablePath(t),report:s}),C=n&&Gu(n)?rI(n):n,S=C?ll(C):"an external project";h.write(`Packing ${S} from sources -`);let b=await ehe(t),I;b!==null?(h.write(`Using ${b.packageManager} for bootstrap. Reason: ${b.reason} - -`),I=b.packageManager):(h.write(`No package manager configuration detected; defaulting to Yarn - -`),I="Yarn");let T=I==="Yarn"&&!b?.packageManagerField;await ce.mktempPromise(async N=>{let U=await Iv({binFolder:N,ignoreCorepack:T,baseEnv:{...process.env,COREPACK_ENABLE_AUTO_PIN:"0"}}),ee=new Map([["Yarn Classic",async()=>{let ue=a!==null?["workspace",a]:[],le=J.join(t,Er.manifest),me=await ce.readFilePromise(le),pe=await Wu(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(pe.code!==0)return pe.code;await ce.writeFilePromise(le,me),await ce.appendFilePromise(J.join(t,".npmignore"),`/.yarn -`),h.write(` -`),delete U.NODE_ENV;let Be=await Wu("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(Be.code!==0)return Be.code;h.write(` -`);let Ce=await Wu("yarn",[...ue,"pack","--filename",fe.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return Ce.code!==0?Ce.code:0}],["Yarn",async()=>{let ue=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let le=J.join(t,Er.lockfile);await ce.existsPromise(le)||await ce.writeFilePromise(le,"");let me=await Wu("yarn",[...ue,"pack","--install-if-needed","--filename",fe.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return me.code!==0?me.code:0}],["npm",async()=>{if(a!==null){let we=new b0.PassThrough,ye=WE(we);we.pipe(h,{end:!1});let Ae=await Wu("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:we,stderr:E,end:0});if(we.end(),Ae.code!==0)return h.end(),E.end(),Ae.code;let se=(await ye).toString().trim();if(!Xf(se,">=7.x")){let X=Da(null,"npm"),De=On(X,se),Te=On(X,">=7.x");throw new Error(`Workspaces aren't supported by ${ni(r,De)}; please upgrade to ${ni(r,Te)} (npm has been detected as the primary package manager for ${Ht(r,t,ht.PATH)})`)}}let ue=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 le=await Wu("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(le.code!==0)return le.code;let me=new b0.PassThrough,pe=WE(me);me.pipe(h);let Be=await Wu("npm",["pack","--silent",...ue],{cwd:t,env:U,stdin:p,stdout:me,stderr:E});if(Be.code!==0)return Be.code;let Ce=(await pe).toString().trim().replace(/^.*\n/s,""),g=J.resolve(t,fe.toPortablePath(Ce));return await ce.renamePromise(g,e),0}]]).get(I);if(typeof ee>"u")throw new Error("Assertion failed: Unsupported workflow");let ie=await ee();if(!(ie===0||typeof ie>"u"))throw ce.detachTemp(c),new jt(58,`Packing the package failed (exit code ${ie}, logs can be found here: ${Ht(r,f,ht.PATH)})`)})})})}async function uit(t,e,{project:r}){let s=r.tryWorkspaceByLocator(t);if(s!==null)return qj(s,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${Yr(r.configuration,t)} not found in the project`);return await $f.openPromise(async n=>{let c=r.configuration,f=r.configuration.getLinkers(),p={project:r,report:new Ot({stdout:new b0.PassThrough,configuration:c})},h=f.find(b=>b.supportsPackage(a,p));if(!h)throw new Error(`The package ${Yr(r.configuration,a)} isn't supported by any of the available linkers`);let E=await h.findPackageLocation(a,p),C=new Sn(E,{baseFs:n});return(await Ut.find(vt.dot,{baseFs:C})).scripts.has(e)})}async function OR(t,e,r,{cwd:s,project:a,stdin:n,stdout:c,stderr:f}){return await ce.mktempPromise(async p=>{let{manifest:h,env:E,cwd:C}=await the(t,{project:a,binFolder:p,cwd:s,lifecycleScript:e}),S=h.scripts.get(e);if(typeof S>"u")return 1;let b=async()=>await vI(S,r,{cwd:C,env:E,stdin:n,stdout:c,stderr:f});return await(await a.configuration.reduceHook(T=>T.wrapScriptExecution,b,a,t,e,{script:S,args:r,cwd:C,env:E,stdin:n,stdout:c,stderr:f}))()})}async function Gj(t,e,r,{cwd:s,project:a,stdin:n,stdout:c,stderr:f}){return await ce.mktempPromise(async p=>{let{env:h,cwd:E}=await the(t,{project:a,binFolder:p,cwd:s});return await vI(e,r,{cwd:E,env:h,stdin:n,stdout:c,stderr:f})})}async function fit(t,{binFolder:e,cwd:r,lifecycleScript:s}){let a=await Iv({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:s});return await Yj(e,await ihe(t)),typeof r>"u"&&(r=J.dirname(await ce.realpathPromise(J.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function the(t,{project:e,binFolder:r,cwd:s,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return fit(n,{binFolder:r,cwd:s,lifecycleScript:a});let c=e.storedPackages.get(t.locatorHash);if(!c)throw new Error(`Package for ${Yr(e.configuration,t)} not found in the project`);return await $f.openPromise(async f=>{let p=e.configuration,h=e.configuration.getLinkers(),E={project:e,report:new Ot({stdout:new b0.PassThrough,configuration:p})},C=h.find(N=>N.supportsPackage(c,E));if(!C)throw new Error(`The package ${Yr(e.configuration,c)} isn't supported by any of the available linkers`);let S=await Iv({project:e,locator:t,binFolder:r,lifecycleScript:a});await Yj(r,await LR(t,{project:e}));let b=await C.findPackageLocation(c,E),I=new Sn(b,{baseFs:f}),T=await Ut.find(vt.dot,{baseFs:I});return typeof s>"u"&&(s=b),{manifest:T,binFolder:r,env:S,cwd:s}})}async function rhe(t,e,r,{cwd:s,stdin:a,stdout:n,stderr:c}){return await OR(t.anchoredLocator,e,r,{cwd:s,project:t.project,stdin:a,stdout:n,stderr:c})}function qj(t,e){return t.manifest.scripts.has(e)}async function nhe(t,e,{cwd:r,report:s}){let{configuration:a}=t.project,n=null;await ce.mktempPromise(async c=>{let f=J.join(c,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${fe.fromPortablePath(t.cwd)}") -`,{stdout:h,stderr:E}=a.getSubprocessStreams(f,{report:s,prefix:Yr(a,t.anchoredLocator),header:p});s.reportInfo(36,`Calling the "${e}" lifecycle script`);let C=await rhe(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:E});if(h.end(),E.end(),C!==0)throw ce.detachTemp(c),new jt(36,`${PB(e)} script failed (exit code ${Ht(a,C,ht.NUMBER)}, logs can be found here: ${Ht(a,f,ht.PATH)}); run ${Ht(a,`yarn ${e}`,ht.CODE)} to investigate`)})}async function Ait(t,e,r){qj(t,e)&&await nhe(t,e,r)}function Wj(t){let e=J.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),s;try{s=ce.openSync(t,"r")}catch{return!0}try{ce.readSync(s,r,0,r.length,0)}finally{ce.closeSync(s)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function LR(t,{project:e}){let r=e.configuration,s=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${Yr(r,t)} not found in the project`);let n=new b0.Writable,c=r.getLinkers(),f={project:e,report:new Ot({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let E of a.dependencies.values()){let C=e.storedResolutions.get(E.descriptorHash);if(!C)throw new Error(`Assertion failed: The resolution (${ni(r,E)}) should have been registered`);p.add(C)}let h=await Promise.all(Array.from(p,async E=>{let C=e.storedPackages.get(E);if(!C)throw new Error(`Assertion failed: The package (${E}) should have been registered`);if(C.bin.size===0)return Wl.skip;let S=c.find(I=>I.supportsPackage(C,f));if(!S)return Wl.skip;let b=null;try{b=await S.findPackageLocation(C,f)}catch(I){if(I.code==="LOCATOR_NOT_INSTALLED")return Wl.skip;throw I}return{dependency:C,packageLocation:b}}));for(let E of h){if(E===Wl.skip)continue;let{dependency:C,packageLocation:S}=E;for(let[b,I]of C.bin){let T=J.resolve(S,I);s.set(b,[C,fe.fromPortablePath(T),Wj(T)])}}return s}async function ihe(t){return await LR(t.anchoredLocator,{project:t.project})}async function Yj(t,e){await Promise.all(Array.from(e,([r,[,s,a]])=>a?P0(t,r,process.execPath,[s]):P0(t,r,s,[])))}async function she(t,e,r,{cwd:s,project:a,stdin:n,stdout:c,stderr:f,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await LR(t,{project:a});let E=h.get(e);if(!E)throw new Error(`Binary not found (${e}) for ${Yr(a.configuration,t)}`);return await ce.mktempPromise(async C=>{let[,S]=E,b=await Iv({project:a,locator:t,binFolder:C});await Yj(b.BERRY_BIN_FOLDER,h);let I=Wj(fe.toPortablePath(S))?Wu(process.execPath,[...p,S,...r],{cwd:s,env:b,stdin:n,stdout:c,stderr:f}):Wu(S,r,{cwd:s,env:b,stdin:n,stdout:c,stderr:f}),T;try{T=await I}finally{await ce.removePromise(b.BERRY_BIN_FOLDER)}return T.code})}async function pit(t,e,r,{cwd:s,stdin:a,stdout:n,stderr:c,packageAccessibleBinaries:f}){return await she(t.anchoredLocator,e,r,{project:t.project,cwd:s,stdin:a,stdout:n,stderr:c,packageAccessibleBinaries:f})}var Xpe,b0,$pe,ait,lit,Vj=Ze(()=>{Dt();Dt();eA();pv();ql();Xpe=ut(Ld()),b0=Ie("stream");oI();Rc();Ev();yv();gR();xc();bc();Tp();Wo();$pe=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))($pe||{});ait=2,lit=(0,Xpe.default)(ait)});var DI=_((U4t,ahe)=>{"use strict";var ohe=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"]]);ahe.exports=t=>t?Object.keys(t).map(e=>[ohe.has(e)?ohe.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var bI=_((_4t,dhe)=>{"use strict";var lhe=typeof process=="object"&&process?process:{stdout:null,stderr:null},hit=Ie("events"),che=Ie("stream"),uhe=Ie("string_decoder").StringDecoder,_p=Symbol("EOF"),Hp=Symbol("maybeEmitEnd"),x0=Symbol("emittedEnd"),MR=Symbol("emittingEnd"),Cv=Symbol("emittedError"),UR=Symbol("closed"),fhe=Symbol("read"),_R=Symbol("flush"),Ahe=Symbol("flushChunk"),ul=Symbol("encoding"),jp=Symbol("decoder"),HR=Symbol("flowing"),wv=Symbol("paused"),PI=Symbol("resume"),Ys=Symbol("bufferLength"),Jj=Symbol("bufferPush"),Kj=Symbol("bufferShift"),Ko=Symbol("objectMode"),zo=Symbol("destroyed"),zj=Symbol("emitData"),phe=Symbol("emitEnd"),Zj=Symbol("emitEnd2"),Gp=Symbol("async"),Bv=t=>Promise.resolve().then(t),hhe=global._MP_NO_ITERATOR_SYMBOLS_!=="1",git=hhe&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),dit=hhe&&Symbol.iterator||Symbol("iterator not implemented"),mit=t=>t==="end"||t==="finish"||t==="prefinish",yit=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Eit=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),jR=class{constructor(e,r,s){this.src=e,this.dest=r,this.opts=s,this.ondrain=()=>e[PI](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},Xj=class extends jR{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,s){super(e,r,s),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};dhe.exports=class ghe extends che{constructor(e){super(),this[HR]=!1,this[wv]=!1,this.pipes=[],this.buffer=[],this[Ko]=e&&e.objectMode||!1,this[Ko]?this[ul]=null:this[ul]=e&&e.encoding||null,this[ul]==="buffer"&&(this[ul]=null),this[Gp]=e&&!!e.async||!1,this[jp]=this[ul]?new uhe(this[ul]):null,this[_p]=!1,this[x0]=!1,this[MR]=!1,this[UR]=!1,this[Cv]=null,this.writable=!0,this.readable=!0,this[Ys]=0,this[zo]=!1}get bufferLength(){return this[Ys]}get encoding(){return this[ul]}set encoding(e){if(this[Ko])throw new Error("cannot set encoding in objectMode");if(this[ul]&&e!==this[ul]&&(this[jp]&&this[jp].lastNeed||this[Ys]))throw new Error("cannot change encoding");this[ul]!==e&&(this[jp]=e?new uhe(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[jp].write(r)))),this[ul]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Ko]}set objectMode(e){this[Ko]=this[Ko]||!!e}get async(){return this[Gp]}set async(e){this[Gp]=this[Gp]||!!e}write(e,r,s){if(this[_p])throw new Error("write after end");if(this[zo])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(s=r,r="utf8"),r||(r="utf8");let a=this[Gp]?Bv:n=>n();return!this[Ko]&&!Buffer.isBuffer(e)&&(Eit(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):yit(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[Ko]?(this.flowing&&this[Ys]!==0&&this[_R](!0),this.flowing?this.emit("data",e):this[Jj](e),this[Ys]!==0&&this.emit("readable"),s&&a(s),this.flowing):e.length?(typeof e=="string"&&!(r===this[ul]&&!this[jp].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[ul]&&(e=this[jp].write(e)),this.flowing&&this[Ys]!==0&&this[_R](!0),this.flowing?this.emit("data",e):this[Jj](e),this[Ys]!==0&&this.emit("readable"),s&&a(s),this.flowing):(this[Ys]!==0&&this.emit("readable"),s&&a(s),this.flowing)}read(e){if(this[zo])return null;if(this[Ys]===0||e===0||e>this[Ys])return this[Hp](),null;this[Ko]&&(e=null),this.buffer.length>1&&!this[Ko]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[Ys])]);let r=this[fhe](e||null,this.buffer[0]);return this[Hp](),r}[fhe](e,r){return e===r.length||e===null?this[Kj]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[Ys]-=e),this.emit("data",r),!this.buffer.length&&!this[_p]&&this.emit("drain"),r}end(e,r,s){return typeof e=="function"&&(s=e,e=null),typeof r=="function"&&(s=r,r="utf8"),e&&this.write(e,r),s&&this.once("end",s),this[_p]=!0,this.writable=!1,(this.flowing||!this[wv])&&this[Hp](),this}[PI](){this[zo]||(this[wv]=!1,this[HR]=!0,this.emit("resume"),this.buffer.length?this[_R]():this[_p]?this[Hp]():this.emit("drain"))}resume(){return this[PI]()}pause(){this[HR]=!1,this[wv]=!0}get destroyed(){return this[zo]}get flowing(){return this[HR]}get paused(){return this[wv]}[Jj](e){this[Ko]?this[Ys]+=1:this[Ys]+=e.length,this.buffer.push(e)}[Kj](){return this.buffer.length&&(this[Ko]?this[Ys]-=1:this[Ys]-=this.buffer[0].length),this.buffer.shift()}[_R](e){do;while(this[Ahe](this[Kj]()));!e&&!this.buffer.length&&!this[_p]&&this.emit("drain")}[Ahe](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[zo])return;let s=this[x0];return r=r||{},e===lhe.stdout||e===lhe.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,s?r.end&&e.end():(this.pipes.push(r.proxyErrors?new Xj(this,e,r):new jR(this,e,r)),this[Gp]?Bv(()=>this[PI]()):this[PI]()),e}unpipe(e){let r=this.pipes.find(s=>s.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 s=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[PI]():e==="readable"&&this[Ys]!==0?super.emit("readable"):mit(e)&&this[x0]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[Cv]&&(this[Gp]?Bv(()=>r.call(this,this[Cv])):r.call(this,this[Cv])),s}get emittedEnd(){return this[x0]}[Hp](){!this[MR]&&!this[x0]&&!this[zo]&&this.buffer.length===0&&this[_p]&&(this[MR]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[UR]&&this.emit("close"),this[MR]=!1)}emit(e,r,...s){if(e!=="error"&&e!=="close"&&e!==zo&&this[zo])return;if(e==="data")return r?this[Gp]?Bv(()=>this[zj](r)):this[zj](r):!1;if(e==="end")return this[phe]();if(e==="close"){if(this[UR]=!0,!this[x0]&&!this[zo])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[Cv]=r;let n=super.emit("error",r);return this[Hp](),n}else if(e==="resume"){let n=super.emit("resume");return this[Hp](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...s);return this[Hp](),a}[zj](e){for(let s of this.pipes)s.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[Hp](),r}[phe](){this[x0]||(this[x0]=!0,this.readable=!1,this[Gp]?Bv(()=>this[Zj]()):this[Zj]())}[Zj](){if(this[jp]){let r=this[jp].end();if(r){for(let s of this.pipes)s.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[Ko]||(e.dataLength=0);let r=this.promise();return this.on("data",s=>{e.push(s),this[Ko]||(e.dataLength+=s.length)}),r.then(()=>e)}concat(){return this[Ko]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Ko]?Promise.reject(new Error("cannot concat in objectMode")):this[ul]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(zo,()=>r(new Error("stream destroyed"))),this.on("error",s=>r(s)),this.on("end",()=>e())})}[git](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[_p])return Promise.resolve({done:!0});let s=null,a=null,n=h=>{this.removeListener("data",c),this.removeListener("end",f),a(h)},c=h=>{this.removeListener("error",n),this.removeListener("end",f),this.pause(),s({value:h,done:!!this[_p]})},f=()=>{this.removeListener("error",n),this.removeListener("data",c),s({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,E)=>{a=E,s=h,this.once(zo,p),this.once("error",n),this.once("end",f),this.once("data",c)})}}}[dit](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[zo]?(e?this.emit("error",e):this.emit(zo),this):(this[zo]=!0,this.buffer.length=0,this[Ys]=0,typeof this.close=="function"&&!this[UR]&&this.close(),e?this.emit("error",e):this.emit(zo),this)}static isStream(e){return!!e&&(e instanceof ghe||e instanceof che||e instanceof hit&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var yhe=_((H4t,mhe)=>{var Iit=Ie("zlib").constants||{ZLIB_VERNUM:4736};mhe.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},Iit))});var h6=_(Kl=>{"use strict";var n6=Ie("assert"),k0=Ie("buffer").Buffer,Che=Ie("zlib"),fm=Kl.constants=yhe(),Cit=bI(),Ehe=k0.concat,Am=Symbol("_superWrite"),kI=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"}},wit=Symbol("opts"),vv=Symbol("flushFlag"),Ihe=Symbol("finishFlushFlag"),p6=Symbol("fullFlushFlag"),Ii=Symbol("handle"),GR=Symbol("onError"),xI=Symbol("sawError"),$j=Symbol("level"),e6=Symbol("strategy"),t6=Symbol("ended"),j4t=Symbol("_defaultFullFlush"),qR=class extends Cit{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[xI]=!1,this[t6]=!1,this[wit]=e,this[vv]=e.flush,this[Ihe]=e.finishFlush;try{this[Ii]=new Che[r](e)}catch(s){throw new kI(s)}this[GR]=s=>{this[xI]||(this[xI]=!0,this.close(),this.emit("error",s))},this[Ii].on("error",s=>this[GR](new kI(s))),this.once("end",()=>this.close)}close(){this[Ii]&&(this[Ii].close(),this[Ii]=null,this.emit("close"))}reset(){if(!this[xI])return n6(this[Ii],"zlib binding closed"),this[Ii].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[p6]),this.write(Object.assign(k0.alloc(0),{[vv]:e})))}end(e,r,s){return e&&this.write(e,r),this.flush(this[Ihe]),this[t6]=!0,super.end(null,null,s)}get ended(){return this[t6]}write(e,r,s){if(typeof r=="function"&&(s=r,r="utf8"),typeof e=="string"&&(e=k0.from(e,r)),this[xI])return;n6(this[Ii],"zlib binding closed");let a=this[Ii]._handle,n=a.close;a.close=()=>{};let c=this[Ii].close;this[Ii].close=()=>{},k0.concat=h=>h;let f;try{let h=typeof e[vv]=="number"?e[vv]:this[vv];f=this[Ii]._processChunk(e,h),k0.concat=Ehe}catch(h){k0.concat=Ehe,this[GR](new kI(h))}finally{this[Ii]&&(this[Ii]._handle=a,a.close=n,this[Ii].close=c,this[Ii].removeAllListeners("error"))}this[Ii]&&this[Ii].on("error",h=>this[GR](new kI(h)));let p;if(f)if(Array.isArray(f)&&f.length>0){p=this[Am](k0.from(f[0]));for(let h=1;h{this.flush(a),n()};try{this[Ii].params(e,r)}finally{this[Ii].flush=s}this[Ii]&&(this[$j]=e,this[e6]=r)}}}},i6=class extends qp{constructor(e){super(e,"Deflate")}},s6=class extends qp{constructor(e){super(e,"Inflate")}},r6=Symbol("_portable"),o6=class extends qp{constructor(e){super(e,"Gzip"),this[r6]=e&&!!e.portable}[Am](e){return this[r6]?(this[r6]=!1,e[9]=255,super[Am](e)):super[Am](e)}},a6=class extends qp{constructor(e){super(e,"Gunzip")}},l6=class extends qp{constructor(e){super(e,"DeflateRaw")}},c6=class extends qp{constructor(e){super(e,"InflateRaw")}},u6=class extends qp{constructor(e){super(e,"Unzip")}},WR=class extends qR{constructor(e,r){e=e||{},e.flush=e.flush||fm.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||fm.BROTLI_OPERATION_FINISH,super(e,r),this[p6]=fm.BROTLI_OPERATION_FLUSH}},f6=class extends WR{constructor(e){super(e,"BrotliCompress")}},A6=class extends WR{constructor(e){super(e,"BrotliDecompress")}};Kl.Deflate=i6;Kl.Inflate=s6;Kl.Gzip=o6;Kl.Gunzip=a6;Kl.DeflateRaw=l6;Kl.InflateRaw=c6;Kl.Unzip=u6;typeof Che.BrotliCompress=="function"?(Kl.BrotliCompress=f6,Kl.BrotliDecompress=A6):Kl.BrotliCompress=Kl.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var QI=_((W4t,whe)=>{var Bit=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;whe.exports=Bit!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var YR=_((V4t,Bhe)=>{"use strict";var vit=bI(),g6=QI(),d6=Symbol("slurp");Bhe.exports=class extends vit{constructor(e,r,s){switch(super(),this.pause(),this.extended=r,this.globalExtended=s,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=g6(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=g6(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[d6](r),s&&this[d6](s,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let s=this.remain,a=this.blockRemain;return this.remain=Math.max(0,s-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:s>=r?super.write(e):super.write(e.slice(0,s))}[d6](e,r){for(let s in e)e[s]!==null&&e[s]!==void 0&&!(r&&s==="path")&&(this[s]=s==="path"||s==="linkpath"?g6(e[s]):e[s])}}});var m6=_(VR=>{"use strict";VR.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"]]);VR.code=new Map(Array.from(VR.name).map(t=>[t[1],t[0]]))});var Phe=_((K4t,Dhe)=>{"use strict";var Sit=(t,e)=>{if(Number.isSafeInteger(t))t<0?Pit(t,e):Dit(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},Dit=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},Pit=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var s=e.length;s>1;s--){var a=t&255;t=Math.floor(t/256),r?e[s-1]=vhe(a):a===0?e[s-1]=0:(r=!0,e[s-1]=She(a))}},bit=t=>{let e=t[0],r=e===128?kit(t.slice(1,t.length)):e===255?xit(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},xit=t=>{for(var e=t.length,r=0,s=!1,a=e-1;a>-1;a--){var n=t[a],c;s?c=vhe(n):n===0?c=n:(s=!0,c=She(n)),c!==0&&(r-=c*Math.pow(256,e-a-1))}return r},kit=t=>{for(var e=t.length,r=0,s=e-1;s>-1;s--){var a=t[s];a!==0&&(r+=a*Math.pow(256,e-s-1))}return r},vhe=t=>(255^t)&255,She=t=>(255^t)+1&255;Dhe.exports={encode:Sit,parse:bit}});var TI=_((z4t,xhe)=>{"use strict";var y6=m6(),RI=Ie("path").posix,bhe=Phe(),E6=Symbol("slurp"),zl=Symbol("type"),w6=class{constructor(e,r,s,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[zl]="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,s,a):e&&this.set(e)}decode(e,r,s,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=pm(e,r,100),this.mode=Q0(e,r+100,8),this.uid=Q0(e,r+108,8),this.gid=Q0(e,r+116,8),this.size=Q0(e,r+124,12),this.mtime=I6(e,r+136,12),this.cksum=Q0(e,r+148,12),this[E6](s),this[E6](a,!0),this[zl]=pm(e,r+156,1),this[zl]===""&&(this[zl]="0"),this[zl]==="0"&&this.path.substr(-1)==="/"&&(this[zl]="5"),this[zl]==="5"&&(this.size=0),this.linkpath=pm(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=pm(e,r+265,32),this.gname=pm(e,r+297,32),this.devmaj=Q0(e,r+329,8),this.devmin=Q0(e,r+337,8),e[r+475]!==0){let c=pm(e,r+345,155);this.path=c+"/"+this.path}else{let c=pm(e,r+345,130);c&&(this.path=c+"/"+this.path),this.atime=I6(e,r+476,12),this.ctime=I6(e,r+488,12)}let n=8*32;for(let c=r;c=r+512))throw new Error("need 512 bytes for header");let s=this.ctime||this.atime?130:155,a=Qit(this.path||"",s),n=a[0],c=a[1];this.needPax=a[2],this.needPax=hm(e,r,100,n)||this.needPax,this.needPax=R0(e,r+100,8,this.mode)||this.needPax,this.needPax=R0(e,r+108,8,this.uid)||this.needPax,this.needPax=R0(e,r+116,8,this.gid)||this.needPax,this.needPax=R0(e,r+124,12,this.size)||this.needPax,this.needPax=C6(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[zl].charCodeAt(0),this.needPax=hm(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=hm(e,r+265,32,this.uname)||this.needPax,this.needPax=hm(e,r+297,32,this.gname)||this.needPax,this.needPax=R0(e,r+329,8,this.devmaj)||this.needPax,this.needPax=R0(e,r+337,8,this.devmin)||this.needPax,this.needPax=hm(e,r+345,s,c)||this.needPax,e[r+475]!==0?this.needPax=hm(e,r+345,155,c)||this.needPax:(this.needPax=hm(e,r+345,130,c)||this.needPax,this.needPax=C6(e,r+476,12,this.atime)||this.needPax,this.needPax=C6(e,r+488,12,this.ctime)||this.needPax);let f=8*32;for(let p=r;p{let s=t,a="",n,c=RI.parse(t).root||".";if(Buffer.byteLength(s)<100)n=[s,a,!1];else{a=RI.dirname(s),s=RI.basename(s);do Buffer.byteLength(s)<=100&&Buffer.byteLength(a)<=e?n=[s,a,!1]:Buffer.byteLength(s)>100&&Buffer.byteLength(a)<=e?n=[s.substr(0,99),a,!0]:(s=RI.join(RI.basename(a),s),a=RI.dirname(a));while(a!==c&&!n);n||(n=[t.substr(0,99),"",!0])}return n},pm=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),I6=(t,e,r)=>Rit(Q0(t,e,r)),Rit=t=>t===null?null:new Date(t*1e3),Q0=(t,e,r)=>t[e]&128?bhe.parse(t.slice(e,e+r)):Fit(t,e,r),Tit=t=>isNaN(t)?null:t,Fit=(t,e,r)=>Tit(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),Nit={12:8589934591,8:2097151},R0=(t,e,r,s)=>s===null?!1:s>Nit[r]||s<0?(bhe.encode(s,t.slice(e,e+r)),!0):(Oit(t,e,r,s),!1),Oit=(t,e,r,s)=>t.write(Lit(s,r),e,r,"ascii"),Lit=(t,e)=>Mit(Math.floor(t).toString(8),e),Mit=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",C6=(t,e,r,s)=>s===null?!1:R0(t,e,r,s.getTime()/1e3),Uit=new Array(156).join("\0"),hm=(t,e,r,s)=>s===null?!1:(t.write(s+Uit,e,r,"utf8"),s.length!==Buffer.byteLength(s)||s.length>r);xhe.exports=w6});var JR=_((Z4t,khe)=>{"use strict";var _it=TI(),Hit=Ie("path"),Sv=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),s=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(s);for(let n=0;n<512;n++)a[n]=0;new _it({path:("PaxHeader/"+Hit.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+s}};Sv.parse=(t,e,r)=>new Sv(jit(Git(t),e),r);var jit=(t,e)=>e?Object.keys(t).reduce((r,s)=>(r[s]=t[s],r),e):t,Git=t=>t.replace(/\n$/,"").split(` -`).reduce(qit,Object.create(null)),qit=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let s=e.split("="),a=s.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=s.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};khe.exports=Sv});var FI=_((X4t,Qhe)=>{Qhe.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 KR=_(($4t,Rhe)=>{"use strict";Rhe.exports=t=>class extends t{warn(e,r,s={}){this.file&&(s.file=this.file),this.cwd&&(s.cwd=this.cwd),s.code=r instanceof Error&&r.code||e,s.tarCode=e,!this.strict&&s.recoverable!==!1?(r instanceof Error&&(s=Object.assign(r,s),r=r.message),this.emit("warn",s.tarCode,r,s)):r instanceof Error?this.emit("error",Object.assign(r,s)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),s))}}});var v6=_((t3t,The)=>{"use strict";var zR=["|","<",">","?",":"],B6=zR.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),Wit=new Map(zR.map((t,e)=>[t,B6[e]])),Yit=new Map(B6.map((t,e)=>[t,zR[e]]));The.exports={encode:t=>zR.reduce((e,r)=>e.split(r).join(Wit.get(r)),t),decode:t=>B6.reduce((e,r)=>e.split(r).join(Yit.get(r)),t)}});var S6=_((r3t,Nhe)=>{var{isAbsolute:Vit,parse:Fhe}=Ie("path").win32;Nhe.exports=t=>{let e="",r=Fhe(t);for(;Vit(t)||r.root;){let s=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(s.length),e+=s,r=Fhe(t)}return[e,t]}});var Lhe=_((n3t,Ohe)=>{"use strict";Ohe.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 N6=_((o3t,Zhe)=>{"use strict";var qhe=bI(),Whe=JR(),Yhe=TI(),nA=Ie("fs"),Mhe=Ie("path"),rA=QI(),Jit=FI(),Vhe=(t,e)=>e?(t=rA(t).replace(/^\.(\/|$)/,""),Jit(e)+"/"+t):rA(t),Kit=16*1024*1024,Uhe=Symbol("process"),_he=Symbol("file"),Hhe=Symbol("directory"),P6=Symbol("symlink"),jhe=Symbol("hardlink"),Dv=Symbol("header"),ZR=Symbol("read"),b6=Symbol("lstat"),XR=Symbol("onlstat"),x6=Symbol("onread"),k6=Symbol("onreadlink"),Q6=Symbol("openfile"),R6=Symbol("onopenfile"),T0=Symbol("close"),$R=Symbol("mode"),T6=Symbol("awaitDrain"),D6=Symbol("ondrain"),iA=Symbol("prefix"),Ghe=Symbol("hadError"),Jhe=KR(),zit=v6(),Khe=S6(),zhe=Lhe(),eT=Jhe(class extends qhe{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=rA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||Kit,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=rA(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?rA(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 s=!1;if(!this.preservePaths){let[a,n]=Khe(this.path);a&&(this.path=n,s=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=zit.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=rA(r.absolute||Mhe.resolve(this.cwd,e)),this.path===""&&(this.path="./"),s&&this.warn("TAR_ENTRY_INFO",`stripping ${s} from absolute path`,{entry:this,path:s+this.path}),this.statCache.has(this.absolute)?this[XR](this.statCache.get(this.absolute)):this[b6]()}emit(e,...r){return e==="error"&&(this[Ghe]=!0),super.emit(e,...r)}[b6](){nA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[XR](r)})}[XR](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=Xit(e),this.emit("stat",e),this[Uhe]()}[Uhe](){switch(this.type){case"File":return this[_he]();case"Directory":return this[Hhe]();case"SymbolicLink":return this[P6]();default:return this.end()}}[$R](e){return zhe(e,this.type==="Directory",this.portable)}[iA](e){return Vhe(e,this.prefix)}[Dv](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new Yhe({path:this[iA](this.path),linkpath:this.type==="Link"?this[iA](this.linkpath):this.linkpath,mode:this[$R](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 Whe({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[iA](this.path),linkpath:this.type==="Link"?this[iA](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)}[Hhe](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[Dv](),this.end()}[P6](){nA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[k6](r)})}[k6](e){this.linkpath=rA(e),this[Dv](),this.end()}[jhe](e){this.type="Link",this.linkpath=rA(Mhe.relative(this.cwd,e)),this.stat.size=0,this[Dv](),this.end()}[_he](){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[jhe](r)}this.linkCache.set(e,this.absolute)}if(this[Dv](),this.stat.size===0)return this.end();this[Q6]()}[Q6](){nA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[R6](r)})}[R6](e){if(this.fd=e,this[Ghe])return this[T0]();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[ZR]()}[ZR](){let{fd:e,buf:r,offset:s,length:a,pos:n}=this;nA.read(e,r,s,a,n,(c,f)=>{if(c)return this[T0](()=>this.emit("error",c));this[x6](f)})}[T0](e){nA.close(this.fd,e)}[x6](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[T0](()=>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[T0](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[D6]())}[T6](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[ZR]()}}),F6=class extends eT{[b6](){this[XR](nA.lstatSync(this.absolute))}[P6](){this[k6](nA.readlinkSync(this.absolute))}[Q6](){this[R6](nA.openSync(this.absolute,"r"))}[ZR](){let e=!0;try{let{fd:r,buf:s,offset:a,length:n,pos:c}=this,f=nA.readSync(r,s,a,n,c);this[x6](f),e=!1}finally{if(e)try{this[T0](()=>{})}catch{}}}[T6](e){e()}[T0](e){nA.closeSync(this.fd),e()}},Zit=Jhe(class extends qhe{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=rA(e.path),this.mode=this[$R](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=rA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let s=!1;if(!this.preservePaths){let[a,n]=Khe(this.path);a&&(this.path=n,s=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new Yhe({path:this[iA](this.path),linkpath:this.type==="Link"?this[iA](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}),s&&this.warn("TAR_ENTRY_INFO",`stripping ${s} from absolute path`,{entry:this,path:s+this.path}),this.header.encode()&&!this.noPax&&super.write(new Whe({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[iA](this.path),linkpath:this.type==="Link"?this[iA](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)}[iA](e){return Vhe(e,this.prefix)}[$R](e){return zhe(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()}});eT.Sync=F6;eT.Tar=Zit;var Xit=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";Zhe.exports=eT});var cT=_((l3t,i0e)=>{"use strict";var aT=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}},$it=bI(),est=h6(),tst=YR(),q6=N6(),rst=q6.Sync,nst=q6.Tar,ist=$x(),Xhe=Buffer.alloc(1024),nT=Symbol("onStat"),tT=Symbol("ended"),sA=Symbol("queue"),NI=Symbol("current"),gm=Symbol("process"),rT=Symbol("processing"),$he=Symbol("processJob"),oA=Symbol("jobs"),O6=Symbol("jobDone"),iT=Symbol("addFSEntry"),e0e=Symbol("addTarEntry"),_6=Symbol("stat"),H6=Symbol("readdir"),sT=Symbol("onreaddir"),oT=Symbol("pipe"),t0e=Symbol("entry"),L6=Symbol("entryOpt"),j6=Symbol("writeEntryClass"),n0e=Symbol("write"),M6=Symbol("ondrain"),lT=Ie("fs"),r0e=Ie("path"),sst=KR(),U6=QI(),W6=sst(class extends $it{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=U6(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[j6]=q6,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 est.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[M6]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[M6]),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[sA]=new ist,this[oA]=0,this.jobs=+e.jobs||4,this[rT]=!1,this[tT]=!1}[n0e](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[tT]=!0,this[gm](),this}write(e){if(this[tT])throw new Error("write after end");return e instanceof tst?this[e0e](e):this[iT](e),this.flowing}[e0e](e){let r=U6(r0e.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let s=new aT(e.path,r,!1);s.entry=new nst(e,this[L6](s)),s.entry.on("end",a=>this[O6](s)),this[oA]+=1,this[sA].push(s)}this[gm]()}[iT](e){let r=U6(r0e.resolve(this.cwd,e));this[sA].push(new aT(e,r)),this[gm]()}[_6](e){e.pending=!0,this[oA]+=1;let r=this.follow?"stat":"lstat";lT[r](e.absolute,(s,a)=>{e.pending=!1,this[oA]-=1,s?this.emit("error",s):this[nT](e,a)})}[nT](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[gm]()}[H6](e){e.pending=!0,this[oA]+=1,lT.readdir(e.absolute,(r,s)=>{if(e.pending=!1,this[oA]-=1,r)return this.emit("error",r);this[sT](e,s)})}[sT](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[gm]()}[gm](){if(!this[rT]){this[rT]=!0;for(let e=this[sA].head;e!==null&&this[oA]this.warn(r,s,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}}[t0e](e){this[oA]+=1;try{return new this[j6](e.path,this[L6](e)).on("end",()=>this[O6](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[M6](){this[NI]&&this[NI].entry&&this[NI].entry.resume()}[oT](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,c=n==="./"?"":n.replace(/\/*$/,"/");this[iT](c+a)});let r=e.entry,s=this.zip;s?r.on("data",a=>{s.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),G6=class extends W6{constructor(e){super(e),this[j6]=rst}pause(){}resume(){}[_6](e){let r=this.follow?"statSync":"lstatSync";this[nT](e,lT[r](e.absolute))}[H6](e,r){this[sT](e,lT.readdirSync(e.absolute))}[oT](e){let r=e.entry,s=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,c=n==="./"?"":n.replace(/\/*$/,"/");this[iT](c+a)}),s?r.on("data",a=>{s.write(a)}):r.on("data",a=>{super[n0e](a)})}};W6.Sync=G6;i0e.exports=W6});var GI=_(bv=>{"use strict";var ost=bI(),ast=Ie("events").EventEmitter,fl=Ie("fs"),J6=fl.writev;if(!J6){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;J6=(r,s,a,n)=>{let c=(p,h)=>n(p,h,s),f=new e;f.oncomplete=c,t.writeBuffers(r,s,a,f)}}var HI=Symbol("_autoClose"),Yu=Symbol("_close"),Pv=Symbol("_ended"),ii=Symbol("_fd"),s0e=Symbol("_finished"),N0=Symbol("_flags"),Y6=Symbol("_flush"),K6=Symbol("_handleChunk"),z6=Symbol("_makeBuf"),hT=Symbol("_mode"),uT=Symbol("_needDrain"),UI=Symbol("_onerror"),jI=Symbol("_onopen"),V6=Symbol("_onread"),LI=Symbol("_onwrite"),O0=Symbol("_open"),Wp=Symbol("_path"),dm=Symbol("_pos"),aA=Symbol("_queue"),MI=Symbol("_read"),o0e=Symbol("_readSize"),F0=Symbol("_reading"),fT=Symbol("_remain"),a0e=Symbol("_size"),AT=Symbol("_write"),OI=Symbol("_writing"),pT=Symbol("_defaultFlag"),_I=Symbol("_errored"),gT=class extends ost{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[_I]=!1,this[ii]=typeof r.fd=="number"?r.fd:null,this[Wp]=e,this[o0e]=r.readSize||16*1024*1024,this[F0]=!1,this[a0e]=typeof r.size=="number"?r.size:1/0,this[fT]=this[a0e],this[HI]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[ii]=="number"?this[MI]():this[O0]()}get fd(){return this[ii]}get path(){return this[Wp]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[O0](){fl.open(this[Wp],"r",(e,r)=>this[jI](e,r))}[jI](e,r){e?this[UI](e):(this[ii]=r,this.emit("open",r),this[MI]())}[z6](){return Buffer.allocUnsafe(Math.min(this[o0e],this[fT]))}[MI](){if(!this[F0]){this[F0]=!0;let e=this[z6]();if(e.length===0)return process.nextTick(()=>this[V6](null,0,e));fl.read(this[ii],e,0,e.length,null,(r,s,a)=>this[V6](r,s,a))}}[V6](e,r,s){this[F0]=!1,e?this[UI](e):this[K6](r,s)&&this[MI]()}[Yu](){if(this[HI]&&typeof this[ii]=="number"){let e=this[ii];this[ii]=null,fl.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[UI](e){this[F0]=!0,this[Yu](),this.emit("error",e)}[K6](e,r){let s=!1;return this[fT]-=e,e>0&&(s=super.write(ethis[jI](e,r))}[jI](e,r){this[pT]&&this[N0]==="r+"&&e&&e.code==="ENOENT"?(this[N0]="w",this[O0]()):e?this[UI](e):(this[ii]=r,this.emit("open",r),this[Y6]())}end(e,r){return e&&this.write(e,r),this[Pv]=!0,!this[OI]&&!this[aA].length&&typeof this[ii]=="number"&&this[LI](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[Pv]?(this.emit("error",new Error("write() after end()")),!1):this[ii]===null||this[OI]||this[aA].length?(this[aA].push(e),this[uT]=!0,!1):(this[OI]=!0,this[AT](e),!0)}[AT](e){fl.write(this[ii],e,0,e.length,this[dm],(r,s)=>this[LI](r,s))}[LI](e,r){e?this[UI](e):(this[dm]!==null&&(this[dm]+=r),this[aA].length?this[Y6]():(this[OI]=!1,this[Pv]&&!this[s0e]?(this[s0e]=!0,this[Yu](),this.emit("finish")):this[uT]&&(this[uT]=!1,this.emit("drain"))))}[Y6](){if(this[aA].length===0)this[Pv]&&this[LI](null,0);else if(this[aA].length===1)this[AT](this[aA].pop());else{let e=this[aA];this[aA]=[],J6(this[ii],e,this[dm],(r,s)=>this[LI](r,s))}}[Yu](){if(this[HI]&&typeof this[ii]=="number"){let e=this[ii];this[ii]=null,fl.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},X6=class extends dT{[O0](){let e;if(this[pT]&&this[N0]==="r+")try{e=fl.openSync(this[Wp],this[N0],this[hT])}catch(r){if(r.code==="ENOENT")return this[N0]="w",this[O0]();throw r}else e=fl.openSync(this[Wp],this[N0],this[hT]);this[jI](null,e)}[Yu](){if(this[HI]&&typeof this[ii]=="number"){let e=this[ii];this[ii]=null,fl.closeSync(e),this.emit("close")}}[AT](e){let r=!0;try{this[LI](null,fl.writeSync(this[ii],e,0,e.length,this[dm])),r=!1}finally{if(r)try{this[Yu]()}catch{}}}};bv.ReadStream=gT;bv.ReadStreamSync=Z6;bv.WriteStream=dT;bv.WriteStreamSync=X6});var BT=_((f3t,h0e)=>{"use strict";var lst=KR(),cst=TI(),ust=Ie("events"),fst=$x(),Ast=1024*1024,pst=YR(),l0e=JR(),hst=h6(),$6=Buffer.from([31,139]),Lc=Symbol("state"),mm=Symbol("writeEntry"),Yp=Symbol("readEntry"),eG=Symbol("nextEntry"),c0e=Symbol("processEntry"),Mc=Symbol("extendedHeader"),xv=Symbol("globalExtendedHeader"),L0=Symbol("meta"),u0e=Symbol("emitMeta"),Di=Symbol("buffer"),Vp=Symbol("queue"),ym=Symbol("ended"),f0e=Symbol("emittedEnd"),Em=Symbol("emit"),Al=Symbol("unzip"),mT=Symbol("consumeChunk"),yT=Symbol("consumeChunkSub"),tG=Symbol("consumeBody"),A0e=Symbol("consumeMeta"),p0e=Symbol("consumeHeader"),ET=Symbol("consuming"),rG=Symbol("bufferConcat"),nG=Symbol("maybeEnd"),kv=Symbol("writing"),M0=Symbol("aborted"),IT=Symbol("onDone"),Im=Symbol("sawValidEntry"),CT=Symbol("sawNullBlock"),wT=Symbol("sawEOF"),gst=t=>!0;h0e.exports=lst(class extends ust{constructor(e){e=e||{},super(e),this.file=e.file||"",this[Im]=null,this.on(IT,r=>{(this[Lc]==="begin"||this[Im]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(IT,e.ondone):this.on(IT,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||Ast,this.filter=typeof e.filter=="function"?e.filter:gst,this.writable=!0,this.readable=!1,this[Vp]=new fst,this[Di]=null,this[Yp]=null,this[mm]=null,this[Lc]="begin",this[L0]="",this[Mc]=null,this[xv]=null,this[ym]=!1,this[Al]=null,this[M0]=!1,this[CT]=!1,this[wT]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[p0e](e,r){this[Im]===null&&(this[Im]=!1);let s;try{s=new cst(e,r,this[Mc],this[xv])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(s.nullBlock)this[CT]?(this[wT]=!0,this[Lc]==="begin"&&(this[Lc]="header"),this[Em]("eof")):(this[CT]=!0,this[Em]("nullBlock"));else if(this[CT]=!1,!s.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:s});else if(!s.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:s});else{let a=s.type;if(/^(Symbolic)?Link$/.test(a)&&!s.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:s});else if(!/^(Symbolic)?Link$/.test(a)&&s.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:s});else{let n=this[mm]=new pst(s,this[Mc],this[xv]);if(!this[Im])if(n.remain){let c=()=>{n.invalid||(this[Im]=!0)};n.on("end",c)}else this[Im]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[Em]("ignoredEntry",n),this[Lc]="ignore",n.resume()):n.size>0&&(this[L0]="",n.on("data",c=>this[L0]+=c),this[Lc]="meta"):(this[Mc]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[Em]("ignoredEntry",n),this[Lc]=n.remain?"ignore":"header",n.resume()):(n.remain?this[Lc]="body":(this[Lc]="header",n.end()),this[Yp]?this[Vp].push(n):(this[Vp].push(n),this[eG]())))}}}[c0e](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[Yp]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",s=>this[eG]()),r=!1)):(this[Yp]=null,r=!1),r}[eG](){do;while(this[c0e](this[Vp].shift()));if(!this[Vp].length){let e=this[Yp];!e||e.flowing||e.size===e.remain?this[kv]||this.emit("drain"):e.once("drain",s=>this.emit("drain"))}}[tG](e,r){let s=this[mm],a=s.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return s.write(n),s.blockRemain||(this[Lc]="header",this[mm]=null,s.end()),n.length}[A0e](e,r){let s=this[mm],a=this[tG](e,r);return this[mm]||this[u0e](s),a}[Em](e,r,s){!this[Vp].length&&!this[Yp]?this.emit(e,r,s):this[Vp].push([e,r,s])}[u0e](e){switch(this[Em]("meta",this[L0]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[Mc]=l0e.parse(this[L0],this[Mc],!1);break;case"GlobalExtendedHeader":this[xv]=l0e.parse(this[L0],this[xv],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[Mc]=this[Mc]||Object.create(null),this[Mc].path=this[L0].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[Mc]=this[Mc]||Object.create(null),this[Mc].linkpath=this[L0].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[M0]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[M0])return;if(this[Al]===null&&e){if(this[Di]&&(e=Buffer.concat([this[Di],e]),this[Di]=null),e.length<$6.length)return this[Di]=e,!0;for(let s=0;this[Al]===null&&s<$6.length;s++)e[s]!==$6[s]&&(this[Al]=!1);if(this[Al]===null){let s=this[ym];this[ym]=!1,this[Al]=new hst.Unzip,this[Al].on("data",n=>this[mT](n)),this[Al].on("error",n=>this.abort(n)),this[Al].on("end",n=>{this[ym]=!0,this[mT]()}),this[kv]=!0;let a=this[Al][s?"end":"write"](e);return this[kv]=!1,a}}this[kv]=!0,this[Al]?this[Al].write(e):this[mT](e),this[kv]=!1;let r=this[Vp].length?!1:this[Yp]?this[Yp].flowing:!0;return!r&&!this[Vp].length&&this[Yp].once("drain",s=>this.emit("drain")),r}[rG](e){e&&!this[M0]&&(this[Di]=this[Di]?Buffer.concat([this[Di],e]):e)}[nG](){if(this[ym]&&!this[f0e]&&!this[M0]&&!this[ET]){this[f0e]=!0;let e=this[mm];if(e&&e.blockRemain){let r=this[Di]?this[Di].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[Di]&&e.write(this[Di]),e.end()}this[Em](IT)}}[mT](e){if(this[ET])this[rG](e);else if(!e&&!this[Di])this[nG]();else{if(this[ET]=!0,this[Di]){this[rG](e);let r=this[Di];this[Di]=null,this[yT](r)}else this[yT](e);for(;this[Di]&&this[Di].length>=512&&!this[M0]&&!this[wT];){let r=this[Di];this[Di]=null,this[yT](r)}this[ET]=!1}(!this[Di]||this[ym])&&this[nG]()}[yT](e){let r=0,s=e.length;for(;r+512<=s&&!this[M0]&&!this[wT];)switch(this[Lc]){case"begin":case"header":this[p0e](e,r),r+=512;break;case"ignore":case"body":r+=this[tG](e,r);break;case"meta":r+=this[A0e](e,r);break;default:throw new Error("invalid state: "+this[Lc])}r{"use strict";var dst=DI(),d0e=BT(),qI=Ie("fs"),mst=GI(),g0e=Ie("path"),iG=FI();y0e.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 s=dst(t);if(s.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!s.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Est(s,e),s.noResume||yst(s),s.file&&s.sync?Ist(s):s.file?Cst(s,r):m0e(s)};var yst=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},Est=(t,e)=>{let r=new Map(e.map(n=>[iG(n),!0])),s=t.filter,a=(n,c)=>{let f=c||g0e.parse(n).root||".",p=n===f?!1:r.has(n)?r.get(n):a(g0e.dirname(n),f);return r.set(n,p),p};t.filter=s?(n,c)=>s(n,c)&&a(iG(n)):n=>a(iG(n))},Ist=t=>{let e=m0e(t),r=t.file,s=!0,a;try{let n=qI.statSync(r),c=t.maxReadSize||16*1024*1024;if(n.size{let r=new d0e(t),s=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((c,f)=>{r.on("error",f),r.on("end",c),qI.stat(a,(p,h)=>{if(p)f(p);else{let E=new mst.ReadStream(a,{readSize:s,size:h.size});E.on("error",f),E.pipe(r)}})});return e?n.then(e,e):n},m0e=t=>new d0e(t)});var v0e=_((p3t,B0e)=>{"use strict";var wst=DI(),ST=cT(),E0e=GI(),I0e=vT(),C0e=Ie("path");B0e.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 s=wst(t);if(s.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!s.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return s.file&&s.sync?Bst(s,e):s.file?vst(s,e,r):s.sync?Sst(s,e):Dst(s,e)};var Bst=(t,e)=>{let r=new ST.Sync(t),s=new E0e.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(s),w0e(r,e)},vst=(t,e,r)=>{let s=new ST(t),a=new E0e.WriteStream(t.file,{mode:t.mode||438});s.pipe(a);let n=new Promise((c,f)=>{a.on("error",f),a.on("close",c),s.on("error",f)});return sG(s,e),r?n.then(r,r):n},w0e=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?I0e({file:C0e.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:s=>t.add(s)}):t.add(r)}),t.end()},sG=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return I0e({file:C0e.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:s=>t.add(s)}).then(s=>sG(t,e));t.add(r)}t.end()},Sst=(t,e)=>{let r=new ST.Sync(t);return w0e(r,e),r},Dst=(t,e)=>{let r=new ST(t);return sG(r,e),r}});var oG=_((h3t,Q0e)=>{"use strict";var Pst=DI(),S0e=cT(),Zl=Ie("fs"),D0e=GI(),P0e=vT(),b0e=Ie("path"),x0e=TI();Q0e.exports=(t,e,r)=>{let s=Pst(t);if(!s.file)throw new TypeError("file is required");if(s.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),s.sync?bst(s,e):kst(s,e,r)};var bst=(t,e)=>{let r=new S0e.Sync(t),s=!0,a,n;try{try{a=Zl.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=Zl.openSync(t.file,"w+");else throw p}let c=Zl.fstatSync(a),f=Buffer.alloc(512);e:for(n=0;nc.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}s=!1,xst(t,r,n,a,e)}finally{if(s)try{Zl.closeSync(a)}catch{}}},xst=(t,e,r,s,a)=>{let n=new D0e.WriteStreamSync(t.file,{fd:s,start:r});e.pipe(n),Qst(e,a)},kst=(t,e,r)=>{e=Array.from(e);let s=new S0e(t),a=(c,f,p)=>{let h=(I,T)=>{I?Zl.close(c,N=>p(I)):p(null,T)},E=0;if(f===0)return h(null,0);let C=0,S=Buffer.alloc(512),b=(I,T)=>{if(I)return h(I);if(C+=T,C<512&&T)return Zl.read(c,S,C,S.length-C,E+C,b);if(E===0&&S[0]===31&&S[1]===139)return h(new Error("cannot append to compressed archives"));if(C<512)return h(null,E);let N=new x0e(S);if(!N.cksumValid)return h(null,E);let U=512*Math.ceil(N.size/512);if(E+U+512>f||(E+=U+512,E>=f))return h(null,E);t.mtimeCache&&t.mtimeCache.set(N.path,N.mtime),C=0,Zl.read(c,S,0,512,E,b)};Zl.read(c,S,0,512,E,b)},n=new Promise((c,f)=>{s.on("error",f);let p="r+",h=(E,C)=>{if(E&&E.code==="ENOENT"&&p==="r+")return p="w+",Zl.open(t.file,p,h);if(E)return f(E);Zl.fstat(C,(S,b)=>{if(S)return Zl.close(C,()=>f(S));a(C,b.size,(I,T)=>{if(I)return f(I);let N=new D0e.WriteStream(t.file,{fd:C,start:T});s.pipe(N),N.on("error",f),N.on("close",c),k0e(s,e)})})};Zl.open(t.file,p,h)});return r?n.then(r,r):n},Qst=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?P0e({file:b0e.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:s=>t.add(s)}):t.add(r)}),t.end()},k0e=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return P0e({file:b0e.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:s=>t.add(s)}).then(s=>k0e(t,e));t.add(r)}t.end()}});var T0e=_((g3t,R0e)=>{"use strict";var Rst=DI(),Tst=oG();R0e.exports=(t,e,r)=>{let s=Rst(t);if(!s.file)throw new TypeError("file is required");if(s.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),Fst(s),Tst(s,e,r)};var Fst=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,s)=>e(r,s)&&!(t.mtimeCache.get(r)>s.mtime):(r,s)=>!(t.mtimeCache.get(r)>s.mtime)}});var O0e=_((d3t,N0e)=>{var{promisify:F0e}=Ie("util"),U0=Ie("fs"),Nst=t=>{if(!t)t={mode:511,fs:U0};else if(typeof t=="object")t={mode:511,fs:U0,...t};else if(typeof t=="number")t={mode:t,fs:U0};else if(typeof t=="string")t={mode:parseInt(t,8),fs:U0};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||U0.mkdir,t.mkdirAsync=F0e(t.mkdir),t.stat=t.stat||t.fs.stat||U0.stat,t.statAsync=F0e(t.stat),t.statSync=t.statSync||t.fs.statSync||U0.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||U0.mkdirSync,t};N0e.exports=Nst});var M0e=_((m3t,L0e)=>{var Ost=process.platform,{resolve:Lst,parse:Mst}=Ie("path"),Ust=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=Lst(t),Ost==="win32"){let e=/[*|"<>?:]/,{root:r}=Mst(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};L0e.exports=Ust});var G0e=_((y3t,j0e)=>{var{dirname:U0e}=Ie("path"),_0e=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(s=>s.isDirectory()?r:void 0,s=>s.code==="ENOENT"?_0e(t,U0e(e),e):void 0),H0e=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(s){return s.code==="ENOENT"?H0e(t,U0e(e),e):void 0}};j0e.exports={findMade:_0e,findMadeSync:H0e}});var cG=_((E3t,W0e)=>{var{dirname:q0e}=Ie("path"),aG=(t,e,r)=>{e.recursive=!1;let s=q0e(t);return s===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 aG(s,e).then(n=>aG(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})})},lG=(t,e,r)=>{let s=q0e(t);if(e.recursive=!1,s===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 lG(t,e,lG(s,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};W0e.exports={mkdirpManual:aG,mkdirpManualSync:lG}});var J0e=_((I3t,V0e)=>{var{dirname:Y0e}=Ie("path"),{findMade:_st,findMadeSync:Hst}=G0e(),{mkdirpManual:jst,mkdirpManualSync:Gst}=cG(),qst=(t,e)=>(e.recursive=!0,Y0e(t)===t?e.mkdirAsync(t,e):_st(e,t).then(s=>e.mkdirAsync(t,e).then(()=>s).catch(a=>{if(a.code==="ENOENT")return jst(t,e);throw a}))),Wst=(t,e)=>{if(e.recursive=!0,Y0e(t)===t)return e.mkdirSync(t,e);let s=Hst(e,t);try{return e.mkdirSync(t,e),s}catch(a){if(a.code==="ENOENT")return Gst(t,e);throw a}};V0e.exports={mkdirpNative:qst,mkdirpNativeSync:Wst}});var X0e=_((C3t,Z0e)=>{var K0e=Ie("fs"),Yst=process.version,uG=Yst.replace(/^v/,"").split("."),z0e=+uG[0]>10||+uG[0]==10&&+uG[1]>=12,Vst=z0e?t=>t.mkdir===K0e.mkdir:()=>!1,Jst=z0e?t=>t.mkdirSync===K0e.mkdirSync:()=>!1;Z0e.exports={useNative:Vst,useNativeSync:Jst}});var ige=_((w3t,nge)=>{var WI=O0e(),YI=M0e(),{mkdirpNative:$0e,mkdirpNativeSync:ege}=J0e(),{mkdirpManual:tge,mkdirpManualSync:rge}=cG(),{useNative:Kst,useNativeSync:zst}=X0e(),VI=(t,e)=>(t=YI(t),e=WI(e),Kst(e)?$0e(t,e):tge(t,e)),Zst=(t,e)=>(t=YI(t),e=WI(e),zst(e)?ege(t,e):rge(t,e));VI.sync=Zst;VI.native=(t,e)=>$0e(YI(t),WI(e));VI.manual=(t,e)=>tge(YI(t),WI(e));VI.nativeSync=(t,e)=>ege(YI(t),WI(e));VI.manualSync=(t,e)=>rge(YI(t),WI(e));nge.exports=VI});var fge=_((B3t,uge)=>{"use strict";var Uc=Ie("fs"),Cm=Ie("path"),Xst=Uc.lchown?"lchown":"chown",$st=Uc.lchownSync?"lchownSync":"chownSync",oge=Uc.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),sge=(t,e,r)=>{try{return Uc[$st](t,e,r)}catch(s){if(s.code!=="ENOENT")throw s}},eot=(t,e,r)=>{try{return Uc.chownSync(t,e,r)}catch(s){if(s.code!=="ENOENT")throw s}},tot=oge?(t,e,r,s)=>a=>{!a||a.code!=="EISDIR"?s(a):Uc.chown(t,e,r,s)}:(t,e,r,s)=>s,fG=oge?(t,e,r)=>{try{return sge(t,e,r)}catch(s){if(s.code!=="EISDIR")throw s;eot(t,e,r)}}:(t,e,r)=>sge(t,e,r),rot=process.version,age=(t,e,r)=>Uc.readdir(t,e,r),not=(t,e)=>Uc.readdirSync(t,e);/^v4\./.test(rot)&&(age=(t,e,r)=>Uc.readdir(t,r));var DT=(t,e,r,s)=>{Uc[Xst](t,e,r,tot(t,e,r,a=>{s(a&&a.code!=="ENOENT"?a:null)}))},lge=(t,e,r,s,a)=>{if(typeof e=="string")return Uc.lstat(Cm.resolve(t,e),(n,c)=>{if(n)return a(n.code!=="ENOENT"?n:null);c.name=e,lge(t,c,r,s,a)});if(e.isDirectory())AG(Cm.resolve(t,e.name),r,s,n=>{if(n)return a(n);let c=Cm.resolve(t,e.name);DT(c,r,s,a)});else{let n=Cm.resolve(t,e.name);DT(n,r,s,a)}},AG=(t,e,r,s)=>{age(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return s();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return s(a)}if(a||!n.length)return DT(t,e,r,s);let c=n.length,f=null,p=h=>{if(!f){if(h)return s(f=h);if(--c===0)return DT(t,e,r,s)}};n.forEach(h=>lge(t,h,e,r,p))})},iot=(t,e,r,s)=>{if(typeof e=="string")try{let a=Uc.lstatSync(Cm.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&cge(Cm.resolve(t,e.name),r,s),fG(Cm.resolve(t,e.name),r,s)},cge=(t,e,r)=>{let s;try{s=not(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return fG(t,e,r);throw a}return s&&s.length&&s.forEach(a=>iot(t,a,e,r)),fG(t,e,r)};uge.exports=AG;AG.sync=cge});var gge=_((v3t,pG)=>{"use strict";var Age=ige(),_c=Ie("fs"),PT=Ie("path"),pge=fge(),Vu=QI(),bT=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},xT=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},kT=(t,e)=>t.get(Vu(e)),Qv=(t,e,r)=>t.set(Vu(e),r),sot=(t,e)=>{_c.stat(t,(r,s)=>{(r||!s.isDirectory())&&(r=new xT(t,r&&r.code||"ENOTDIR")),e(r)})};pG.exports=(t,e,r)=>{t=Vu(t);let s=e.umask,a=e.mode|448,n=(a&s)!==0,c=e.uid,f=e.gid,p=typeof c=="number"&&typeof f=="number"&&(c!==e.processUid||f!==e.processGid),h=e.preserve,E=e.unlink,C=e.cache,S=Vu(e.cwd),b=(N,U)=>{N?r(N):(Qv(C,t,!0),U&&p?pge(U,c,f,W=>b(W)):n?_c.chmod(t,a,r):r())};if(C&&kT(C,t)===!0)return b();if(t===S)return sot(t,b);if(h)return Age(t,{mode:a}).then(N=>b(null,N),b);let T=Vu(PT.relative(S,t)).split("/");QT(S,T,a,C,E,S,null,b)};var QT=(t,e,r,s,a,n,c,f)=>{if(!e.length)return f(null,c);let p=e.shift(),h=Vu(PT.resolve(t+"/"+p));if(kT(s,h))return QT(h,e,r,s,a,n,c,f);_c.mkdir(h,r,hge(h,e,r,s,a,n,c,f))},hge=(t,e,r,s,a,n,c,f)=>p=>{p?_c.lstat(t,(h,E)=>{if(h)h.path=h.path&&Vu(h.path),f(h);else if(E.isDirectory())QT(t,e,r,s,a,n,c,f);else if(a)_c.unlink(t,C=>{if(C)return f(C);_c.mkdir(t,r,hge(t,e,r,s,a,n,c,f))});else{if(E.isSymbolicLink())return f(new bT(t,t+"/"+e.join("/")));f(p)}}):(c=c||t,QT(t,e,r,s,a,n,c,f))},oot=t=>{let e=!1,r="ENOTDIR";try{e=_c.statSync(t).isDirectory()}catch(s){r=s.code}finally{if(!e)throw new xT(t,r)}};pG.exports.sync=(t,e)=>{t=Vu(t);let r=e.umask,s=e.mode|448,a=(s&r)!==0,n=e.uid,c=e.gid,f=typeof n=="number"&&typeof c=="number"&&(n!==e.processUid||c!==e.processGid),p=e.preserve,h=e.unlink,E=e.cache,C=Vu(e.cwd),S=N=>{Qv(E,t,!0),N&&f&&pge.sync(N,n,c),a&&_c.chmodSync(t,s)};if(E&&kT(E,t)===!0)return S();if(t===C)return oot(C),S();if(p)return S(Age.sync(t,s));let I=Vu(PT.relative(C,t)).split("/"),T=null;for(let N=I.shift(),U=C;N&&(U+="/"+N);N=I.shift())if(U=Vu(PT.resolve(U)),!kT(E,U))try{_c.mkdirSync(U,s),T=T||U,Qv(E,U,!0)}catch{let ee=_c.lstatSync(U);if(ee.isDirectory()){Qv(E,U,!0);continue}else if(h){_c.unlinkSync(U),_c.mkdirSync(U,s),T=T||U,Qv(E,U,!0);continue}else if(ee.isSymbolicLink())return new bT(U,U+"/"+I.join("/"))}return S(T)}});var gG=_((S3t,dge)=>{var hG=Object.create(null),{hasOwnProperty:aot}=Object.prototype;dge.exports=t=>(aot.call(hG,t)||(hG[t]=t.normalize("NFKD")),hG[t])});var Ige=_((D3t,Ege)=>{var mge=Ie("assert"),lot=gG(),cot=FI(),{join:yge}=Ie("path"),uot=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,fot=uot==="win32";Ege.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((C,S)=>(C.length&&(S=yge(C[C.length-1],S)),C.push(S||"/"),C),[]),s=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(C=>t.get(C)),dirs:[...E.dirs].map(C=>t.get(C))}},n=h=>{let{paths:E,dirs:C}=a(h);return E.every(S=>S[0]===h)&&C.every(S=>S[0]instanceof Set&&S[0].has(h))},c=h=>s.has(h)||!n(h)?!1:(s.add(h),h(()=>f(h)),!0),f=h=>{if(!s.has(h))return!1;let{paths:E,dirs:C}=e.get(h),S=new Set;return E.forEach(b=>{let I=t.get(b);mge.equal(I[0],h),I.length===1?t.delete(b):(I.shift(),typeof I[0]=="function"?S.add(I[0]):I[0].forEach(T=>S.add(T)))}),C.forEach(b=>{let I=t.get(b);mge(I[0]instanceof Set),I[0].size===1&&I.length===1?t.delete(b):I[0].size===1?(I.shift(),S.add(I[0])):I[0].delete(h)}),s.delete(h),S.forEach(b=>c(b)),!0};return{check:n,reserve:(h,E)=>{h=fot?["win32 parallelization disabled"]:h.map(S=>lot(cot(yge(S))).toLowerCase());let C=new Set(h.map(S=>r(S)).reduce((S,b)=>S.concat(b)));return e.set(E,{dirs:C,paths:h}),h.forEach(S=>{let b=t.get(S);b?b.push(E):t.set(S,[E])}),C.forEach(S=>{let b=t.get(S);b?b[b.length-1]instanceof Set?b[b.length-1].add(E):b.push(new Set([E])):t.set(S,[new Set([E])])}),c(E)}}}});var Bge=_((P3t,wge)=>{var Aot=process.platform,pot=Aot==="win32",hot=global.__FAKE_TESTING_FS__||Ie("fs"),{O_CREAT:got,O_TRUNC:dot,O_WRONLY:mot,UV_FS_O_FILEMAP:Cge=0}=hot.constants,yot=pot&&!!Cge,Eot=512*1024,Iot=Cge|dot|got|mot;wge.exports=yot?t=>t"w"});var vG=_((b3t,Lge)=>{"use strict";var Cot=Ie("assert"),wot=BT(),Mn=Ie("fs"),Bot=GI(),Jp=Ie("path"),Fge=gge(),vge=v6(),vot=Ige(),Sot=S6(),Xl=QI(),Dot=FI(),Pot=gG(),Sge=Symbol("onEntry"),yG=Symbol("checkFs"),Dge=Symbol("checkFs2"),FT=Symbol("pruneCache"),EG=Symbol("isReusable"),Hc=Symbol("makeFs"),IG=Symbol("file"),CG=Symbol("directory"),NT=Symbol("link"),Pge=Symbol("symlink"),bge=Symbol("hardlink"),xge=Symbol("unsupported"),kge=Symbol("checkPath"),_0=Symbol("mkdir"),Zo=Symbol("onError"),RT=Symbol("pending"),Qge=Symbol("pend"),JI=Symbol("unpend"),dG=Symbol("ended"),mG=Symbol("maybeClose"),wG=Symbol("skip"),Rv=Symbol("doChown"),Tv=Symbol("uid"),Fv=Symbol("gid"),Nv=Symbol("checkedCwd"),Nge=Ie("crypto"),Oge=Bge(),bot=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,Ov=bot==="win32",xot=(t,e)=>{if(!Ov)return Mn.unlink(t,e);let r=t+".DELETE."+Nge.randomBytes(16).toString("hex");Mn.rename(t,r,s=>{if(s)return e(s);Mn.unlink(r,e)})},kot=t=>{if(!Ov)return Mn.unlinkSync(t);let e=t+".DELETE."+Nge.randomBytes(16).toString("hex");Mn.renameSync(t,e),Mn.unlinkSync(e)},Rge=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,Tge=t=>Pot(Dot(Xl(t))).toLowerCase(),Qot=(t,e)=>{e=Tge(e);for(let r of t.keys()){let s=Tge(r);(s===e||s.indexOf(e+"/")===0)&&t.delete(r)}},Rot=t=>{for(let e of t.keys())t.delete(e)},Lv=class extends wot{constructor(e){if(e||(e={}),e.ondone=r=>{this[dG]=!0,this[mG]()},super(e),this[Nv]=!1,this.reservations=vot(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[RT]=0,this[dG]=!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||Ov,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=Xl(Jp.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[Sge](r))}warn(e,r,s={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(s.recoverable=!1),super.warn(e,r,s)}[mG](){this[dG]&&this[RT]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[kge](e){if(this.strip){let r=Xl(e.path).split("/");if(r.length=this.strip)e.linkpath=s.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=Xl(e.path),s=r.split("/");if(s.includes("..")||Ov&&/^[a-z]:\.\.$/i.test(s[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=Sot(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(Jp.isAbsolute(e.path)?e.absolute=Xl(Jp.resolve(e.path)):e.absolute=Xl(Jp.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:Xl(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}=Jp.win32.parse(e.absolute);e.absolute=r+vge.encode(e.absolute.substr(r.length));let{root:s}=Jp.win32.parse(e.path);e.path=s+vge.encode(e.path.substr(s.length))}return!0}[Sge](e){if(!this[kge](e))return e.resume();switch(Cot.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[yG](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[xge](e)}}[Zo](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[JI](),r.resume())}[_0](e,r,s){Fge(Xl(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},s)}[Rv](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}[Tv](e){return Rge(this.uid,e.uid,this.processUid)}[Fv](e){return Rge(this.gid,e.gid,this.processGid)}[IG](e,r){let s=e.mode&4095||this.fmode,a=new Bot.WriteStream(e.absolute,{flags:Oge(e.size),mode:s,autoClose:!1});a.on("error",p=>{a.fd&&Mn.close(a.fd,()=>{}),a.write=()=>!0,this[Zo](p,e),r()});let n=1,c=p=>{if(p){a.fd&&Mn.close(a.fd,()=>{}),this[Zo](p,e),r();return}--n===0&&Mn.close(a.fd,h=>{h?this[Zo](h,e):this[JI](),r()})};a.on("finish",p=>{let h=e.absolute,E=a.fd;if(e.mtime&&!this.noMtime){n++;let C=e.atime||new Date,S=e.mtime;Mn.futimes(E,C,S,b=>b?Mn.utimes(h,C,S,I=>c(I&&b)):c())}if(this[Rv](e)){n++;let C=this[Tv](e),S=this[Fv](e);Mn.fchown(E,C,S,b=>b?Mn.chown(h,C,S,I=>c(I&&b)):c())}c()});let f=this.transform&&this.transform(e)||e;f!==e&&(f.on("error",p=>{this[Zo](p,e),r()}),e.pipe(f)),f.pipe(a)}[CG](e,r){let s=e.mode&4095||this.dmode;this[_0](e.absolute,s,a=>{if(a){this[Zo](a,e),r();return}let n=1,c=f=>{--n===0&&(r(),this[JI](),e.resume())};e.mtime&&!this.noMtime&&(n++,Mn.utimes(e.absolute,e.atime||new Date,e.mtime,c)),this[Rv](e)&&(n++,Mn.chown(e.absolute,this[Tv](e),this[Fv](e),c)),c()})}[xge](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[Pge](e,r){this[NT](e,e.linkpath,"symlink",r)}[bge](e,r){let s=Xl(Jp.resolve(this.cwd,e.linkpath));this[NT](e,s,"link",r)}[Qge](){this[RT]++}[JI](){this[RT]--,this[mG]()}[wG](e){this[JI](),e.resume()}[EG](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!Ov}[yG](e){this[Qge]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,s=>this[Dge](e,s))}[FT](e){e.type==="SymbolicLink"?Rot(this.dirCache):e.type!=="Directory"&&Qot(this.dirCache,e.absolute)}[Dge](e,r){this[FT](e);let s=f=>{this[FT](e),r(f)},a=()=>{this[_0](this.cwd,this.dmode,f=>{if(f){this[Zo](f,e),s();return}this[Nv]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let f=Xl(Jp.dirname(e.absolute));if(f!==this.cwd)return this[_0](f,this.dmode,p=>{if(p){this[Zo](p,e),s();return}c()})}c()},c=()=>{Mn.lstat(e.absolute,(f,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[wG](e),s();return}if(f||this[EG](e,p))return this[Hc](null,e,s);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,E=C=>this[Hc](C,e,s);return h?Mn.chmod(e.absolute,e.mode,E):E()}if(e.absolute!==this.cwd)return Mn.rmdir(e.absolute,h=>this[Hc](h,e,s))}if(e.absolute===this.cwd)return this[Hc](null,e,s);xot(e.absolute,h=>this[Hc](h,e,s))})};this[Nv]?n():a()}[Hc](e,r,s){if(e){this[Zo](e,r),s();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[IG](r,s);case"Link":return this[bge](r,s);case"SymbolicLink":return this[Pge](r,s);case"Directory":case"GNUDumpDir":return this[CG](r,s)}}[NT](e,r,s,a){Mn[s](r,e.absolute,n=>{n?this[Zo](n,e):(this[JI](),e.resume()),a()})}},TT=t=>{try{return[null,t()]}catch(e){return[e,null]}},BG=class extends Lv{[Hc](e,r){return super[Hc](e,r,()=>{})}[yG](e){if(this[FT](e),!this[Nv]){let n=this[_0](this.cwd,this.dmode);if(n)return this[Zo](n,e);this[Nv]=!0}if(e.absolute!==this.cwd){let n=Xl(Jp.dirname(e.absolute));if(n!==this.cwd){let c=this[_0](n,this.dmode);if(c)return this[Zo](c,e)}}let[r,s]=TT(()=>Mn.lstatSync(e.absolute));if(s&&(this.keep||this.newer&&s.mtime>e.mtime))return this[wG](e);if(r||this[EG](e,s))return this[Hc](null,e);if(s.isDirectory()){if(e.type==="Directory"){let c=!this.noChmod&&e.mode&&(s.mode&4095)!==e.mode,[f]=c?TT(()=>{Mn.chmodSync(e.absolute,e.mode)}):[];return this[Hc](f,e)}let[n]=TT(()=>Mn.rmdirSync(e.absolute));this[Hc](n,e)}let[a]=e.absolute===this.cwd?[]:TT(()=>kot(e.absolute));this[Hc](a,e)}[IG](e,r){let s=e.mode&4095||this.fmode,a=f=>{let p;try{Mn.closeSync(n)}catch(h){p=h}(f||p)&&this[Zo](f||p,e),r()},n;try{n=Mn.openSync(e.absolute,Oge(e.size),s)}catch(f){return a(f)}let c=this.transform&&this.transform(e)||e;c!==e&&(c.on("error",f=>this[Zo](f,e)),e.pipe(c)),c.on("data",f=>{try{Mn.writeSync(n,f,0,f.length)}catch(p){a(p)}}),c.on("end",f=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,E=e.mtime;try{Mn.futimesSync(n,h,E)}catch(C){try{Mn.utimesSync(e.absolute,h,E)}catch{p=C}}}if(this[Rv](e)){let h=this[Tv](e),E=this[Fv](e);try{Mn.fchownSync(n,h,E)}catch(C){try{Mn.chownSync(e.absolute,h,E)}catch{p=p||C}}}a(p)})}[CG](e,r){let s=e.mode&4095||this.dmode,a=this[_0](e.absolute,s);if(a){this[Zo](a,e),r();return}if(e.mtime&&!this.noMtime)try{Mn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[Rv](e))try{Mn.chownSync(e.absolute,this[Tv](e),this[Fv](e))}catch{}r(),e.resume()}[_0](e,r){try{return Fge.sync(Xl(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(s){return s}}[NT](e,r,s,a){try{Mn[s+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[Zo](n,e)}}};Lv.Sync=BG;Lge.exports=Lv});var jge=_((x3t,Hge)=>{"use strict";var Tot=DI(),OT=vG(),Uge=Ie("fs"),_ge=GI(),Mge=Ie("path"),SG=FI();Hge.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 s=Tot(t);if(s.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!s.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Fot(s,e),s.file&&s.sync?Not(s):s.file?Oot(s,r):s.sync?Lot(s):Mot(s)};var Fot=(t,e)=>{let r=new Map(e.map(n=>[SG(n),!0])),s=t.filter,a=(n,c)=>{let f=c||Mge.parse(n).root||".",p=n===f?!1:r.has(n)?r.get(n):a(Mge.dirname(n),f);return r.set(n,p),p};t.filter=s?(n,c)=>s(n,c)&&a(SG(n)):n=>a(SG(n))},Not=t=>{let e=new OT.Sync(t),r=t.file,s=Uge.statSync(r),a=t.maxReadSize||16*1024*1024;new _ge.ReadStreamSync(r,{readSize:a,size:s.size}).pipe(e)},Oot=(t,e)=>{let r=new OT(t),s=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((c,f)=>{r.on("error",f),r.on("close",c),Uge.stat(a,(p,h)=>{if(p)f(p);else{let E=new _ge.ReadStream(a,{readSize:s,size:h.size});E.on("error",f),E.pipe(r)}})});return e?n.then(e,e):n},Lot=t=>new OT.Sync(t),Mot=t=>new OT(t)});var Gge=_(bs=>{"use strict";bs.c=bs.create=v0e();bs.r=bs.replace=oG();bs.t=bs.list=vT();bs.u=bs.update=T0e();bs.x=bs.extract=jge();bs.Pack=cT();bs.Unpack=vG();bs.Parse=BT();bs.ReadEntry=YR();bs.WriteEntry=N6();bs.Header=TI();bs.Pax=JR();bs.types=m6()});var DG,qge,H0,Mv,Uv,Wge=Ze(()=>{DG=ut(Ld()),qge=Ie("worker_threads"),H0=Symbol("kTaskInfo"),Mv=class{constructor(e,r){this.fn=e;this.limit=(0,DG.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},Uv=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,DG.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let s=this.workers.pop();s?s.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new qge.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[H0])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[H0].resolve(r),e[H0]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[H0]?.reject(r),e[H0]=null}),e.on("exit",r=>{r!==0&&e[H0]?.reject(new Error(`Worker exited with code ${r}`)),e[H0]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((s,a)=>{r[H0]={resolve:s,reject:a},r.postMessage(e)})})}}});var Vge=_((T3t,Yge)=>{var PG;Yge.exports.getContent=()=>(typeof PG>"u"&&(PG=Ie("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),PG)});var ps={};Vt(ps,{convertToZip:()=>jot,convertToZipWorker:()=>kG,extractArchiveTo:()=>Xge,getDefaultTaskPool:()=>zge,getTaskPoolForConfiguration:()=>Zge,makeArchiveFromDirectory:()=>Hot});function Uot(t,e){switch(t){case"async":return new Mv(kG,{poolSize:e});case"workers":return new Uv((0,xG.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function zge(){return typeof bG>"u"&&(bG=Uot("workers",fs.availableParallelism())),bG}function Zge(t){return typeof t>"u"?zge():Yl(_ot,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new Mv(kG,{poolSize:r});case"workers":return new Uv((0,xG.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function kG(t){let{tmpFile:e,tgz:r,compressionLevel:s,extractBufferOpts:a}=t,n=new As(e,{create:!0,level:s,stats:$a.makeDefaultStats()}),c=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await Xge(c,n,a),n.saveAndClose(),e}async function Hot(t,{baseFs:e=new Yn,prefixPath:r=vt.root,compressionLevel:s,inMemory:a=!1}={}){let n;if(a)n=new As(null,{level:s});else{let f=await ce.mktempPromise(),p=J.join(f,"archive.zip");n=new As(p,{create:!0,level:s})}let c=J.resolve(vt.root,r);return await n.copyPromise(c,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function jot(t,e={}){let r=await ce.mktempPromise(),s=J.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??Zge(e.configuration)).run({tmpFile:s,tgz:t,compressionLevel:a,extractBufferOpts:n}),new As(s,{level:e.compressionLevel})}async function*Got(t){let e=new Kge.default.Parse,r=new Jge.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",s=>{r.write(s)}),e.on("error",s=>{r.destroy(s)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let s of r){let a=s;yield a,a.resume()}}async function Xge(t,e,{stripComponents:r=0,prefixPath:s=vt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let c=n.path.split(/\//g);return!!(c.some(f=>f==="..")||c.length<=r)}for await(let n of Got(t)){if(a(n))continue;let c=J.normalize(fe.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(c.length<=r)continue;let f=c.slice(r).join("/"),p=J.join(s,f),h=420;switch((n.type==="Directory"||(n.mode??0)&73)&&(h|=73),n.type){case"Directory":e.mkdirpSync(J.dirname(p),{chmod:493,utimes:[fi.SAFE_TIME,fi.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,fi.SAFE_TIME,fi.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(J.dirname(p),{chmod:493,utimes:[fi.SAFE_TIME,fi.SAFE_TIME]}),e.writeFileSync(p,await WE(n),{mode:h}),e.utimesSync(p,fi.SAFE_TIME,fi.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(J.dirname(p),{chmod:493,utimes:[fi.SAFE_TIME,fi.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,fi.SAFE_TIME,fi.SAFE_TIME);break}}return e}var Jge,Kge,xG,bG,_ot,$ge=Ze(()=>{Ge();Dt();eA();Jge=Ie("stream"),Kge=ut(Gge());Wge();bc();xG=ut(Vge());_ot=new WeakMap});var tde=_((QG,ede)=>{(function(t,e){typeof QG=="object"?ede.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(QG,function(){function t(a,n){var c=n?"\u2514":"\u251C";return a?c+="\u2500 ":c+="\u2500\u2500\u2510",c}function e(a,n){var c=[];for(var f in a)a.hasOwnProperty(f)&&(n&&typeof a[f]=="function"||c.push(f));return c}function r(a,n,c,f,p,h,E){var C="",S=0,b,I,T=f.slice(0);if(T.push([n,c])&&f.length>0&&(f.forEach(function(U,W){W>0&&(C+=(U[1]?" ":"\u2502")+" "),!I&&U[0]===n&&(I=!0)}),C+=t(a,c)+a,p&&(typeof n!="object"||n instanceof Date)&&(C+=": "+n),I&&(C+=" (circular ref.)"),E(C)),!I&&typeof n=="object"){var N=e(n,h);N.forEach(function(U){b=++S===N.length,r(U,n[U],b,T,p,h,E)})}}var s={};return s.asLines=function(a,n,c,f){var p=typeof c!="function"?c:!1;r(".",a,!1,[],n,p,f||c)},s.asTree=function(a,n,c){var f="";return r(".",a,!1,[],n,c,function(p){f+=p+` -`}),f},s})});var xs={};Vt(xs,{emitList:()=>qot,emitTree:()=>sde,treeNodeToJson:()=>ide,treeNodeToTreeify:()=>nde});function nde(t,{configuration:e}){let r={},s=0,a=(n,c)=>{let f=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of f){if(!h)continue;let{label:E,value:C,children:S}=h,b=[];typeof E<"u"&&b.push(zd(e,E,2)),typeof C<"u"&&b.push(Ht(e,C[0],C[1])),b.length===0&&b.push(zd(e,`${p}`,2));let I=b.join(": ").trim(),T=`\0${s++}\0`,N=c[`${T}${I}`]={};typeof S<"u"&&a(S,N)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function ide(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 Zd(r.value[0],r.value[1])}let s=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,c]of s)c&&(a[Wot(n)]=e(c));return typeof r.value>"u"?a:{value:Zd(r.value[0],r.value[1]),children:a}};return e(t)}function qot(t,{configuration:e,stdout:r,json:s}){let a=t.map(n=>({value:n}));sde({children:a},{configuration:e,stdout:r,json:s})}function sde(t,{configuration:e,stdout:r,json:s,separators:a=0}){if(s){let c=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let f of c)f&&r.write(`${JSON.stringify(ide(f))} -`);return}let n=(0,rde.asTree)(nde(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 c=0;c<2;++c)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 Wot(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var rde,ode=Ze(()=>{rde=ut(tde());xc()});var LT,ade=Ze(()=>{LT=class{constructor(e){this.releaseFunction=e;this.map=new Map}addOrCreate(e,r){let s=this.map.get(e);if(typeof s<"u"){if(s.refCount<=0)throw new Error(`Race condition in RefCountedMap. While adding a new key the refCount is: ${s.refCount} for ${JSON.stringify(e)}`);return s.refCount++,{value:s.value,release:()=>this.release(e)}}else{let a=r();return this.map.set(e,{refCount:1,value:a}),{value:a,release:()=>this.release(e)}}}release(e){let r=this.map.get(e);if(!r)throw new Error(`Unbalanced calls to release. No known instances of: ${JSON.stringify(e)}`);let s=r.refCount;if(s<=0)throw new Error(`Unbalanced calls to release. Too many release vs alloc refcount would become: ${s-1} of ${JSON.stringify(e)}`);s==1?(this.map.delete(e),this.releaseFunction(r.value)):r.refCount--}}});function _v(t){let e=t.match(Yot);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 lde,RG,TG,MT,Kr,Yot,FG=Ze(()=>{Ge();Dt();Dt();eA();lde=Ie("crypto"),RG=ut(Ie("fs"));ade();Rc();I0();bc();Wo();TG=YE(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),MT=YE(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Kr=class t{constructor(e,{configuration:r,immutable:s=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.refCountedZipFsCache=new LT(e=>{e.discardAndClose()});this.cacheId=`-${(0,lde.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=s,this.check=a;let{cacheSpec:n,cacheKey:c}=t.getCacheKey(r);this.cacheSpec=n,this.cacheKey=c}static async find(e,{immutable:r,check:s}={}){let a=new t(e.get("cacheFolder"),{configuration:e,immutable:r,check:s});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),s=r!=="mixed"?`c${r}`:"";return{cacheKey:[MT,s].join(""),cacheSpec:s}}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`${nI(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=_v(r).hash.slice(0,10);return`${nI(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:s}=_v(e);if(r===null||r{let pe=new As,Be=J.join(vt.root,P8(e));return pe.mkdirSync(Be,{recursive:!0}),pe.writeJsonSync(J.join(Be,Er.manifest),{name:un(e),mocked:!0}),pe},E=async(pe,{isColdHit:Be,controlPath:Ce=null})=>{if(Ce===null&&c.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!Be?_v(r).cacheKey:this.cacheKey,we=!c.skipIntegrityCheck||!r?`${g}/${await vQ(pe)}`:r;if(Ce!==null){let Ae=!c.skipIntegrityCheck||!r?`${this.cacheKey}/${await vQ(Ce)}`:r;if(we!==Ae)throw new jt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let ye=null;switch(r!==null&&we!==r&&(this.check?ye="throw":_v(r).cacheKey!==_v(we).cacheKey?ye="update":ye=this.configuration.get("checksumBehavior")),ye){case null:case"update":return{isValid:!0,hash:we};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")}},C=async pe=>{if(!n)throw new Error(`Cache check required but no loader configured for ${Yr(this.configuration,e)}`);let Be=await n(),Ce=Be.getRealPath();Be.saveAndClose(),await ce.chmodPromise(Ce,420);let g=await E(pe,{controlPath:Ce,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},S=async()=>{if(f===null||!await ce.existsPromise(f)){let pe=await n(),Be=pe.getRealPath();return pe.saveAndClose(),{source:"loader",path:Be}}return{source:"mirror",path:f}},b=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${Yr(this.configuration,e)}`);if(this.immutable)throw new jt(56,`Cache entry required but missing for ${Yr(this.configuration,e)}`);let{path:pe,source:Be}=await S(),{hash:Ce}=await E(pe,{isColdHit:!0}),g=this.getLocatorPath(e,Ce),we=[];Be!=="mirror"&&f!==null&&we.push(async()=>{let Ae=`${f}${this.cacheId}`;await ce.copyFilePromise(pe,Ae,RG.default.constants.COPYFILE_FICLONE),await ce.chmodPromise(Ae,420),await ce.renamePromise(Ae,f)}),(!c.mirrorWriteOnly||f===null)&&we.push(async()=>{let Ae=`${g}${this.cacheId}`;await ce.copyFilePromise(pe,Ae,RG.default.constants.COPYFILE_FICLONE),await ce.chmodPromise(Ae,420),await ce.renamePromise(Ae,g)});let ye=c.mirrorWriteOnly?f??g:g;return await Promise.all(we.map(Ae=>Ae())),[!1,ye,Ce]},I=async()=>{let Be=(async()=>{let Ce=c.unstablePackages?.has(e.locatorHash),g=Ce||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,we=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,ye=!!c.mockedPackages?.has(e.locatorHash)&&(!this.check||!we),Ae=ye||we,se=Ae?s:a;if(se&&se(),Ae){let X=null,De=g;if(!ye)if(this.check)X=await C(De);else{let Te=await E(De,{isColdHit:!1});if(Te.isValid)X=Te.hash;else return b()}return[ye,De,X]}else{if(this.immutable&&Ce)throw new jt(56,`Cache entry required but missing for ${Yr(this.configuration,e)}; consider defining ${he.pretty(this.configuration,"supportedArchitectures",he.Type.CODE)} to cache packages for multiple systems`);return b()}})();this.mutexes.set(e.locatorHash,Be);try{return await Be}finally{this.mutexes.delete(e.locatorHash)}};for(let pe;pe=this.mutexes.get(e.locatorHash);)await pe;let[T,N,U]=await I();T||this.markedFiles.add(N);let W=()=>this.refCountedZipFsCache.addOrCreate(N,()=>T?h():new As(N,{baseFs:p,readOnly:!0})),ee,ie=new oE(()=>G4(()=>(ee=W(),ee.value),pe=>`Failed to open the cache entry for ${Yr(this.configuration,e)}: ${pe}`),J),ue=new _f(N,{baseFs:ie,pathUtils:J}),le=()=>{ee?.release()},me=c.unstablePackages?.has(e.locatorHash)?null:U;return[ue,le,me]}},Yot=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var UT,cde=Ze(()=>{UT=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(UT||{})});var Vot,KI,NG=Ze(()=>{Dt();wc();Tp();Wo();Vot=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,s)=>`${r}#commit=${s}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",s,a)=>`https://${r}github.com/${s}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",s,a)=>`https://${r}github.com/${s}.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)=>xQ({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],KI=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let s=J.join(e.cwd,Er.lockfile);if(!ce.existsSync(s))return;let a=await ce.readFilePromise(s,"utf8"),n=as(a);if(Object.hasOwn(n,"__metadata"))return;let c=this.resolutions=new Map;for(let f of Object.keys(n)){let p=HB(f);if(!p){r.reportWarning(14,`Failed to parse the string "${f}" into a proper descriptor`);continue}let h=cl(p.range)?On(p,`npm:${p.range}`):p,{version:E,resolved:C}=n[f];if(!C)continue;let S;for(let[I,T]of Vot){let N=C.match(I);if(N){S=T(E,...N);break}}if(!S){r.reportWarning(14,`${ni(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${C}")`);continue}let b=h;try{let I=em(h.range),T=HB(I.selector,!0);T&&(b=T)}catch{}c.set(h.descriptorHash,Ws(b,S))}}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,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){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=B8(a),c=s.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(c,r,s)}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var lA,ude=Ze(()=>{Rc();Ev();xc();lA=class extends Ao{constructor({configuration:r,stdout:s,suggestInstall:a=!0}){super();this.errorCount=0;TB(this,{configuration:r}),this.configuration=r,this.stdout=s,this.suggestInstall=a}static async start(r,s){let a=new this(r);try{await s(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,s){return s()}async startSectionPromise(r,s){return await s()}startTimerSync(r,s,a){return(typeof s=="function"?s:a)()}async startTimerPromise(r,s,a){return await(typeof s=="function"?s:a)()}reportSeparator(){}reportInfo(r,s){}reportWarning(r,s){}reportError(r,s){this.errorCount+=1,this.stdout.write(`${Ht(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${s} -`)}reportProgress(r){return{...Promise.resolve().then(async()=>{for await(let{}of r);}),stop:()=>{}}}reportJson(r){}reportFold(r,s){}async finalize(){this.errorCount>0&&(this.stdout.write(` -`),this.stdout.write(`${Ht(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. -`),this.suggestInstall&&this.stdout.write(`${Ht(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 jj(r,{configuration:this.configuration,json:!1})}}});var zI,OG=Ze(()=>{Wo();zI=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(DQ(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,s){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,s){let a=s.project.storedResolutions.get(e.descriptorHash);if(a){let c=s.project.originalPackages.get(a);if(c)return[c]}let n=s.project.originalPackages.get(DQ(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let s=r.project.originalPackages.get(e.locatorHash);if(!s)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return s}}});function Kp(){}function Jot(t,e,r,s,a){for(var n=0,c=e.length,f=0,p=0;nb.length?T:b}),h.value=t.join(E)}else h.value=t.join(r.slice(f,f+h.count));f+=h.count,h.added||(p+=h.count)}}var S=e[c-1];return c>1&&typeof S.value=="string"&&(S.added||S.removed)&&t.equals("",S.value)&&(e[c-2].value+=S.value,e.pop()),e}function Kot(t){return{newPos:t.newPos,components:t.components.slice(0)}}function zot(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 pde(t,e,r){return r=zot(r,{ignoreWhitespace:!0}),HG.diff(t,e,r)}function Zot(t,e,r){return jG.diff(t,e,r)}function _T(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_T=function(e){return typeof e}:_T=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_T(t)}function LG(t){return eat(t)||tat(t)||rat(t)||nat()}function eat(t){if(Array.isArray(t))return MG(t)}function tat(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function rat(t,e){if(t){if(typeof t=="string")return MG(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 MG(t,e)}}function MG(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,s=new Array(e);r"u"&&(c.context=4);var f=Zot(r,s,c);if(!f)return;f.push({value:"",lines:[]});function p(U){return U.map(function(W){return" "+W})}for(var h=[],E=0,C=0,S=[],b=1,I=1,T=function(W){var ee=f[W],ie=ee.lines||ee.value.replace(/\n$/,"").split(` -`);if(ee.lines=ie,ee.added||ee.removed){var ue;if(!E){var le=f[W-1];E=b,C=I,le&&(S=c.context>0?p(le.lines.slice(-c.context)):[],E-=S.length,C-=S.length)}(ue=S).push.apply(ue,LG(ie.map(function(Ae){return(ee.added?"+":"-")+Ae}))),ee.added?I+=ie.length:b+=ie.length}else{if(E)if(ie.length<=c.context*2&&W=f.length-2&&ie.length<=c.context){var g=/\n$/.test(r),we=/\n$/.test(s),ye=ie.length==0&&S.length>Ce.oldLines;!g&&ye&&r.length>0&&S.splice(Ce.oldLines,0,"\\ No newline at end of file"),(!g&&!ye||!we)&&S.push("\\ No newline at end of file")}h.push(Ce),E=0,C=0,S=[]}b+=ie.length,I+=ie.length}},N=0;N{Kp.prototype={diff:function(e,r){var s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=s.callback;typeof s=="function"&&(a=s,s={}),this.options=s;var n=this;function c(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 f=r.length,p=e.length,h=1,E=f+p;s.maxEditLength&&(E=Math.min(E,s.maxEditLength));var C=[{newPos:-1,components:[]}],S=this.extractCommon(C[0],r,e,0);if(C[0].newPos+1>=f&&S+1>=p)return c([{value:this.join(r),count:r.length}]);function b(){for(var T=-1*h;T<=h;T+=2){var N=void 0,U=C[T-1],W=C[T+1],ee=(W?W.newPos:0)-T;U&&(C[T-1]=void 0);var ie=U&&U.newPos+1=f&&ee+1>=p)return c(Jot(n,N.components,r,e,n.useLongestToken));C[T]=N}h++}if(a)(function T(){setTimeout(function(){if(h>E)return a();b()||T()},0)})();else for(;h<=E;){var I=b();if(I)return I}},pushComponent:function(e,r,s){var a=e[e.length-1];a&&a.added===r&&a.removed===s?e[e.length-1]={count:a.count+1,added:r,removed:s}:e.push({count:1,added:r,removed:s})},extractCommon:function(e,r,s,a){for(var n=r.length,c=s.length,f=e.newPos,p=f-a,h=0;f+1"u"?r:c}:s;return typeof t=="string"?t:JSON.stringify(UG(t,null,null,a),a," ")};Hv.equals=function(t,e){return Kp.prototype.equals.call(Hv,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};_G=new Kp;_G.tokenize=function(t){return t.slice()};_G.join=_G.removeEmpty=function(t){return t}});var HT,gde=Ze(()=>{Rc();HT=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,s){return this.resolver.bindDescriptor(e,r,s)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,s){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,s,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 ki,qG=Ze(()=>{Rc();ki=class extends Ao{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,s){return(typeof r=="function"?r:s)()}async startTimerPromise(e,r,s){return await(typeof r=="function"?r:s)()}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 dde,ZI,WG=Ze(()=>{Dt();dde=ut(wQ());oI();tm();xc();I0();Tp();Wo();ZI=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await Ut.tryFind(this.cwd)??new Ut,this.relativeCwd=J.relative(this.project.cwd,this.cwd)||vt.dot;let e=this.manifest.name?this.manifest.name:Da(null,`${this.computeCandidateName()}-${cs(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=On(e,`${Ei.protocol}${this.relativeCwd}`),this.anchoredLocator=Ws(e,`${Ei.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let s=await(0,dde.default)(r,{cwd:fe.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});s.sort(),await s.reduce(async(a,n)=>{let c=J.resolve(this.cwd,fe.toPortablePath(n)),f=await ce.existsPromise(J.join(c,"package.json"));await a,f&&this.workspacesCwds.add(c)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${GB(this.project.configuration,this)} (${Ht(this.project.configuration,J.join(this.cwd,Er.manifest),ht.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),s=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(s===Ei.protocol&&J.normalize(a)===this.relativeCwd||s===Ei.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=cl(a);return n?s===Ei.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":`${J.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Ut.hardDependencies}={}){let r=new Set,s=a=>{for(let n of e)for(let c of a.manifest[n].values()){let f=this.project.tryWorkspaceByDescriptor(c);f===null||r.has(f)||(r.add(f),s(f))}};return s(this),r}getRecursiveWorkspaceDependents({dependencies:e=Ut.hardDependencies}={}){let r=new Set,s=a=>{for(let n of this.project.workspaces)e.some(f=>[...n.manifest[f].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&_B(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),s(n))};return s(this),r}getRecursiveWorkspaceChildren(){let e=new Set([this]);for(let r of e)for(let s of r.workspacesCwds){let a=this.project.workspacesByCwd.get(s);a&&e.add(a)}return e.delete(this),Array.from(e)}async persistManifest(){let e={};this.manifest.exportTo(e);let r=J.join(this.cwd,Ut.fileName),s=`${JSON.stringify(e,null,this.manifest.indent)} -`;await ce.changeFilePromise(r,s,{automaticNewlines:!0}),this.manifest.raw=e}}});function uat({project:t,allDescriptors:e,allResolutions:r,allPackages:s,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:c=new Map,peerWarnings:f=[],peerRequirementNodes:p=new Map,volatileDescriptors:h=new Set}){let E=new Map,C=[],S=new Map,b=new Map,I=new Map,T=new Map,N=new Map,U=new Map(t.workspaces.map(le=>{let me=le.anchoredLocator.locatorHash,pe=s.get(me);if(typeof pe>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[me,LB(pe)]})),W=()=>{let le=ce.mktempSync(),me=J.join(le,"stacktrace.log"),pe=String(C.length+1).length,Be=C.map((Ce,g)=>`${`${g+1}.`.padStart(pe," ")} ${ll(Ce)} -`).join("");throw ce.writeFileSync(me,Be),ce.detachTemp(le),new jt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${fe.fromPortablePath(me)}`)},ee=le=>{let me=r.get(le.descriptorHash);if(typeof me>"u")throw new Error("Assertion failed: The resolution should have been registered");let pe=s.get(me);if(!pe)throw new Error("Assertion failed: The package could not be found");return pe},ie=(le,me,pe,{top:Be,optional:Ce})=>{C.length>1e3&&W(),C.push(me);let g=ue(le,me,pe,{top:Be,optional:Ce});return C.pop(),g},ue=(le,me,pe,{top:Be,optional:Ce})=>{if(Ce||n.delete(me.locatorHash),a.has(me.locatorHash))return;a.add(me.locatorHash);let g=s.get(me.locatorHash);if(!g)throw new Error(`Assertion failed: The package (${Yr(t.configuration,me)}) should have been registered`);let we=new Set,ye=new Map,Ae=[],se=[],X=[],De=[];for(let Te of Array.from(g.dependencies.values())){if(g.peerDependencies.has(Te.identHash)&&g.locatorHash!==Be)continue;if(kp(Te))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");h.delete(Te.descriptorHash);let mt=Ce;if(!mt){let ke=g.dependenciesMeta.get(un(Te));if(typeof ke<"u"){let it=ke.get(null);typeof it<"u"&&it.optional&&(mt=!0)}}let j=r.get(Te.descriptorHash);if(!j)throw new Error(`Assertion failed: The resolution (${ni(t.configuration,Te)}) should have been registered`);let rt=U.get(j)||s.get(j);if(!rt)throw new Error(`Assertion failed: The package (${j}, resolved from ${ni(t.configuration,Te)}) should have been registered`);if(rt.peerDependencies.size===0){ie(Te,rt,new Map,{top:Be,optional:mt});continue}let Fe,Ne,be=new Set,Ve=new Map;Ae.push(()=>{Fe=S8(Te,me.locatorHash),Ne=D8(rt,me.locatorHash),g.dependencies.set(Te.identHash,Fe),r.set(Fe.descriptorHash,Ne.locatorHash),e.set(Fe.descriptorHash,Fe),s.set(Ne.locatorHash,Ne),Pp(T,Ne.locatorHash).add(Fe.descriptorHash),we.add(Ne.locatorHash)}),se.push(()=>{N.set(Ne.locatorHash,Ve);for(let ke of Ne.peerDependencies.values()){let Ue=Yl(ye,ke.identHash,()=>{let x=pe.get(ke.identHash)??null,w=g.dependencies.get(ke.identHash);return!w&&UB(me,ke)&&(le.identHash===me.identHash?w=le:(w=On(me,le.range),e.set(w.descriptorHash,w),r.set(w.descriptorHash,me.locatorHash),h.delete(w.descriptorHash),x=null)),w||(w=On(ke,"missing:")),{subject:me,ident:ke,provided:w,root:!x,requests:new Map,hash:`p${cs(me.locatorHash,ke.identHash).slice(0,6)}`}}).provided;if(Ue.range==="missing:"&&Ne.dependencies.has(ke.identHash)){Ne.peerDependencies.delete(ke.identHash);continue}if(Ve.set(ke.identHash,{requester:Ne,descriptor:ke,meta:Ne.peerDependenciesMeta.get(un(ke)),children:new Map}),Ne.dependencies.set(ke.identHash,Ue),kp(Ue)){let x=r.get(Ue.descriptorHash);Pp(I,x).add(Ne.locatorHash)}S.set(Ue.identHash,Ue),Ue.range==="missing:"&&be.add(Ue.identHash)}Ne.dependencies=new Map(qs(Ne.dependencies,([ke,it])=>un(it)))}),X.push(()=>{if(!s.has(Ne.locatorHash))return;let ke=E.get(rt.locatorHash);typeof ke=="number"&&ke>=2&&W();let it=E.get(rt.locatorHash),Ue=typeof it<"u"?it+1:1;E.set(rt.locatorHash,Ue),ie(Fe,Ne,Ve,{top:Be,optional:mt}),E.set(rt.locatorHash,Ue-1)}),De.push(()=>{let ke=r.get(Fe.descriptorHash);if(typeof ke>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let it=N.get(ke);if(typeof it>"u")throw new Error("Assertion failed: Expected the peer requests to be registered");for(let Ue of ye.values()){let x=it.get(Ue.ident.identHash);x&&(Ue.requests.set(Fe.descriptorHash,x),p.set(Ue.hash,Ue),Ue.root||pe.get(Ue.ident.identHash)?.children.set(Fe.descriptorHash,x))}if(s.has(Ne.locatorHash))for(let Ue of be)Ne.dependencies.delete(Ue)})}for(let Te of[...Ae,...se])Te();for(let Te of we){we.delete(Te);let mt=s.get(Te),j=cs(rI(mt).locatorHash,...Array.from(mt.dependencies.values(),be=>{let Ve=be.range!=="missing:"?r.get(be.descriptorHash):"missing:";if(typeof Ve>"u")throw new Error(`Assertion failed: Expected the resolution for ${ni(t.configuration,be)} to have been registered`);return Ve===Be?`${Ve} (top)`:Ve})),rt=b.get(j);if(typeof rt>"u"){b.set(j,mt);continue}let Fe=Pp(T,rt.locatorHash);for(let be of T.get(mt.locatorHash)??[])r.set(be,rt.locatorHash),Fe.add(be);s.delete(mt.locatorHash),a.delete(mt.locatorHash),we.delete(mt.locatorHash);let Ne=I.get(mt.locatorHash);if(Ne!==void 0){let be=Pp(I,rt.locatorHash);for(let Ve of Ne)be.add(Ve),we.add(Ve)}}for(let Te of[...X,...De])Te()};for(let le of t.workspaces){let me=le.anchoredLocator;h.delete(le.anchoredDescriptor.descriptorHash),ie(le.anchoredDescriptor,me,new Map,{top:me.locatorHash,optional:!1})}for(let le of p.values()){if(!le.root)continue;let me=s.get(le.subject.locatorHash);if(typeof me>"u")continue;for(let Be of le.requests.values()){let Ce=`p${cs(le.subject.locatorHash,un(le.ident),Be.requester.locatorHash).slice(0,6)}`;c.set(Ce,{subject:le.subject.locatorHash,requested:le.ident,rootRequester:Be.requester.locatorHash,allRequesters:Array.from(qB(Be),g=>g.requester.locatorHash)})}let pe=[...qB(le)];if(le.provided.range!=="missing:"){let Be=ee(le.provided),Ce=Be.version??"0.0.0",g=ye=>{if(ye.startsWith(Ei.protocol)){if(!t.tryWorkspaceByLocator(Be))return null;ye=ye.slice(Ei.protocol.length),(ye==="^"||ye==="~")&&(ye="*")}return ye},we=!0;for(let ye of pe){let Ae=g(ye.descriptor.range);if(Ae===null){we=!1;continue}if(!Xf(Ce,Ae)){we=!1;let se=`p${cs(le.subject.locatorHash,un(le.ident),ye.requester.locatorHash).slice(0,6)}`;f.push({type:1,subject:me,requested:le.ident,requester:ye.requester,version:Ce,hash:se,requirementCount:pe.length})}}if(!we){let ye=pe.map(Ae=>g(Ae.descriptor.range));f.push({type:3,node:le,range:ye.includes(null)?null:x8(ye),hash:le.hash})}}else{let Be=!0;for(let Ce of pe)if(!Ce.meta?.optional){Be=!1;let g=`p${cs(le.subject.locatorHash,un(le.ident),Ce.requester.locatorHash).slice(0,6)}`;f.push({type:0,subject:me,requested:le.ident,requester:Ce.requester,hash:g})}Be||f.push({type:2,node:le,hash:le.hash})}}}function*fat(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,s]of e){yield{request:r,root:s};for(let a of r.children.values())e.has(a)||e.set(a,s)}}function Aat(t,e){let r=[],s=[],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 c=t.storedResolutions.get(n.node.provided.descriptorHash);if(typeof c>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let f=t.storedPackages.get(c);if(typeof f>"u")throw new Error("Assertion failed: Expected the package to be registered");let p=p0(fat(n.node),({request:C,root:S})=>Xf(f.version??"0.0.0",C.descriptor.range)?p0.skip:C===S?Xi(t.configuration,C.requester):`${Xi(t.configuration,C.requester)} (via ${Xi(t.configuration,S.requester)})`),h=[...qB(n.node)].length>1?"and other dependencies request":"requests",E=n.range?iI(t.configuration,n.range):Ht(t.configuration,"but they have non-overlapping ranges!","redBright");r.push(`${Xi(t.configuration,n.node.ident)} is listed by your project with version ${jB(t.configuration,f.version??"0.0.0")} (${Ht(t.configuration,n.hash,ht.CODE)}), which doesn't satisfy what ${p} ${h} (${E}).`)}if(n.type===2){let c=n.node.requests.size>1?" and other dependencies":"";s.push(`${Yr(t.configuration,n.node.subject)} doesn't provide ${Xi(t.configuration,n.node.ident)} (${Ht(t.configuration,n.hash,ht.CODE)}), requested by ${Xi(t.configuration,n.node.requests.values().next().value.requester)}${c}.`)}}e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met by your project; run ${Ht(t.configuration,"yarn explain peer-requirements ",ht.CODE)} for details, where ${Ht(t.configuration,"",ht.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of qs(r,c=>JE.default(c)))e.reportWarning(60,n);for(let n of qs(s,c=>JE.default(c)))e.reportWarning(2,n)}),a&&e.reportWarning(86,`Some peer dependencies are incorrectly met by dependencies; run ${Ht(t.configuration,"yarn explain peer-requirements",ht.CODE)} for details.`)}var jT,GT,Ede,JG,VG,KG,qT,sat,oat,mde,aat,lat,cat,$l,YG,WT,yde,Rt,Ide=Ze(()=>{Dt();Dt();wc();Yt();jT=Ie("crypto");GG();ql();GT=ut(Ld()),Ede=ut(Ai()),JG=Ie("util"),VG=ut(Ie("v8")),KG=ut(Ie("zlib"));FG();av();NG();OG();oI();R8();Rc();gde();Ev();qG();tm();WG();OQ();xc();I0();bc();hR();Vj();Tp();Wo();qT=YE(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),sat=3,oat=/ *, */g,mde=/\/$/,aat=32,lat=(0,JG.promisify)(KG.default.gzip),cat=(0,JG.promisify)(KG.default.gunzip),$l=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))($l||{}),YG={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},WT=(a=>(a[a.NotProvided=0]="NotProvided",a[a.NotCompatible=1]="NotCompatible",a[a.NodeNotProvided=2]="NodeNotProvided",a[a.NodeNotCompatible=3]="NodeNotCompatible",a))(WT||{}),yde=t=>cs(`${sat}`,t),Rt=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 nt(`No project found in ${r}`);let s=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,ce.existsSync(J.join(n,Er.manifest))){s=n;break}a=J.dirname(n)}let c=new t(e.projectCwd,{configuration:e});ze.telemetry?.reportProject(c.cwd),await c.setupResolutions(),await c.setupWorkspaces(),ze.telemetry?.reportWorkspaceCount(c.workspaces.length),ze.telemetry?.reportDependencyCount(c.workspaces.reduce((I,T)=>I+T.manifest.dependencies.size+T.manifest.devDependencies.size,0));let f=c.tryWorkspaceByCwd(s);if(f)return{project:c,workspace:f,locator:f.anchoredLocator};let p=await c.findLocatorForLocation(`${s}/`,{strict:!0});if(p)return{project:c,locator:p,workspace:null};let h=Ht(e,c.cwd,ht.PATH),E=Ht(e,J.relative(c.cwd,s),ht.PATH),C=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,S=`- 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 nt(`The nearest package directory (${Ht(e,s,ht.PATH)}) doesn't seem to be part of the project declared in ${Ht(e,c.cwd,ht.PATH)}. - -${[C,S,b].join(` -`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=J.join(this.cwd,Er.lockfile),r=this.configuration.get("defaultLanguageName");if(ce.existsSync(e)){let s=await ce.readFilePromise(e,"utf8");this.lockFileChecksum=yde(s);let a=as(s);if(a.__metadata){let n=a.__metadata.version,c=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${f})`);let h=Qp(p.resolution,!0),E=new Ut;E.load(p,{yamlCompatibilityMode:!0});let C=E.version,S=E.languageName||r,b=p.linkType.toUpperCase(),I=p.conditions??null,T=E.dependencies,N=E.peerDependencies,U=E.dependenciesMeta,W=E.peerDependenciesMeta,ee=E.bin;if(p.checksum!=null){let ue=typeof c<"u"&&!p.checksum.includes("/")?`${c}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,ue)}let ie={...h,version:C,languageName:S,linkType:b,conditions:I,dependencies:T,peerDependencies:N,dependenciesMeta:U,peerDependenciesMeta:W,bin:ee};this.originalPackages.set(ie.locatorHash,ie);for(let ue of f.split(oat)){let le=C0(ue);n<=6&&(le=this.configuration.normalizeDependency(le),le=On(le,le.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(le.descriptorHash,le),this.storedResolutions.set(le.descriptorHash,h.locatorHash)}}}else s.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,GT.default)(4),s=async(a,n)=>{if(e.has(n))return a;e.add(n);let c=new ZI(n,{project:this});await r(()=>c.setup());let f=a.then(()=>{this.addWorkspace(c)});return Array.from(c.workspacesCwds).reduce(s,f)};await s(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${Xi(this.configuration,e.anchoredLocator)}: ${fe.fromPortablePath(e.cwd)} conflicts with ${fe.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){J.isAbsolute(e)||(e=J.resolve(this.cwd,e)),e=J.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 s of this.workspaces)J.relative(s.cwd,e).startsWith("../")||r&&r.cwd.length>=s.cwd.length||(r=s);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 (${Xi(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(Ei.protocol)){let s=e.range.slice(Ei.protocol.length);if(s!=="^"&&s!=="~"&&s!=="*"&&!cl(s))return this.tryWorkspaceByCwd(s)}let r=this.tryWorkspaceByIdent(e);return r===null||(kp(e)&&(e=MB(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${ni(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(Gu(e)&&(e=rI(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${Yr(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 s=new Set(this.storedResolutions.values());typeof r<"u"&&!s.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,s]of this.storedResolutions)s===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[s,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(s)}for(let s of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(s,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(s.locatorHash);let n=r.get(s.locatorHash);if(n){r.delete(s.locatorHash);for(let c of n)this.deleteDescriptor(c)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,s]of e.dependencies)kp(s)&&e.dependencies.set(r,MB(s))}getDependencyMeta(e,r){let s={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(un(e));if(!n)return s;let c=n.get(null);if(c&&Object.assign(s,c),r===null||!Ede.default.valid(r))return s;for(let[f,p]of n)f!==null&&f===r&&Object.assign(s,p);return s}async findLocatorForLocation(e,{strict:r=!1}={}){let s=new ki,a=this.configuration.getLinkers(),n={project:this,report:s};for(let c of a){let f=await c.findPackageLocator(e,n);if(f){if(r&&(await c.findPackageLocation(f,n)).replace(mde,"")!==e.replace(mde,""))continue;return f}}return null}async loadUserConfig(){let e=J.join(this.cwd,".pnp.cjs");await ce.existsPromise(e)&&bp(e).setup();let r=J.join(this.cwd,"yarn.config.cjs");return await ce.existsPromise(r)?bp(r):null}async preparePackage(e,{resolver:r,resolveOptions:s}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[c,f]of n.dependencies){let p=await this.configuration.reduceHook(E=>E.reduceDependency,f,this,n,f,{resolver:r,resolveOptions:s});if(!UB(f,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,s);n.dependencies.set(c,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),s=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new KI(a);await n.setup(this,{report:e.report});let c=e.lockfileOnly?[new HT(a)]:[n,a],f=new rm([new zI(a),...c]),p=new rm([...c]),h=this.configuration.makeFetcher(),E=e.lockfileOnly?{project:this,report:e.report,resolver:f}:{project:this,report:e.report,resolver:f,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},C=new Map,S=new Map,b=new Map,I=new Map,T=new Map,N=new Map,U=this.topLevelWorkspace.anchoredLocator,W=new Set,ee=[],ie=lj(),ue=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(Ao.progressViaTitle(),async se=>{let X=async rt=>{let Fe=await qE(async()=>await f.resolve(rt,E),ke=>`${Yr(this.configuration,rt)}: ${ke}`);if(!_B(rt,Fe))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${Yr(this.configuration,rt)} to ${Yr(this.configuration,Fe)})`);I.set(Fe.locatorHash,Fe),!r.delete(Fe.locatorHash)&&!this.tryWorkspaceByLocator(Fe)&&s.push(Fe);let be=await this.preparePackage(Fe,{resolver:f,resolveOptions:E}),Ve=Uu([...be.dependencies.values()].map(ke=>j(ke)));return ee.push(Ve),Ve.catch(()=>{}),S.set(be.locatorHash,be),be},De=async rt=>{let Fe=T.get(rt.locatorHash);if(typeof Fe<"u")return Fe;let Ne=Promise.resolve().then(()=>X(rt));return T.set(rt.locatorHash,Ne),Ne},Te=async(rt,Fe)=>{let Ne=await j(Fe);return C.set(rt.descriptorHash,rt),b.set(rt.descriptorHash,Ne.locatorHash),Ne},mt=async rt=>{se.setTitle(ni(this.configuration,rt));let Fe=this.resolutionAliases.get(rt.descriptorHash);if(typeof Fe<"u")return Te(rt,this.storedDescriptors.get(Fe));let Ne=f.getResolutionDependencies(rt,E),be=Object.fromEntries(await Uu(Object.entries(Ne).map(async([it,Ue])=>{let x=f.bindDescriptor(Ue,U,E),w=await j(x);return W.add(w.locatorHash),[it,w]}))),ke=(await qE(async()=>await f.getCandidates(rt,be,E),it=>`${ni(this.configuration,rt)}: ${it}`))[0];if(typeof ke>"u")throw new jt(82,`${ni(this.configuration,rt)}: No candidates found`);if(e.checkResolutions){let{locators:it}=await p.getSatisfying(rt,be,[ke],{...E,resolver:p});if(!it.find(Ue=>Ue.locatorHash===ke.locatorHash))throw new jt(78,`Invalid resolution ${FB(this.configuration,rt,ke)}`)}return C.set(rt.descriptorHash,rt),b.set(rt.descriptorHash,ke.locatorHash),De(ke)},j=rt=>{let Fe=N.get(rt.descriptorHash);if(typeof Fe<"u")return Fe;C.set(rt.descriptorHash,rt);let Ne=Promise.resolve().then(()=>mt(rt));return N.set(rt.descriptorHash,Ne),Ne};for(let rt of this.workspaces){let Fe=rt.anchoredDescriptor;ee.push(j(Fe))}for(;ee.length>0;){let rt=[...ee];ee.length=0,await Uu(rt)}});let le=Wl(r.values(),se=>this.tryWorkspaceByLocator(se)?Wl.skip:se);if(s.length>0||le.length>0){let se=new Set(this.workspaces.flatMap(rt=>{let Fe=S.get(rt.anchoredLocator.locatorHash);if(!Fe)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(Fe.dependencies.values(),Ne=>{let be=b.get(Ne.descriptorHash);if(!be)throw new Error("Assertion failed: The resolution should have been registered");return be})})),X=rt=>se.has(rt.locatorHash)?"0":"1",De=rt=>ll(rt),Te=qs(s,[X,De]),mt=qs(le,[X,De]),j=e.report.getRecommendedLength();Te.length>0&&e.report.reportInfo(85,`${Ht(this.configuration,"+",ht.ADDED)} ${Xk(this.configuration,Te,j)}`),mt.length>0&&e.report.reportInfo(85,`${Ht(this.configuration,"-",ht.REMOVED)} ${Xk(this.configuration,mt,j)}`)}let me=new Set(this.resolutionAliases.values()),pe=new Set(S.keys()),Be=new Set,Ce=new Map,g=[],we=new Map;uat({project:this,accessibleLocators:Be,volatileDescriptors:me,optionalBuilds:pe,peerRequirements:Ce,peerWarnings:g,peerRequirementNodes:we,allDescriptors:C,allResolutions:b,allPackages:S});for(let se of W)pe.delete(se);for(let se of me)C.delete(se),b.delete(se);let ye=new Set,Ae=new Set;for(let se of S.values())se.conditions!=null&&pe.has(se.locatorHash)&&(QQ(se,ue)||(QQ(se,ie)&&e.report.reportWarningOnce(77,`${Yr(this.configuration,se)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Ht(this.configuration,"supportedArchitectures",ht.SETTING)} setting`),Ae.add(se.locatorHash)),ye.add(se.locatorHash));this.storedResolutions=b,this.storedDescriptors=C,this.storedPackages=S,this.accessibleLocators=Be,this.conditionalLocators=ye,this.disabledLocators=Ae,this.originalPackages=I,this.optionalBuilds=pe,this.peerRequirements=Ce,this.peerWarnings=g,this.peerRequirementNodes=we}async fetchEverything({cache:e,report:r,fetcher:s,mode:a,persistProject:n=!0}){let c={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},f=s||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:f,report:r,cacheOptions:c},h=Array.from(new Set(qs(this.storedResolutions.values(),[I=>{let T=this.storedPackages.get(I);if(!T)throw new Error("Assertion failed: The locator should have been registered");return ll(T)}])));a==="update-lockfile"&&(h=h.filter(I=>!this.storedChecksums.has(I)));let E=!1,C=Ao.progressViaCounter(h.length);await r.reportProgress(C);let S=(0,GT.default)(aat);if(await Uu(h.map(I=>S(async()=>{let T=this.storedPackages.get(I);if(!T)throw new Error("Assertion failed: The locator should have been registered");if(Gu(T))return;let N;try{N=await f.fetch(T,p)}catch(U){U.message=`${Yr(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(()=>{C.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 le=>{let me=this.storedPackages.get(le),pe=this.storedChecksums.get(le)??null,Be=e.getLocatorPath(me,pe);return(await ce.statPromise(Be)).size}))).reduce((le,me)=>le+me,0)-(b?.size??0),N=r.cacheMisses.size,U=b?.count??0,W=`${Wk(N,{zero:"No new packages",one:"A package was",more:`${Ht(this.configuration,N,ht.NUMBER)} packages were`})} added to the project`,ee=`${Wk(U,{zero:"none were",one:"one was",more:`${Ht(this.configuration,U,ht.NUMBER)} were`})} removed`,ie=T!==0?` (${Ht(this.configuration,T,ht.SIZE_DIFF)})`:"",ue=U>0?N>0?`${W}, and ${ee}${ie}.`:`${W}, but ${ee}${ie}.`:`${W}${ie}.`;r.reportInfo(13,ue)}}async linkEverything({cache:e,report:r,fetcher:s,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},c=s||this.configuration.makeFetcher(),f={checksums:this.storedChecksums,project:this,cache:e,fetcher:c,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},E=new Map(p.map(ye=>{let Ae=ye.makeInstaller(h),se=ye.getCustomDataKey(),X=this.linkersCustomData.get(se);return typeof X<"u"&&Ae.attachCustomData(X),[ye,Ae]})),C=new Map,S=new Map,b=new Map,I=new Map(await Uu([...this.accessibleLocators].map(async ye=>{let Ae=this.storedPackages.get(ye);if(!Ae)throw new Error("Assertion failed: The locator should have been registered");return[ye,await c.fetch(Ae,f)]}))),T=[],N=new Set,U=[];for(let ye of this.accessibleLocators){let Ae=this.storedPackages.get(ye);if(typeof Ae>"u")throw new Error("Assertion failed: The locator should have been registered");let se=I.get(Ae.locatorHash);if(typeof se>"u")throw new Error("Assertion failed: The fetch result should have been registered");let X=[],De=mt=>{X.push(mt)},Te=this.tryWorkspaceByLocator(Ae);if(Te!==null){let mt=[],{scripts:j}=Te.manifest;for(let Fe of["preinstall","install","postinstall"])j.has(Fe)&&mt.push({type:0,script:Fe});try{for(let[Fe,Ne]of E)if(Fe.supportsPackage(Ae,h)&&(await Ne.installPackage(Ae,se,{holdFetchResult:De})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{X.length===0?se.releaseFs?.():T.push(Uu(X).catch(()=>{}).then(()=>{se.releaseFs?.()}))}let rt=J.join(se.packageFs.getRealPath(),se.prefixPath);S.set(Ae.locatorHash,rt),!Gu(Ae)&&mt.length>0&&b.set(Ae.locatorHash,{buildDirectives:mt,buildLocations:[rt]})}else{let mt=p.find(Fe=>Fe.supportsPackage(Ae,h));if(!mt)throw new jt(12,`${Yr(this.configuration,Ae)} isn't supported by any available linker`);let j=E.get(mt);if(!j)throw new Error("Assertion failed: The installer should have been registered");let rt;try{rt=await j.installPackage(Ae,se,{holdFetchResult:De})}finally{X.length===0?se.releaseFs?.():T.push(Uu(X).then(()=>{}).then(()=>{se.releaseFs?.()}))}C.set(Ae.locatorHash,mt),S.set(Ae.locatorHash,rt.packageLocation),rt.buildRequest&&rt.packageLocation&&(rt.buildRequest.skipped?(N.add(Ae.locatorHash),this.skippedBuilds.has(Ae.locatorHash)||U.push([Ae,rt.buildRequest.explain])):b.set(Ae.locatorHash,{buildDirectives:rt.buildRequest.directives,buildLocations:[rt.packageLocation]}))}}let W=new Map;for(let ye of this.accessibleLocators){let Ae=this.storedPackages.get(ye);if(!Ae)throw new Error("Assertion failed: The locator should have been registered");let se=this.tryWorkspaceByLocator(Ae)!==null,X=async(De,Te)=>{let mt=S.get(Ae.locatorHash);if(typeof mt>"u")throw new Error(`Assertion failed: The package (${Yr(this.configuration,Ae)}) should have been registered`);let j=[];for(let rt of Ae.dependencies.values()){let Fe=this.storedResolutions.get(rt.descriptorHash);if(typeof Fe>"u")throw new Error(`Assertion failed: The resolution (${ni(this.configuration,rt)}, from ${Yr(this.configuration,Ae)})should have been registered`);let Ne=this.storedPackages.get(Fe);if(typeof Ne>"u")throw new Error(`Assertion failed: The package (${Fe}, resolved from ${ni(this.configuration,rt)}) should have been registered`);let be=this.tryWorkspaceByLocator(Ne)===null?C.get(Fe):null;if(typeof be>"u")throw new Error(`Assertion failed: The package (${Fe}, resolved from ${ni(this.configuration,rt)}) should have been registered`);be===De||be===null?S.get(Ne.locatorHash)!==null&&j.push([rt,Ne]):!se&&mt!==null&&xB(W,Fe).push(mt)}mt!==null&&await Te.attachInternalDependencies(Ae,j)};if(se)for(let[De,Te]of E)De.supportsPackage(Ae,h)&&await X(De,Te);else{let De=C.get(Ae.locatorHash);if(!De)throw new Error("Assertion failed: The linker should have been found");let Te=E.get(De);if(!Te)throw new Error("Assertion failed: The installer should have been registered");await X(De,Te)}}for(let[ye,Ae]of W){let se=this.storedPackages.get(ye);if(!se)throw new Error("Assertion failed: The package should have been registered");let X=C.get(se.locatorHash);if(!X)throw new Error("Assertion failed: The linker should have been found");let De=E.get(X);if(!De)throw new Error("Assertion failed: The installer should have been registered");await De.attachExternalDependents(se,Ae)}let ee=new Map;for(let[ye,Ae]of E){let se=await Ae.finalizeInstall();for(let X of se?.records??[])X.buildRequest.skipped?(N.add(X.locator.locatorHash),this.skippedBuilds.has(X.locator.locatorHash)||U.push([X.locator,X.buildRequest.explain])):b.set(X.locator.locatorHash,{buildDirectives:X.buildRequest.directives,buildLocations:X.buildLocations});typeof se?.customData<"u"&&ee.set(ye.getCustomDataKey(),se.customData)}if(this.linkersCustomData=ee,await Uu(T),a==="skip-build")return;for(let[,ye]of qs(U,([Ae])=>ll(Ae)))ye(r);let ie=new Set(b.keys()),ue=(0,jT.createHash)("sha512");ue.update(process.versions.node),await this.configuration.triggerHook(ye=>ye.globalHashGeneration,this,ye=>{ue.update("\0"),ue.update(ye)});let le=ue.digest("hex"),me=new Map,pe=ye=>{let Ae=me.get(ye.locatorHash);if(typeof Ae<"u")return Ae;let se=this.storedPackages.get(ye.locatorHash);if(typeof se>"u")throw new Error("Assertion failed: The package should have been registered");let X=(0,jT.createHash)("sha512");X.update(ye.locatorHash),me.set(ye.locatorHash,"");for(let De of se.dependencies.values()){let Te=this.storedResolutions.get(De.descriptorHash);if(typeof Te>"u")throw new Error(`Assertion failed: The resolution (${ni(this.configuration,De)}) should have been registered`);let mt=this.storedPackages.get(Te);if(typeof mt>"u")throw new Error("Assertion failed: The package should have been registered");X.update(pe(mt))}return Ae=X.digest("hex"),me.set(ye.locatorHash,Ae),Ae},Be=(ye,Ae)=>{let se=(0,jT.createHash)("sha512");se.update(le),se.update(pe(ye));for(let X of Ae)se.update(X);return se.digest("hex")},Ce=new Map,g=!1,we=ye=>{let Ae=new Set([ye.locatorHash]);for(let se of Ae){let X=this.storedPackages.get(se);if(!X)throw new Error("Assertion failed: The package should have been registered");for(let De of X.dependencies.values()){let Te=this.storedResolutions.get(De.descriptorHash);if(!Te)throw new Error(`Assertion failed: The resolution (${ni(this.configuration,De)}) should have been registered`);if(Te!==ye.locatorHash&&ie.has(Te))return!1;let mt=this.storedPackages.get(Te);if(!mt)throw new Error("Assertion failed: The package should have been registered");let j=this.tryWorkspaceByLocator(mt);if(j){if(j.anchoredLocator.locatorHash!==ye.locatorHash&&ie.has(j.anchoredLocator.locatorHash))return!1;Ae.add(j.anchoredLocator.locatorHash)}Ae.add(Te)}}return!0};for(;ie.size>0;){let ye=ie.size,Ae=[];for(let se of ie){let X=this.storedPackages.get(se);if(!X)throw new Error("Assertion failed: The package should have been registered");if(!we(X))continue;let De=b.get(X.locatorHash);if(!De)throw new Error("Assertion failed: The build directive should have been registered");let Te=Be(X,De.buildLocations);if(this.storedBuildState.get(X.locatorHash)===Te){Ce.set(X.locatorHash,Te),ie.delete(se);continue}g||(await this.persistInstallStateFile(),g=!0),this.storedBuildState.has(X.locatorHash)?r.reportInfo(8,`${Yr(this.configuration,X)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${Yr(this.configuration,X)} must be built because it never has been before or the last one failed`);let mt=De.buildLocations.map(async j=>{if(!J.isAbsolute(j))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${j})`);for(let rt of De.buildDirectives){let Fe=`# This file contains the result of Yarn building a package (${ll(X)}) -`;switch(rt.type){case 0:Fe+=`# Script name: ${rt.script} -`;break;case 1:Fe+=`# Script code: ${rt.script} -`;break}let Ne=null;if(!await ce.mktempPromise(async Ve=>{let ke=J.join(Ve,"build.log"),{stdout:it,stderr:Ue}=this.configuration.getSubprocessStreams(ke,{header:Fe,prefix:Yr(this.configuration,X),report:r}),x;try{switch(rt.type){case 0:x=await OR(X,rt.script,[],{cwd:j,project:this,stdin:Ne,stdout:it,stderr:Ue});break;case 1:x=await Gj(X,rt.script,[],{cwd:j,project:this,stdin:Ne,stdout:it,stderr:Ue});break}}catch(y){Ue.write(y.stack),x=1}if(it.end(),Ue.end(),x===0)return!0;ce.detachTemp(Ve);let w=`${Yr(this.configuration,X)} couldn't be built successfully (exit code ${Ht(this.configuration,x,ht.NUMBER)}, logs can be found here: ${Ht(this.configuration,ke,ht.PATH)})`,P=this.optionalBuilds.has(X.locatorHash);return P?r.reportInfo(9,w):r.reportError(9,w),zpe&&r.reportFold(fe.fromPortablePath(ke),ce.readFileSync(ke,"utf8")),P}))return!1}return!0});Ae.push(...mt,Promise.allSettled(mt).then(j=>{ie.delete(se),j.every(rt=>rt.status==="fulfilled"&&rt.value===!0)&&Ce.set(X.locatorHash,Te)}))}if(await Uu(Ae),ye===ie.size){let se=Array.from(ie).map(X=>{let De=this.storedPackages.get(X);if(!De)throw new Error("Assertion failed: The package should have been registered");return Yr(this.configuration,De)}).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: ${se})`);break}}this.storedBuildState=Ce,this.skippedBuilds=N}async installWithNewReport(e,r){return(await Ot.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 s=!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,C)=>{e.report.reportWarning(E,C)},reportError:(E,C)=>{e.report.reportError(E,C),s=!0}})}),s)return;let a=await this.configuration.getPackageExtensions();for(let E of a.values())for(let[,C]of E)for(let S of C)S.status="inactive";let n=J.join(this.cwd,Er.lockfile),c=null;if(e.immutable)try{c=await ce.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()=>{Aat(this,e.report);for(let[,E]of a)for(let[,C]of E)for(let S of C)if(S.userProvided){let b=Ht(this.configuration,S,ht.PACKAGE_EXTENSION);switch(S.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(c!==null){let E=Ed(c,this.generateLockfile());if(E!==c){let C=hde(n,n,c,E,void 0,void 0,{maxEditLength:100});if(C){e.report.reportSeparator();for(let S of C.hunks){e.report.reportInfo(null,`@@ -${S.oldStart},${S.oldLines} +${S.newStart},${S.newLines} @@`);for(let b of S.lines)b.startsWith("+")?e.report.reportError(28,Ht(this.configuration,b,ht.ADDED)):b.startsWith("-")?e.report.reportError(28,Ht(this.configuration,b,ht.REMOVED)):e.report.reportInfo(null,Ht(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[,C]of E)for(let S of C)S.userProvided&&S.status==="active"&&ze.telemetry?.reportPackageExtension(Zd(S,ht.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let f=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(f.map(async E=>SQ(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 ${Ht(this.configuration,"mode=update-lockfile",ht.CODE)}`);return}await this.linkEverything(e);let E=await Promise.all(f.map(async C=>SQ(C,{cwd:this.cwd})));for(let C=0;C{await this.configuration.triggerHook(E=>E.validateProjectAfterInstall,this,{reportWarning:(E,C)=>{e.report.reportWarning(E,C)},reportError:(E,C)=>{e.report.reportError(E,C),h=!0}})}),!h&&await this.configuration.triggerHook(E=>E.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,c]of this.storedResolutions.entries()){let f=e.get(c);f||e.set(c,f=new Set),f.add(n)}let r={},{cacheKey:s}=Kr.getCacheKey(this.configuration);r.__metadata={version:qT,cacheKey:s};for(let[n,c]of e.entries()){let f=this.originalPackages.get(n);if(!f)continue;let p=[];for(let C of c){let S=this.storedDescriptors.get(C);if(!S)throw new Error("Assertion failed: The descriptor should have been registered");p.push(S)}let h=p.map(C=>al(C)).sort().join(", "),E=new Ut;E.version=f.linkType==="HARD"?f.version:"0.0.0-use.local",E.languageName=f.languageName,E.dependencies=new Map(f.dependencies),E.peerDependencies=new Map(f.peerDependencies),E.dependenciesMeta=new Map(f.dependenciesMeta),E.peerDependenciesMeta=new Map(f.peerDependenciesMeta),E.bin=new Map(f.bin),r[h]={...E.exportTo({},{compatibilityMode:!1}),linkType:f.linkType.toLowerCase(),resolution:ll(f),checksum:this.storedChecksums.get(f.locatorHash),conditions:f.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. -`,`# Manual changes might be lost - proceed with caution! -`].join("")} -`+nl(r)}async persistLockfile(){let e=J.join(this.cwd,Er.lockfile),r="";try{r=await ce.readFilePromise(e,"utf8")}catch{}let s=this.generateLockfile(),a=Ed(r,s);a!==r&&(await ce.writeFilePromise(e,a),this.lockFileChecksum=yde(a),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let c of Object.values(YG))e.push(...c);let r=Kd(this,e),s=VG.default.serialize(r),a=cs(s);if(this.installStateChecksum===a)return;let n=this.configuration.get("installStatePath");await ce.mkdirPromise(J.dirname(n),{recursive:!0}),await ce.writeFilePromise(n,await lat(s)),this.installStateChecksum=a}async restoreInstallState({restoreLinkersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:s=!0}={}){let a=this.configuration.get("installStatePath"),n;try{let c=await cat(await ce.readFilePromise(a));n=VG.default.deserialize(c),this.installStateChecksum=cs(c)}catch{r&&await this.applyLightResolution();return}e&&typeof n.linkersCustomData<"u"&&(this.linkersCustomData=n.linkersCustomData),s&&Object.assign(this,Kd(n,YG.restoreBuildState)),r&&(n.lockFileChecksum===this.lockFileChecksum?Object.assign(this,Kd(n,YG.restoreResolutions)):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new ki}),await this.persistInstallStateFile()}async persist(){let e=(0,GT.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 s=new Set([".gitignore"]);if(!j8(e.cwd,this.cwd)||!await ce.existsPromise(e.cwd))return null;let a=[];for(let c of await ce.readdirPromise(e.cwd)){if(s.has(c))continue;let f=J.resolve(e.cwd,c);e.markedFiles.has(f)||(e.immutable?r.reportError(56,`${Ht(this.configuration,J.basename(f),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(ce.lstatPromise(f).then(async p=>(await ce.removePromise(f),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((c,f)=>c+f,0)}}}});function pat(t){let s=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),c=n+a,f=t.state.lastTips??s*864e5,p=f+864e5+8*36e5-t.timeZone,h=c<=t.timeNow,E=p<=t.timeNow,C=null;return(h||E||!t.state.lastUpdate||!t.state.lastTips)&&(C={},C.lastUpdate=h?t.timeNow:n,C.lastTips=f,C.blocks=h?{}:t.state.blocks,C.displayedTips=t.state.displayedTips),{nextState:C,triggerUpdate:h,triggerTips:E,nextTips:E?s*864e5:f}}var XI,Cde=Ze(()=>{Dt();yv();I0();AR();bc();Tp();XI=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 s=this.getRegistryPath();this.isNew=!ce.existsSync(s),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),s=f=>f&&fn?Xf(fn,f):!1,a=e.map((f,p)=>p).filter(f=>e[f]&&s(e[f]?.selector));if(a.length===0)return null;let n=a.filter(f=>!r.has(f));if(n.length===0){let f=Math.floor(a.length*.2);this.displayedTips=f>0?this.displayedTips.slice(-f):[],n=a.filter(p=>!r.has(p))}let c=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(c),this.commitTips(),e[c]}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){Pp(this.values,e).add(r)}reportEnumerator(e,r){Pp(this.enumerators,e).add(cs(r))}reportHit(e,r="*"){let s=j4(this.hits,e),a=Yl(s,r,()=>0);s.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return J.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),s;try{s=ce.readJsonSync(r)}catch{s={}}let{nextState:a,triggerUpdate:n,triggerTips:c,nextTips:f}=pat({state:s,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=f,this.displayedTips=s.displayedTips??[],a!==null)try{ce.mkdirSync(J.dirname(r),{recursive:!0}),ce.writeJsonSync(r,a)}catch{return!1}if(c&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=s.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,E=C=>aj(h,C,{configuration:this.configuration}).catch(()=>{});for(let[C,S]of Object.entries(s.blocks??{})){if(Object.keys(S).length===0)continue;let b=S;b.userId=C,b.reportType="primary";for(let N of Object.keys(b.enumerators??{}))b.enumerators[N]=b.enumerators[N].length;E(b);let I=new Map,T=20;for(let[N,U]of Object.entries(b.values))U.length>0&&I.set(N,U.slice(0,T));for(;I.size>0;){let N={};N.userId=C,N.reportType="secondary",N.metrics={};for(let[U,W]of I)N.metrics[U]=W.shift(),W.length===0&&I.delete(U);E(N)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=ce.readJsonSync(e)}catch{r={}}let s=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[s]=a[s]??{};for(let c of this.hits.keys()){let f=n.hits=n.hits??{},p=f[c]=f[c]??{};for(let[h,E]of this.hits.get(c))p[h]=(p[h]??0)+E}for(let c of["values","enumerators"])for(let f of this[c].keys()){let p=n[c]=n[c]??{};p[f]=[...new Set([...p[f]??[],...this[c].get(f)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),ce.mkdirSync(J.dirname(e),{recursive:!0}),ce.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var jv={};Vt(jv,{BuildDirectiveType:()=>UT,CACHE_CHECKPOINT:()=>TG,CACHE_VERSION:()=>MT,Cache:()=>Kr,Configuration:()=>ze,DEFAULT_RC_FILENAME:()=>hj,FormatType:()=>ope,InstallMode:()=>$l,LEGACY_PLUGINS:()=>ov,LOCKFILE_VERSION:()=>qT,LegacyMigrationResolver:()=>KI,LightReport:()=>lA,LinkType:()=>VE,LockfileResolver:()=>zI,Manifest:()=>Ut,MessageName:()=>Br,MultiFetcher:()=>aI,PackageExtensionStatus:()=>Y4,PackageExtensionType:()=>W4,PeerWarningType:()=>WT,Project:()=>Rt,Report:()=>Ao,ReportError:()=>jt,SettingsType:()=>wI,StreamReport:()=>Ot,TAG_REGEXP:()=>Mp,TelemetryManager:()=>XI,ThrowReport:()=>ki,VirtualFetcher:()=>lI,WindowsLinkType:()=>ER,Workspace:()=>ZI,WorkspaceFetcher:()=>cI,WorkspaceResolver:()=>Ei,YarnVersion:()=>fn,execUtils:()=>qr,folderUtils:()=>NQ,formatUtils:()=>he,hashUtils:()=>Nn,httpUtils:()=>ln,miscUtils:()=>je,nodeUtils:()=>fs,parseMessageName:()=>jx,reportOptionDeprecations:()=>SI,scriptUtils:()=>In,semverUtils:()=>Fr,stringifyMessageName:()=>Yf,structUtils:()=>G,tgzUtils:()=>ps,treeUtils:()=>xs});var Ge=Ze(()=>{gR();OQ();xc();I0();AR();bc();hR();Vj();Tp();Wo();$ge();ode();FG();av();av();cde();NG();ude();OG();oI();Gx();Q8();Ide();Rc();Ev();Cde();qG();T8();F8();tm();WG();yv();ule()});var Pde=_((OHt,qv)=>{"use strict";var gat=process.env.TERM_PROGRAM==="Hyper",dat=process.platform==="win32",vde=process.platform==="linux",zG={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"},Sde=Object.assign({},zG,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),Dde=Object.assign({},zG,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:vde?"\u25B8":"\u276F",pointerSmall:vde?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});qv.exports=dat&&!gat?Sde:Dde;Reflect.defineProperty(qv.exports,"common",{enumerable:!1,value:zG});Reflect.defineProperty(qv.exports,"windows",{enumerable:!1,value:Sde});Reflect.defineProperty(qv.exports,"other",{enumerable:!1,value:Dde})});var Ju=_((LHt,ZG)=>{"use strict";var mat=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),yat=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,bde=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let c=n.open=`\x1B[${n.codes[0]}m`,f=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(f)&&(h=h.replace(p,f+c));let C=c+h+f;return E?C.replace(/\r*\n/g,`${f}$&${c}`):C},n},r=(n,c,f)=>typeof n=="function"?n(c):n.wrap(c,f),s=(n,c)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let f=""+n,p=f.includes(` -`),h=c.length;for(h>0&&c.includes("unstyle")&&(c=[...new Set(["unstyle",...c])].reverse());h-- >0;)f=r(t.styles[c[h]],f,p);return f},a=(n,c,f)=>{t.styles[n]=e({name:n,codes:c}),(t.keys[f]||(t.keys[f]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=E=>s(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=yat,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,c)=>{let f=typeof c=="string"?t[c]:c;if(typeof f!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");f.stack||(Reflect.defineProperty(f,"name",{value:n}),t.styles[n]=f,f.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>s(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(f.stack):f.stack,p}})},t.theme=n=>{if(!mat(n))throw new TypeError("Expected theme to be an object");for(let c of Object.keys(n))t.alias(c,n[c]);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=Pde(),t.define=a,t};ZG.exports=bde();ZG.exports.create=bde});var Xo=_(pn=>{"use strict";var Eat=Object.prototype.toString,jc=Ju(),xde=!1,XG=[],kde={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};pn.longest=(t,e)=>t.reduce((r,s)=>Math.max(r,e?s[e].length:s.length),0);pn.hasColor=t=>!!t&&jc.hasColor(t);var VT=pn.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);pn.nativeType=t=>Eat.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");pn.isAsyncFn=t=>pn.nativeType(t)==="asyncfunction";pn.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";pn.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;pn.scrollDown=(t=[])=>[...t.slice(1),t[0]];pn.scrollUp=(t=[])=>[t.pop(),...t];pn.reorder=(t=[])=>{let e=t.slice();return e.sort((r,s)=>r.index>s.index?1:r.index{let s=t.length,a=r===s?0:r<0?s-1:r,n=t[e];t[e]=t[a],t[a]=n};pn.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};pn.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};pn.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:s=` -`+r,width:a=80}=e,n=(s+r).match(/[^\S\n]/g)||[];a-=n.length;let c=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,f=t.trim(),p=new RegExp(c,"g"),h=f.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(s)};pn.unmute=t=>{let e=t.stack.find(s=>jc.keys.color.includes(s));return e?jc[e]:t.stack.find(s=>s.slice(2)==="bg")?jc[e.slice(2)]:s=>s};pn.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";pn.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(s=>jc.keys.color.includes(s));if(e){let s=jc["bg"+pn.pascal(e)];return s?s.black:t}let r=t.stack.find(s=>s.slice(0,2)==="bg");return r?jc[r.slice(2).toLowerCase()]||t:jc.none};pn.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(s=>jc.keys.color.includes(s)),r=t.stack.find(s=>s.slice(0,2)==="bg");if(e&&!r)return jc[kde[e]||e];if(r){let s=r.slice(2).toLowerCase(),a=kde[s];return a&&jc["bg"+pn.pascal(a)]||t}return jc.none};pn.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),s=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+s};pn.set=(t={},e="",r)=>e.split(".").reduce((s,a,n,c)=>{let f=c.length-1>n?s[a]||{}:r;return!pn.isObject(f)&&n{let s=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return s??r};pn.mixin=(t,e)=>{if(!VT(t))return e;if(!VT(e))return t;for(let r of Object.keys(e)){let s=Object.getOwnPropertyDescriptor(e,r);if(s.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&VT(s.value)){let a=Object.getOwnPropertyDescriptor(t,r);VT(a.value)?t[r]=pn.merge({},t[r],e[r]):Reflect.defineProperty(t,r,s)}else Reflect.defineProperty(t,r,s);else Reflect.defineProperty(t,r,s)}return t};pn.merge=(...t)=>{let e={};for(let r of t)pn.mixin(e,r);return e};pn.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let s of Object.keys(r)){let a=r[s];typeof a=="function"?pn.define(t,s,a.bind(e)):pn.define(t,s,a)}};pn.onExit=t=>{let e=(r,s)=>{xde||(xde=!0,XG.forEach(a=>a()),r===!0&&process.exit(128+s))};XG.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),XG.push(t)};pn.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};pn.defineExport=(t,e,r)=>{let s;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){s=a},get(){return s?s():r()}})}});var Qde=_(rC=>{"use strict";rC.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"};rC.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};rC.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};rC.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};rC.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 Fde=_((_Ht,Tde)=>{"use strict";var Rde=Ie("readline"),Iat=Qde(),Cat=/^(?:\x1b)([a-zA-Z0-9])$/,wat=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,Bat={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 vat(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function Sat(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var JT=(t="",e={})=>{let r,s={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=s.sequence||""),s.sequence=s.sequence||t||s.name,t==="\r")s.raw=void 0,s.name="return";else if(t===` -`)s.name="enter";else if(t===" ")s.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")s.name="backspace",s.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")s.name="escape",s.meta=t.length===2;else if(t===" "||t==="\x1B ")s.name="space",s.meta=t.length===2;else if(t<="")s.name=String.fromCharCode(t.charCodeAt(0)+97-1),s.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")s.name="number";else if(t.length===1&&t>="a"&&t<="z")s.name=t;else if(t.length===1&&t>="A"&&t<="Z")s.name=t.toLowerCase(),s.shift=!0;else if(r=Cat.exec(t))s.meta=!0,s.shift=/^[A-Z]$/.test(r[1]);else if(r=wat.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(s.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),c=(r[3]||r[5]||1)-1;s.ctrl=!!(c&4),s.meta=!!(c&10),s.shift=!!(c&1),s.code=n,s.name=Bat[n],s.shift=vat(n)||s.shift,s.ctrl=Sat(n)||s.ctrl}return s};JT.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let s=Rde.createInterface({terminal:!0,input:r});Rde.emitKeypressEvents(r,s);let a=(f,p)=>e(f,JT(f,p),s),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),s.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),s.pause(),s.close()}};JT.action=(t,e,r)=>{let s={...Iat,...r};return e.ctrl?(e.action=s.ctrl[e.name],e):e.option&&s.option?(e.action=s.option[e.name],e):e.shift?(e.action=s.shift[e.name],e):(e.action=s.keys[e.name],e)};Tde.exports=JT});var Ode=_((HHt,Nde)=>{"use strict";Nde.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(e)for(let r of Object.keys(e)){let s=e[r];typeof s=="number"&&(s={interval:s}),Dat(t,r,s)}};function Dat(t,e,r={}){let s=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;s.frames=r.frames||[],s.loading=!0;let n=setInterval(()=>{s.ms=Date.now()-s.start,s.tick++,t.render()},a);return s.stop=()=>{s.loading=!1,clearInterval(n)},Reflect.defineProperty(s,"interval",{value:n}),t.once("close",()=>s.stop()),s.stop}});var Mde=_((jHt,Lde)=>{"use strict";var{define:Pat,width:bat}=Xo(),$G=class{constructor(e){let r=e.options;Pat(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=bat(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"}};Lde.exports=$G});var _de=_((GHt,Ude)=>{"use strict";var eq=Xo(),ho=Ju(),tq={default:ho.noop,noop:ho.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||eq.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||eq.complement(this.primary)},primary:ho.cyan,success:ho.green,danger:ho.magenta,strong:ho.bold,warning:ho.yellow,muted:ho.dim,disabled:ho.gray,dark:ho.dim.gray,underline:ho.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}};tq.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(ho.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(ho.visible=t.styles.visible);let e=eq.merge({},tq,t.styles);delete e.merge;for(let r of Object.keys(ho))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>ho[r]});for(let r of Object.keys(ho.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>ho[r]});return e};Ude.exports=tq});var jde=_((qHt,Hde)=>{"use strict";var rq=process.platform==="win32",zp=Ju(),xat=Xo(),nq={...zp.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:zp.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:zp.symbols.question,submitted:zp.symbols.check,cancelled:zp.symbols.cross},separator:{pending:zp.symbols.pointerSmall,submitted:zp.symbols.middot,cancelled:zp.symbols.middot},radio:{off:rq?"( )":"\u25EF",on:rq?"(*)":"\u25C9",disabled:rq?"(|)":"\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"]};nq.merge=t=>{let e=xat.merge({},zp.symbols,nq,t.symbols);return delete e.merge,e};Hde.exports=nq});var qde=_((WHt,Gde)=>{"use strict";var kat=_de(),Qat=jde(),Rat=Xo();Gde.exports=t=>{t.options=Rat.merge({},t.options.theme,t.options),t.symbols=Qat.merge(t.options),t.styles=kat.merge(t.options)}});var Kde=_((Vde,Jde)=>{"use strict";var Wde=process.env.TERM_PROGRAM==="Apple_Terminal",Tat=Ju(),iq=Xo(),Ku=Jde.exports=Vde,Ui="\x1B[",Yde="\x07",sq=!1,j0=Ku.code={bell:Yde,beep:Yde,beginning:`${Ui}G`,down:`${Ui}J`,esc:Ui,getPosition:`${Ui}6n`,hide:`${Ui}?25l`,line:`${Ui}2K`,lineEnd:`${Ui}K`,lineStart:`${Ui}1K`,restorePosition:Ui+(Wde?"8":"u"),savePosition:Ui+(Wde?"7":"s"),screen:`${Ui}2J`,show:`${Ui}?25h`,up:`${Ui}1J`},wm=Ku.cursor={get hidden(){return sq},hide(){return sq=!0,j0.hide},show(){return sq=!1,j0.show},forward:(t=1)=>`${Ui}${t}C`,backward:(t=1)=>`${Ui}${t}D`,nextLine:(t=1)=>`${Ui}E`.repeat(t),prevLine:(t=1)=>`${Ui}F`.repeat(t),up:(t=1)=>t?`${Ui}${t}A`:"",down:(t=1)=>t?`${Ui}${t}B`:"",right:(t=1)=>t?`${Ui}${t}C`:"",left:(t=1)=>t?`${Ui}${t}D`:"",to(t,e){return e?`${Ui}${e+1};${t+1}H`:`${Ui}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?wm.left(-t):t>0?wm.right(t):"",r+=e<0?wm.up(-e):e>0?wm.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:s,input:a,prompt:n,size:c,value:f}=t;if(s=iq.isPrimitive(s)?String(s):"",a=iq.isPrimitive(a)?String(a):"",f=iq.isPrimitive(f)?String(f):"",c){let p=Ku.cursor.up(c)+Ku.cursor.to(n.length),h=a.length-r;return h>0&&(p+=Ku.cursor.left(h)),p}if(f||e){let p=!a&&s?-s.length:-a.length+r;return e&&(p-=e.length),a===""&&s&&!n.includes(s)&&(p+=s.length),Ku.cursor.move(p)}}},oq=Ku.erase={screen:j0.screen,up:j0.up,down:j0.down,line:j0.line,lineEnd:j0.lineEnd,lineStart:j0.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return oq.line+wm.to(0);let r=n=>[...Tat.unstyle(n)].length,s=t.split(/\r?\n/),a=0;for(let n of s)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(oq.line+wm.prevLine()).repeat(a-1)+oq.line+wm.to(0)}});var nC=_((YHt,Zde)=>{"use strict";var Fat=Ie("events"),zde=Ju(),aq=Fde(),Nat=Ode(),Oat=Mde(),Lat=qde(),pl=Xo(),Bm=Kde(),lq=class t extends Fat{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,Lat(this),Nat(this),this.state=new Oat(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=Uat(this.options.margin),this.setMaxListeners(0),Mat(this)}async keypress(e,r={}){this.keypressed=!0;let s=aq.action(e,aq(e,r),this.options.actions);this.state.keypress=s,this.emit("keypress",e,s),this.emit("state",this.state.clone());let a=this.options[s.action]||this[s.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,s);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Bm.code.beep)}cursorHide(){this.stdout.write(Bm.cursor.hide()),pl.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Bm.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(Bm.cursor.down(e)+Bm.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:s}=this.sections(),{cursor:a,initial:n="",input:c="",value:f=""}=this,p=this.state.size=s.length,h={after:r,cursor:a,initial:n,input:c,prompt:e,size:p,value:f},E=Bm.cursor.restore(h);E&&this.stdout.write(E)}sections(){let{buffer:e,input:r,prompt:s}=this.state;s=zde.unstyle(s);let a=zde.unstyle(e),n=a.indexOf(s),c=a.slice(0,n),p=a.slice(n).split(` -`),h=p[0],E=p[p.length-1],S=(s+(r?" "+r:"")).length,b=Se.call(this,this.value),this.result=()=>s.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,s){let{options:a,state:n,symbols:c,timers:f}=this,p=f&&f[e];n.timer=p;let h=a[e]||n[e]||c[e],E=r&&r[e]!=null?r[e]:await h;if(E==="")return E;let C=await this.resolve(E,n,r,s);return!C&&r&&r[e]?this.resolve(h,n,r,s):C}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,s=this.state;return s.timer=r,pl.isObject(e)&&(e=e[s.status]||e.pending),pl.hasColor(e)?e:(this.styles[s.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return pl.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,s=this.state;s.timer=r;let a=e[s.status]||e.pending||s.separator,n=await this.resolve(a,s);return pl.isObject(n)&&(n=n[s.status]||n.pending),pl.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let s=await this.element("pointer",e,r);if(typeof s=="string"&&pl.hasColor(s))return s;if(s){let a=this.styles,n=this.index===r,c=n?a.primary:h=>h,f=await this.resolve(s[n?"on":"off"]||s,this.state),p=pl.hasColor(f)?f:c(f);return n?p:" ".repeat(f.length)}}async indicator(e,r){let s=await this.element("indicator",e,r);if(typeof s=="string"&&pl.hasColor(s))return s;if(s){let a=this.styles,n=e.enabled===!0,c=n?a.success:a.dark,f=s[n?"on":"off"]||s;return pl.hasColor(f)?f:c(f)}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 pl.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 pl.resolve(this,e,...r)}get base(){return t.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||pl.height(this.stdout,25)}get width(){return this.options.columns||pl.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,s=[r,e].find(this.isValue.bind(this));return this.isValue(s)?s:this.initial}static get prompt(){return e=>new this(e).run()}};function Mat(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],s=["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)?s.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function Uat(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` -`:" ",s=[];for(let a=0;a<4;a++){let n=r(a);e[a]?s.push(n.repeat(e[a])):s.push("")}return s}Zde.exports=lq});var eme=_((VHt,$de)=>{"use strict";var _at=Xo(),Xde={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 Xde.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}};$de.exports=(t,e={})=>{let r=_at.merge({},Xde,e.roles);return r[t]||r.default}});var Wv=_((JHt,nme)=>{"use strict";var Hat=Ju(),jat=nC(),Gat=eme(),KT=Xo(),{reorder:cq,scrollUp:qat,scrollDown:Wat,isObject:tme,swap:Yat}=KT,uq=class extends jat{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:s,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");tme(r)&&(r=Object.keys(r)),Array.isArray(r)?(s!=null&&(this.index=this.findIndex(s)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(s!=null&&(r=s),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 s=[],a=0,n=async(c,f)=>{typeof c=="function"&&(c=await c.call(this)),c instanceof Promise&&(c=await c);for(let p=0;p(this.state.loadingChoices=!1,c))}async toChoice(e,r,s){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=Gat(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,KT.define(e,"parent",s),e.level=s?s.level+1:1,e.indent==null&&(e.indent=s?s.indent+" ":e.indent||""),e.path=s?s.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,Hat.unstyle(e.message).length));let c={...e};return e.reset=(f=c.input,p=c.value)=>{for(let h of Object.keys(c))e[h]=c[h];e.input=f,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,s){let a=await this.toChoice(e,r,s);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,s){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,s);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 s=e.parent;for(;s;){let a=s.choices.filter(n=>this.isDisabled(n));s.enabled=a.every(n=>n.enabled===!0),s=s.parent}return rme(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=s=>{let a=Number(s);if(a>this.choices.length-1)return this.alert();let n=this.focused,c=this.choices.find(f=>a===f.index);if(!c.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(c)===-1){let f=cq(this.choices),p=f.indexOf(c);if(n.index>p){let h=f.slice(p,p+this.limit),E=f.filter(C=>!h.includes(C));this.choices=h.concat(E)}else{let h=p-this.limit+1;this.choices=f.slice(h).concat(f.slice(0,h))}}return this.index=this.choices.indexOf(c),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(s=>{let a=this.choices.length,n=this.num,c=(f=!1,p)=>{clearTimeout(this.numberTimeout),f&&(p=r(n)),this.num="",s(p)};if(n==="0"||n.length===1&&+(n+"0")>a)return c(!0);if(Number(n)>a)return c(!1,this.alert());this.numberTimeout=setTimeout(()=>c(!0),this.delay)})}home(){return this.choices=cq(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=cq(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,s=this.index;return this.options.scroll===!1&&s===0?this.alert():e>r&&s===0?this.scrollUp():(this.index=(s-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,s=this.index;return this.options.scroll===!1&&s===r-1?this.alert():e>r&&s===r-1?this.scrollDown():(this.index=(s+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=qat(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=Wat(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){Yat(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(s=>e[s]===!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(s=>!this.isDisabled(s));return e.enabled&&r.every(s=>this.isEnabled(s))}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((s,a)=>(s[a]=this.find(a,r),s),{})}filter(e,r){let a=typeof e=="function"?e:(f,p)=>[f.name,p].includes(e),c=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?c.map(f=>f[r]):c}find(e,r){if(tme(e))return r?e[r]:e;let a=typeof e=="function"?e:(c,f)=>[c.name,f].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(c=>c.newChoice))return this.alert();let{reorder:r,sort:s}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&s!==!0&&(n=KT.reorder(n)),this.value=a?n.map(c=>c.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(s=>s.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 s=this.find(r);s&&(this.initial=s.index,this.focus(s,!0))}}}get choices(){return rme(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:s}=this,a=e.limit||this._limit||r.limit||s.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 rme(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(KT.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let s=r.choices.filter(a=>!t.isDisabled(a));r.enabled=s.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}nme.exports=uq});var G0=_((KHt,ime)=>{"use strict";var Vat=Wv(),fq=Xo(),Aq=class extends Vat{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 s=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!fq.hasColor(s)&&(s=this.styles.strong(s)),this.resolve(s,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let s=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),c=await this.resolve(e.hint,this.state,e,r);c&&!fq.hasColor(c)&&(c=this.styles.muted(c));let f=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],f+a+n,p,this.margin[1],c].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(fq.hasColor(p)||(p=this.styles.disabled(p)),h()):(s&&(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,c)=>await this.renderChoice(n,c)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let s=this.margin[0]+r.join(` -`),a;return this.options.choicesHeader&&(a=await this.resolve(this.options.choicesHeader,this.state)),[a,s].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,s="",a=await this.header(),n=await this.prefix(),c=await this.separator(),f=await this.message();this.options.promptLine!==!1&&(s=[n,f,c,""].join(" "),this.state.prompt=s);let p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),C=await this.footer();p&&(s+=p),h&&!s.includes(h)&&(s+=" "+h),e&&!p&&!E.trim()&&this.multiple&&this.emptyError!=null&&(s+=this.styles.danger(this.emptyError)),this.clear(r),this.write([a,s,E,C].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};ime.exports=Aq});var ome=_((zHt,sme)=>{"use strict";var Jat=G0(),Kat=(t,e)=>{let r=t.toLowerCase();return s=>{let n=s.toLowerCase().indexOf(r),c=e(s.slice(n,n+r.length));return n>=0?s.slice(0,n)+c+s.slice(n+r.length):s}},pq=class extends Jat{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:s}=this.state;return this.input=s.slice(0,r)+e+s.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 s=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(s))}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=Kat(this.input,e),s=this.choices;this.choices=s.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=s}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};sme.exports=pq});var gq=_((ZHt,ame)=>{"use strict";var hq=Xo();ame.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:s="",pos:a,showCursor:n=!0,color:c}=e,f=c||t.styles.placeholder,p=hq.inverse(t.styles.primary),h=T=>p(t.styles.black(T)),E=r,C=" ",S=h(C);if(t.blink&&t.blink.off===!0&&(h=T=>T,S=""),n&&a===0&&s===""&&r==="")return h(C);if(n&&a===0&&(r===s||r===""))return h(s[0])+f(s.slice(1));s=hq.isPrimitive(s)?`${s}`:"",r=hq.isPrimitive(r)?`${r}`:"";let b=s&&s.startsWith(r)&&s!==r,I=b?h(s[r.length]):S;if(a!==r.length&&n===!0&&(E=r.slice(0,a)+h(r[a])+r.slice(a+1),I=""),n===!1&&(I=""),b){let T=t.styles.unstyle(E+I);return E+I+f(s.slice(T.length))}return E+I}});var zT=_((XHt,lme)=>{"use strict";var zat=Ju(),Zat=G0(),Xat=gq(),dq=class extends Zat{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:s,input:a}=r;return r.value=r.input=a.slice(0,s)+e+a.slice(s),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:s}=e;return e.value=e.input=s.slice(0,r-1)+s.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:s}=e;if(s[r]===void 0)return this.alert();let a=`${s}`.slice(0,r)+`${s}`.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:s}=e;return r&&r.startsWith(s)&&s!==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 s=await this.resolve(e.separator,this.state,e,r)||":";return s?" "+this.styles.disabled(s):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:s,styles:a}=this,{cursor:n,initial:c="",name:f,hint:p,input:h=""}=e,{muted:E,submitted:C,primary:S,danger:b}=a,I=p,T=this.index===r,N=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),W=e.message;this.align==="right"&&(W=W.padStart(this.longest+1," ")),this.align==="left"&&(W=W.padEnd(this.longest+1," "));let ee=this.values[f]=h||c,ie=h?"success":"dark";await N.call(e,ee,this.state)!==!0&&(ie="danger");let ue=a[ie],le=ue(await this.indicator(e,r))+(e.pad||""),me=this.indent(e),pe=()=>[me,le,W+U,h,I].filter(Boolean).join(" ");if(s.submitted)return W=zat.unstyle(W),h=C(h),I="",pe();if(e.format)h=await e.format.call(this,h,e,r);else{let Be=this.styles.muted;h=Xat(this,{input:h,initial:c,pos:n,showCursor:T,color:Be})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[f]=await e.result.call(this,ee,e,r)),T&&(W=S(W)),e.error?h+=(h?" ":"")+b(e.error.trim()):e.hint&&(h+=(h?" ":"")+E(e.hint.trim())),pe()}async submit(){return this.value=this.values,super.base.submit.call(this)}};lme.exports=dq});var mq=_(($Ht,ume)=>{"use strict";var $at=zT(),elt=()=>{throw new Error("expected prompt to have a custom authenticate method")},cme=(t=elt)=>{class e extends $at{constructor(s){super(s)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(s){return cme(s)}}return e};ume.exports=cme()});var pme=_((ejt,Ame)=>{"use strict";var tlt=mq();function rlt(t,e){return t.username===this.options.username&&t.password===this.options.password}var fme=(t=rlt)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(s){return this.options.showPassword?s:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(s.length))}}];class r extends tlt.create(t){constructor(a){super({...a,choices:e})}static create(a){return fme(a)}}return r};Ame.exports=fme()});var ZT=_((tjt,hme)=>{"use strict";var nlt=nC(),{isPrimitive:ilt,hasColor:slt}=Xo(),yq=class extends nlt{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:s}=this;return s.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 ilt(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return slt(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,s=await this.prefix(),a=await this.separator(),n=await this.message(),c=this.styles.muted(this.default),f=[s,n,c,a].filter(Boolean).join(" ");this.state.prompt=f;let p=await this.header(),h=this.value=this.cast(e),E=await this.format(h),C=await this.error()||await this.hint(),S=await this.footer();C&&!f.includes(C)&&(E+=" "+C),f+=" "+E,this.clear(r),this.write([p,f,S].filter(Boolean).join(` -`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};hme.exports=yq});var dme=_((rjt,gme)=>{"use strict";var olt=ZT(),Eq=class extends olt{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};gme.exports=Eq});var yme=_((njt,mme)=>{"use strict";var alt=G0(),llt=zT(),iC=llt.prototype,Iq=class extends alt{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let s=this.focused,a=s.parent||{};return!s.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():iC.dispatch.call(this,e,r)}append(e,r){return iC.append.call(this,e,r)}delete(e,r){return iC.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?iC.next.call(this):super.next()}prev(){return this.focused.editable?iC.prev.call(this):super.prev()}async indicator(e,r){let s=e.indicator||"",a=e.editable?s: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?iC.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 s=r.parent?this.value[r.parent.name]:this.value;if(r.editable?s=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(s=r.enabled===!0),e=await r.validate(s,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)}};mme.exports=Iq});var vm=_((ijt,Eme)=>{"use strict";var clt=nC(),ult=gq(),{isPrimitive:flt}=Xo(),Cq=class extends clt{constructor(e){super(e),this.initial=flt(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let s=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!s||s.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:s}=this.state;this.input=`${s}`.slice(0,r)+e+`${s}`.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),s=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=s,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):ult(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),s=await this.separator(),a=await this.message(),n=[r,a,s].filter(Boolean).join(" ");this.state.prompt=n;let c=await this.header(),f=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!f.includes(p)&&(f+=" "+p),n+=" "+f,this.clear(e),this.write([c,n,h].filter(Boolean).join(` -`)),this.restore()}};Eme.exports=Cq});var Cme=_((sjt,Ime)=>{"use strict";var Alt=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),XT=t=>Alt(t).filter(Boolean);Ime.exports=(t,e={},r="")=>{let{past:s=[],present:a=""}=e,n,c;switch(t){case"prev":case"undo":return n=s.slice(0,s.length-1),c=s[s.length-1]||"",{past:XT([r,...n]),present:c};case"next":case"redo":return n=s.slice(1),c=s[0]||"",{past:XT([...n,r]),present:c};case"save":return{past:XT([...s,r]),present:""};case"remove":return c=XT(s.filter(f=>f!==r)),a="",c.length&&(a=c.pop()),{past:c,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var Bq=_((ojt,Bme)=>{"use strict";var plt=vm(),wme=Cme(),wq=class extends plt{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let s=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:s},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=wme(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=wme("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};Bme.exports=wq});var Sme=_((ajt,vme)=>{"use strict";var hlt=vm(),vq=class extends hlt{format(){return""}};vme.exports=vq});var Pme=_((ljt,Dme)=>{"use strict";var glt=vm(),Sq=class extends glt{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()}};Dme.exports=Sq});var xme=_((cjt,bme)=>{"use strict";var dlt=G0(),Dq=class extends dlt{constructor(e){super({...e,multiple:!0})}};bme.exports=Dq});var bq=_((ujt,kme)=>{"use strict";var mlt=vm(),Pq=class extends mlt{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,s=this.toNumber(this.input);return s>this.max+r?this.alert():(this.input=`${s+r}`,this.render())}down(e){let r=e||this.minor,s=this.toNumber(this.input);return sthis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};kme.exports=Pq});var Rme=_((fjt,Qme)=>{Qme.exports=bq()});var Fme=_((Ajt,Tme)=>{"use strict";var ylt=vm(),xq=class extends ylt{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)):""}};Tme.exports=xq});var Lme=_((pjt,Ome)=>{"use strict";var Elt=Ju(),Ilt=Wv(),Nme=Xo(),kq=class extends Ilt{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((s,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 s=0;s=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(s=>` ${s.name} - ${s.message}`)].map(s=>this.styles.muted(s)).join(` -`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let s=this.scaleLength-r.join("").length,a=Math.round(s/(r.length-1)),c=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),f=" ".repeat(this.widths[0]);return this.margin[3]+f+this.margin[1]+c}scaleIndicator(e,r,s){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,s);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 s=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return s.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let s=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!Nme.hasColor(n)&&(n=this.styles.muted(n));let c=I=>this.margin[3]+I.replace(/\s+$/,"").padEnd(this.widths[0]," "),f=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),E=await this.renderScale(e,r),C=this.margin[1]+this.margin[3];this.scaleLength=Elt.unstyle(E).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-C.length);let b=Nme.wordWrap(h,{width:this.widths[0],newline:f}).split(` -`).map(I=>c(I)+this.margin[1]);return s&&(E=this.styles.info(E),b=b.map(I=>this.styles.info(I))),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),s=await this.renderScaleHeading();return this.margin[0]+[s,...r.map(a=>a.join(" "))].join(` -`)}async render(){let{submitted:e,size:r}=this.state,s=await this.prefix(),a=await this.separator(),n=await this.message(),c="";this.options.promptLine!==!1&&(c=[s,n,a,""].join(" "),this.state.prompt=c);let f=await this.header(),p=await this.format(),h=await this.renderScaleKey(),E=await this.error()||await this.hint(),C=await this.renderChoices(),S=await this.footer(),b=this.emptyError;p&&(c+=p),E&&!c.includes(E)&&(c+=" "+E),e&&!p&&!C.trim()&&this.multiple&&b!=null&&(c+=this.styles.danger(b)),this.clear(r),this.write([f,c,h,C,S].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)}};Ome.exports=kq});var _me=_((hjt,Ume)=>{"use strict";var Mme=Ju(),Clt=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",Rq=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=Clt(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},wlt=async(t={},e={},r=s=>s)=>{let s=new Set,a=t.fields||[],n=t.template,c=[],f=[],p=[],h=1;typeof n=="function"&&(n=await n());let E=-1,C=()=>n[++E],S=()=>n[E+1],b=I=>{I.line=h,c.push(I)};for(b({type:"bos",value:""});Eie.name===U.key);U.field=a.find(ie=>ie.name===U.key),ee||(ee=new Rq(U),f.push(ee)),ee.lines.push(U.line-1);continue}let T=c[c.length-1];T.type==="text"&&T.line===h?T.value+=I:b({type:"text",value:I})}return b({type:"eos",value:""}),{input:n,tabstops:c,unique:s,keys:p,items:f}};Ume.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),s={...e.values,...e.initial},{tabstops:a,items:n,keys:c}=await wlt(e,s),f=Qq("result",t,e),p=Qq("format",t,e),h=Qq("validate",t,e,!0),E=t.isValue.bind(t);return async(C={},S=!1)=>{let b=0;C.required=r,C.items=n,C.keys=c,C.output="";let I=async(W,ee,ie,ue)=>{let le=await h(W,ee,ie,ue);return le===!1?"Invalid field "+ie.name:le};for(let W of a){let ee=W.value,ie=W.key;if(W.type!=="template"){ee&&(C.output+=ee);continue}if(W.type==="template"){let ue=n.find(Ce=>Ce.name===ie);e.required===!0&&C.required.add(ue.name);let le=[ue.input,C.values[ue.value],ue.value,ee].find(E),pe=(ue.field||{}).message||W.inner;if(S){let Ce=await I(C.values[ie],C,ue,b);if(Ce&&typeof Ce=="string"||Ce===!1){C.invalid.set(ie,Ce);continue}C.invalid.delete(ie);let g=await f(C.values[ie],C,ue,b);C.output+=Mme.unstyle(g);continue}ue.placeholder=!1;let Be=ee;ee=await p(ee,C,ue,b),le!==ee?(C.values[ie]=le,ee=t.styles.typing(le),C.missing.delete(pe)):(C.values[ie]=void 0,le=`<${pe}>`,ee=t.styles.primary(le),ue.placeholder=!0,C.required.has(ie)&&C.missing.add(pe)),C.missing.has(pe)&&C.validating&&(ee=t.styles.warning(le)),C.invalid.has(ie)&&C.validating&&(ee=t.styles.danger(le)),b===C.index&&(Be!==ee?ee=t.styles.underline(ee):ee=t.styles.heading(Mme.unstyle(ee))),b++}ee&&(C.output+=ee)}let T=C.output.split(` -`).map(W=>" "+W),N=n.length,U=0;for(let W of n)C.invalid.has(W.name)&&W.lines.forEach(ee=>{T[ee][0]===" "&&(T[ee]=C.styles.danger(C.symbols.bullet)+T[ee].slice(1))}),t.isValue(C.values[W.name])&&U++;return C.completed=(U/N*100).toFixed(0),C.output=T.join(` -`),C.output}};function Qq(t,e,r,s){return(a,n,c,f)=>typeof c.field[t]=="function"?c.field[t].call(e,a,n,c,f):[s,a].find(p=>e.isValue(p))}});var jme=_((gjt,Hme)=>{"use strict";var Blt=Ju(),vlt=_me(),Slt=nC(),Tq=class extends Slt{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await vlt(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 s=this.getItem(),a=s.input.slice(0,this.cursor),n=s.input.slice(this.cursor);this.input=s.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),s=e.input.slice(0,this.cursor-1);this.input=e.input=`${s}${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:s,size:a}=this.state,n=[this.options.newline,` -`].find(W=>W!=null),c=await this.prefix(),f=await this.separator(),p=await this.message(),h=[c,p,f].filter(Boolean).join(" ");this.state.prompt=h;let E=await this.header(),C=await this.error()||"",S=await this.hint()||"",b=s?"":await this.interpolate(this.state),I=this.state.key=r[e]||"",T=await this.format(I),N=await this.footer();T&&(h+=" "+T),S&&!T&&this.state.completed===0&&(h+=" "+S),this.clear(a);let U=[E,h,b,N,C.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:s,index:a}=this.state,n=r.find(c=>c.name===s[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:s,values:a}=this.state;if(e.size){let f="";for(let[p,h]of e)f+=`Invalid ${p}: ${h} -`;return this.state.error=f,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let c=Blt.unstyle(s).split(` -`).map(f=>f.slice(1)).join(` -`);return this.value={values:a,result:c},super.submit()}};Hme.exports=Tq});var qme=_((djt,Gme)=>{"use strict";var Dlt="(Use + to sort)",Plt=G0(),Fq=class extends Plt{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,Dlt].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let s=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} - `+s:n+s}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};Gme.exports=Fq});var Yme=_((mjt,Wme)=>{"use strict";var blt=Wv(),Nq=class extends blt{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(s=>this.styles.muted(s)),this.state.header=r.join(` - `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let s of r)s.scale=xlt(5,this.options),s.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],s=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!s,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 s=this.index===r,a=this.term==="Hyper",n=a?9:8,c=a?"":" ",f=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=ee=>(ee?this.styles.success("\u25C9"):"\u25EF")+c,E=r+1+".",C=s?this.styles.heading:this.styles.noop,S=await this.resolve(e.message,this.state,e,r),b=this.indent(e),I=b+e.scale.map((ee,ie)=>h(ie===e.scaleIdx)).join(f),T=ee=>ee===e.scaleIdx?C(ee):ee,N=b+e.scale.map((ee,ie)=>T(ie)).join(p),U=()=>[E,S].filter(Boolean).join(" "),W=()=>[U(),I,N," "].filter(Boolean).join(` -`);return s&&(I=this.styles.cyan(I),N=this.styles.cyan(N)),W()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(s,a)=>await this.renderChoice(s,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,s=await this.prefix(),a=await this.separator(),n=await this.message(),c=[s,n,a].filter(Boolean).join(" ");this.state.prompt=c;let f=await this.header(),p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),C=await this.footer();(p||!h)&&(c+=" "+p),h&&!c.includes(h)&&(c+=" "+h),e&&!p&&!E&&this.multiple&&this.type!=="form"&&(c+=this.styles.danger(this.emptyError)),this.clear(r),this.write([c,f,E,C].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 xlt(t,e={}){if(Array.isArray(e.scale))return e.scale.map(s=>({...s}));let r=[];for(let s=1;s{Vme.exports=Bq()});var zme=_((Ejt,Kme)=>{"use strict";var klt=ZT(),Oq=class extends klt{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=s=>this.styles.primary.underline(s);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(),s=await this.prefix(),a=await this.separator(),n=await this.message(),c=await this.format(),f=await this.error()||await this.hint(),p=await this.footer(),h=[s,n,a,c].join(" ");this.state.prompt=h,f&&!h.includes(f)&&(h+=" "+f),this.clear(e),this.write([r,h,p].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};Kme.exports=Oq});var Xme=_((Ijt,Zme)=>{"use strict";var Qlt=G0(),Lq=class extends Qlt{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 s=await super.toChoices(e,r);if(s.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>s.length)throw new Error("Please specify the index of the correct answer from the list of choices");return s}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)}}};Zme.exports=Lq});var eye=_(Mq=>{"use strict";var $me=Xo(),ks=(t,e)=>{$me.defineExport(Mq,t,e),$me.defineExport(Mq,t.toLowerCase(),e)};ks("AutoComplete",()=>ome());ks("BasicAuth",()=>pme());ks("Confirm",()=>dme());ks("Editable",()=>yme());ks("Form",()=>zT());ks("Input",()=>Bq());ks("Invisible",()=>Sme());ks("List",()=>Pme());ks("MultiSelect",()=>xme());ks("Numeral",()=>Rme());ks("Password",()=>Fme());ks("Scale",()=>Lme());ks("Select",()=>G0());ks("Snippet",()=>jme());ks("Sort",()=>qme());ks("Survey",()=>Yme());ks("Text",()=>Jme());ks("Toggle",()=>zme());ks("Quiz",()=>Xme())});var rye=_((wjt,tye)=>{tye.exports={ArrayPrompt:Wv(),AuthPrompt:mq(),BooleanPrompt:ZT(),NumberPrompt:bq(),StringPrompt:vm()}});var Vv=_((Bjt,iye)=>{"use strict";var nye=Ie("assert"),_q=Ie("events"),q0=Xo(),zu=class extends _q{constructor(e,r){super(),this.options=q0.merge({},e),this.answers={...r}}register(e,r){if(q0.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}nye.equal(typeof r,"function","expected a function");let s=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[s]=r:this.prompts[s]=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(q0.merge({},this.options,r))}catch(s){return Promise.reject(s)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=q0.merge({},this.options,e),{type:s,name:a}=e,{set:n,get:c}=q0;if(typeof s=="function"&&(s=await s.call(this,e,this.answers)),!s)return this.answers[a];nye(this.prompts[s],`Prompt "${s}" is not registered`);let f=new this.prompts[s](r),p=c(this.answers,a);f.state.answers=this.answers,f.enquirer=this,a&&f.on("submit",E=>{this.emit("answer",a,E,f),n(this.answers,a,E)});let h=f.emit.bind(f);return f.emit=(...E)=>(this.emit.call(this,...E),h(...E)),this.emit("prompt",f,this),r.autofill&&p!=null?(f.value=f.input=p,r.autofill==="show"&&await f.submit()):p=f.value=await f.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||nC()}static get prompts(){return eye()}static get types(){return rye()}static get prompt(){let e=(r,...s)=>{let a=new this(...s),n=a.emit.bind(a);return a.emit=(...c)=>(e.emit(...c),n(...c)),a.prompt(r)};return q0.mixinEmitter(e,new _q),e}};q0.mixinEmitter(zu,new _q);var Uq=zu.prompts;for(let t of Object.keys(Uq)){let e=t.toLowerCase(),r=s=>new Uq[t](s).run();zu.prompt[e]=r,zu[e]=r,zu[t]||Reflect.defineProperty(zu,t,{get:()=>Uq[t]})}var Yv=t=>{q0.defineExport(zu,t,()=>zu.types[t])};Yv("ArrayPrompt");Yv("AuthPrompt");Yv("BooleanPrompt");Yv("NumberPrompt");Yv("StringPrompt");iye.exports=zu});var Aye=_((Y6t,_lt)=>{_lt.exports={name:"@yarnpkg/cli",version:"4.10.3",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-catalog":"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-jsr":"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-jsr","@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","@yarnpkg/plugin-catalog"]}},repository:{type:"git",url:"git+https://github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var t5=_((v9t,vye)=>{"use strict";vye.exports=function(e,r){r===!0&&(r=0);var s="";if(typeof e=="string")try{s=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(s=e.protocol);var a=s.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var Dye=_((S9t,Sye)=>{"use strict";var oct=t5();function act(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=oct(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}Sye.exports=act});var xye=_((D9t,bye)=>{"use strict";var lct=Dye();function cct(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var uct=cct(lct),fct="text/plain",Act="us-ascii",Pye=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),pct=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:s,data:a,hash:n}=r.groups,c=s.split(";");n=e?"":n;let f=!1;c[c.length-1]==="base64"&&(c.pop(),f=!0);let p=(c.shift()||"").toLowerCase(),E=[...c.map(C=>{let[S,b=""]=C.split("=").map(I=>I.trim());return S==="charset"&&(b=b.toLowerCase(),b===Act)?"":`${S}${b?`=${b}`:""}`}).filter(Boolean)];return f&&E.push("base64"),(E.length>0||p&&p!==fct)&&E.unshift(p),`data:${E.join(";")},${f?a.trim():a}${n?`#${n}`:""}`};function hct(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 pct(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 c=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,f=0,p="";for(;;){let E=c.exec(a.pathname);if(!E)break;let C=E[0],S=E.index,b=a.pathname.slice(f,S);p+=b.replace(/\/{2,}/g,"/"),p+=C,f=S+C.length}let h=a.pathname.slice(f,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 c=a.pathname.split("/"),f=c[c.length-1];Pye(f,e.removeDirectoryIndex)&&(c=c.slice(0,-1),a.pathname=c.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 c of[...a.searchParams.keys()])Pye(c,e.removeQueryParameters)&&a.searchParams.delete(c);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 r5=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,s=n=>{let c=new Error(n);throw c.subject_url=t,c};(typeof t!="string"||!t.trim())&&s("Invalid url."),t.length>r5.MAX_INPUT_LENGTH&&s("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=hct(t,e));let a=uct.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):s("URL parsing failed.")}return a};r5.MAX_INPUT_LENGTH=2048;bye.exports=r5});var Rye=_((P9t,Qye)=>{"use strict";var gct=t5();function kye(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=gct(t);if(t=t.substring(t.indexOf("://")+3),kye(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var dct=xye(),Tye=Rye();function mct(t){var e=dct(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),Tye(e.protocols)||e.protocols.length===0&&Tye(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}Fye.exports=mct});var Lye=_((x9t,Oye)=>{"use strict";var yct=Nye();function n5(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=yct(t),s=r.resource.split("."),a=null;switch(r.toString=function(N){return n5.stringify(this,N)},r.source=s.length>2?s.slice(1-s.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=s[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 c=a.indexOf("-",2),f=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),E=a.indexOf("src",2),C=a.indexOf("raw",2),S=a.indexOf("edit",2);n=c>0?c-1:f>0?f-1:p>0?p-1:h>0?h-1:E>0?E-1:C>0?C-1:S>0?S-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 I=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,T=I.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}n5.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",s=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+s+"@"+t.resource+r+"/"+t.full_name+a:s+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+s+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?Ect(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+Ict(t)+a;default:return t.href}};function Ect(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function Ict(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}Oye.exports=n5});function Fct(t,e){return e===1&&Tct.has(t[0])}function nS(t){let e=Array.isArray(t)?t:Mu(t);return e.map((s,a)=>Qct.test(s)?`[${s}]`:Rct.test(s)&&!Fct(e,a)?`.${s}`:`[${JSON.stringify(s)}]`).join("").replace(/^\./,"")}function Nct(t,e){let r=[];if(e.methodName!==null&&r.push(he.pretty(t,e.methodName,he.Type.CODE)),e.file!==null){let s=[];s.push(he.pretty(t,e.file,he.Type.PATH)),e.line!==null&&(s.push(he.pretty(t,e.line,he.Type.NUMBER)),e.column!==null&&s.push(he.pretty(t,e.column,he.Type.NUMBER))),r.push(`(${s.join(he.pretty(t,":","grey"))})`)}return r.join(" ")}function nF(t,{manifestUpdates:e,reportedErrors:r},{fix:s}={}){let a=new Map,n=new Map,c=[...r.keys()].map(f=>[f,new Map]);for(let[f,p]of[...c,...e]){let h=r.get(f)?.map(b=>({text:b,fixable:!1}))??[],E=!1,C=t.getWorkspaceByCwd(f),S=C.manifest.exportTo({});for(let[b,I]of p){if(I.size>1){let T=[...I].map(([N,U])=>{let W=he.pretty(t.configuration,N,he.Type.INSPECT),ee=U.size>0?Nct(t.configuration,U.values().next().value):null;return ee!==null?` -${W} at ${ee}`:` -${W}`}).join("");h.push({text:`Conflict detected in constraint targeting ${he.pretty(t.configuration,b,he.Type.CODE)}; conflicting values are:${T}`,fixable:!1})}else{let[[T]]=I,N=va(S,b);if(JSON.stringify(N)===JSON.stringify(T))continue;if(!s){let U=typeof N>"u"?`Missing field ${he.pretty(t.configuration,b,he.Type.CODE)}; expected ${he.pretty(t.configuration,T,he.Type.INSPECT)}`:typeof T>"u"?`Extraneous field ${he.pretty(t.configuration,b,he.Type.CODE)} currently set to ${he.pretty(t.configuration,N,he.Type.INSPECT)}`:`Invalid field ${he.pretty(t.configuration,b,he.Type.CODE)}; expected ${he.pretty(t.configuration,T,he.Type.INSPECT)}, found ${he.pretty(t.configuration,N,he.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof T>"u"?A0(S,b):Jd(S,b,T),E=!0}E&&a.set(C,S)}h.length>0&&n.set(C,h)}return{changedWorkspaces:a,remainingErrors:n}}function Zye(t,{configuration:e}){let r={children:[]};for(let[s,a]of t){let n=[];for(let f of a){let p=f.text.split(/\n/);f.fixable&&(p[0]=`${he.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:he.tuple(he.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:he.tuple(he.Type.NO_HINT,h)}))})}let c={value:he.tuple(he.Type.LOCATOR,s.anchoredLocator),children:je.sortMap(n,f=>f.value[1])};r.children.push(c)}return r.children=je.sortMap(r.children,s=>s.value[1]),r}var WC,Qct,Rct,Tct,iS=Ze(()=>{Ge();ql();WC=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 s=Object.hasOwn(e,r)?e[r]:void 0;if(typeof s>"u")continue;je.getArrayWithDefault(this.indexes[r],s).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 s=[],a;for(let[c,f]of r){let p=c,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){s.push([p,f]);continue}let E=new Set(h.get(f)??[]);if(E.size===0)return[];if(typeof a>"u")a=E;else for(let C of a)E.has(C)||a.delete(C);if(a.size===0)break}let n=[...a??[]];return s.length>0&&(n=n.filter(c=>{for(let[f,p]of s)if(!(typeof p<"u"?Object.hasOwn(c,f)&&c[f]===p:Object.hasOwn(c,f)===!1))return!1;return!0})),n}},Qct=/^[0-9]+$/,Rct=/^[a-zA-Z0-9_]+$/,Tct=new Set(["scripts",...Ut.allDependencies])});var Xye=_((CYt,m5)=>{var Oct;(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(s,a,n){var c=n.args[0],f=n.args[1];if(!t.type.is_variable(f)&&!t.type.is_integer(f))s.throw_error(t.error.type("integer",f,n.indicator));else if(t.type.is_integer(f)&&f.value<0)s.throw_error(t.error.domain("not_less_than_zero",f,n.indicator));else{var p=new t.type.Term("length",[c,new t.type.Num(0,!1),f]);t.type.is_integer(f)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),s.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(s,a,n){var c=n.args[0],f=n.args[1],p=n.args[2];if(t.type.is_variable(f))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(f))s.throw_error(t.error.type("integer",f,n.indicator));else if(f.value<0)s.throw_error(t.error.domain("not_less_than_zero",f,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))s.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),E=0;E0;C--)E[C].equals(E[C-1])&&E.splice(C,1);for(var S=new t.type.Term("[]"),C=E.length-1;C>=0;C--)S=new t.type.Term(".",[E[C],S]);s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[S,f])),a.substitution,a)])}}},"msort/2":function(s,a,n){var c=n.args[0],f=n.args[1];if(t.type.is_variable(c))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(f)&&!t.type.is_fully_list(f))s.throw_error(t.error.type("list",f,n.indicator));else{for(var p=[],h=c;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))s.throw_error(t.error.type("list",c,n.indicator));else{for(var E=p.sort(t.compare),C=new t.type.Term("[]"),S=E.length-1;S>=0;S--)C=new t.type.Term(".",[E[S],C]);s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[C,f])),a.substitution,a)])}}},"keysort/2":function(s,a,n){var c=n.args[0],f=n.args[1];if(t.type.is_variable(c))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(f)&&!t.type.is_fully_list(f))s.throw_error(t.error.type("list",f,n.indicator));else{for(var p=[],h,E=c;E.indicator==="./2";){if(h=E.args[0],t.type.is_variable(h)){s.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){s.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))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(E))s.throw_error(t.error.type("list",c,n.indicator));else{for(var C=p.sort(t.compare),S=new t.type.Term("[]"),b=C.length-1;b>=0;b--)S=new t.type.Term(".",[new t.type.Term("-",[C[b],C[b].pair]),S]),delete C[b].pair;s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[S,f])),a.substitution,a)])}}},"take/3":function(s,a,n){var c=n.args[0],f=n.args[1],p=n.args[2];if(t.type.is_variable(f)||t.type.is_variable(c))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(f))s.throw_error(t.error.type("list",f,n.indicator));else if(!t.type.is_integer(c))s.throw_error(t.error.type("integer",c,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))s.throw_error(t.error.type("list",p,n.indicator));else{for(var h=c.value,E=[],C=f;h>0&&C.indicator==="./2";)E.push(C.args[0]),C=C.args[1],h--;if(h===0){for(var S=new t.type.Term("[]"),h=E.length-1;h>=0;h--)S=new t.type.Term(".",[E[h],S]);s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[S,p])),a.substitution,a)])}}},"drop/3":function(s,a,n){var c=n.args[0],f=n.args[1],p=n.args[2];if(t.type.is_variable(f)||t.type.is_variable(c))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(f))s.throw_error(t.error.type("list",f,n.indicator));else if(!t.type.is_integer(c))s.throw_error(t.error.type("integer",c,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))s.throw_error(t.error.type("list",p,n.indicator));else{for(var h=c.value,E=[],C=f;h>0&&C.indicator==="./2";)E.push(C.args[0]),C=C.args[1],h--;h===0&&s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[C,p])),a.substitution,a)])}},"reverse/2":function(s,a,n){var c=n.args[0],f=n.args[1],p=t.type.is_instantiated_list(c),h=t.type.is_instantiated_list(f);if(t.type.is_variable(c)&&t.type.is_variable(f))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(c)&&!t.type.is_fully_list(c))s.throw_error(t.error.type("list",c,n.indicator));else if(!t.type.is_variable(f)&&!t.type.is_fully_list(f))s.throw_error(t.error.type("list",f,n.indicator));else if(!p&&!h)s.throw_error(t.error.instantiation(n.indicator));else{for(var E=p?c:f,C=new t.type.Term("[]",[]);E.indicator==="./2";)C=new t.type.Term(".",[E.args[0],C]),E=E.args[1];s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[C,p?f:c])),a.substitution,a)])}},"list_to_set/2":function(s,a,n){var c=n.args[0],f=n.args[1];if(t.type.is_variable(c))s.throw_error(t.error.instantiation(n.indicator));else{for(var p=c,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")s.throw_error(t.error.type("list",c,n.indicator));else{for(var E=[],C=new t.type.Term("[]",[]),S,b=0;b=0;b--)C=new t.type.Term(".",[E[b],C]);s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[f,C])),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 m5<"u"?m5.exports=function(s){t=s,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(Oct)});var pEe=_($r=>{"use strict";var Pm=process.platform==="win32",y5="aes-256-cbc",Lct="sha256",tEe="The current environment doesn't support interactive reading from TTY.",si=Ie("fs"),$ye=process.binding("tty_wrap").TTY,I5=Ie("child_process"),V0=Ie("path"),C5={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},Zp="none",Xu,VC,eEe=!1,Y0,sF,E5,Mct=0,D5="",Dm=[],oF,rEe=!1,w5=!1,sS=!1;function nEe(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(s){return"#"+s.charCodeAt(0)+";"})}return sF.concat(function(r){var s=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&s.push("--"+a):r[a]==="string"&&t[a]&&s.push("--"+a,e(t[a]))}),s}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function Uct(t,e){function r(U){var W,ee="",ie;for(E5=E5||Ie("os").tmpdir();;){W=V0.join(E5,U+ee);try{ie=si.openSync(W,"wx")}catch(ue){if(ue.code==="EEXIST"){ee++;continue}else throw ue}si.closeSync(ie);break}return W}var s,a,n,c={},f,p,h=r("readline-sync.stdout"),E=r("readline-sync.stderr"),C=r("readline-sync.exit"),S=r("readline-sync.done"),b=Ie("crypto"),I,T,N;I=b.createHash(Lct),I.update(""+process.pid+Mct+++Math.random()),N=I.digest("hex"),T=b.createDecipher(y5,N),s=nEe(t),Pm?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+Y0+"%Q%"+s.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+C+"%Q%%Q%) 2>%Q%"+E+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+y5+"%Q% %Q%"+N+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+S+"%Q%"]):(a="/bin/sh",n=["-c",'("'+Y0+'"'+s.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+C+'") 2>"'+E+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+y5+'" "'+N+'" >"'+h+'"; echo 1 >"'+S+'"']),sS&&sS("_execFileSync",s);try{I5.spawn(a,n,e)}catch(U){c.error=new Error(U.message),c.error.method="_execFileSync - spawn",c.error.program=a,c.error.args=n}for(;si.readFileSync(S,{encoding:t.encoding}).trim()!=="1";);return(f=si.readFileSync(C,{encoding:t.encoding}).trim())==="0"?c.input=T.update(si.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+T.final(t.encoding):(p=si.readFileSync(E,{encoding:t.encoding}).trim(),c.error=new Error(tEe+(p?` -`+p:"")),c.error.method="_execFileSync",c.error.program=a,c.error.args=n,c.error.extMessage=p,c.error.exitCode=+f),si.unlinkSync(h),si.unlinkSync(E),si.unlinkSync(C),si.unlinkSync(S),c}function _ct(t){var e,r={},s,a={env:process.env,encoding:t.encoding};if(Y0||(Pm?process.env.PSModulePath?(Y0="powershell.exe",sF=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(Y0="cscript.exe",sF=["//nologo",__dirname+"\\read.cs.js"]):(Y0="/bin/sh",sF=[__dirname+"/read.sh"])),Pm&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),I5.execFileSync){e=nEe(t),sS&&sS("execFileSync",e);try{r.input=I5.execFileSync(Y0,e,a)}catch(n){s=n.stderr?(n.stderr+"").trim():"",r.error=new Error(tEe+(s?` -`+s:"")),r.error.method="execFileSync",r.error.program=Y0,r.error.args=e,r.error.extMessage=s,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=Uct(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function B5(t){var e="",r=t.display,s=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=_ct(t);if(n.error)throw n.error;return n.input}return w5&&w5(t),function(){var n,c,f;function p(){return n||(n=process.binding("fs"),c=process.binding("constants")),n}if(typeof Zp=="string")if(Zp=null,Pm){if(f=function(h){var E=h.replace(/^\D+/,"").split("."),C=0;return(E[0]=+E[0])&&(C+=E[0]*1e4),(E[1]=+E[1])&&(C+=E[1]*100),(E[2]=+E[2])&&(C+=E[2]),C}(process.version),!(f>=20302&&f<40204||f>=5e4&&f<50100||f>=50600&&f<60200)&&process.stdin.isTTY)process.stdin.pause(),Zp=process.stdin.fd,VC=process.stdin._handle;else try{Zp=p().open("CONIN$",c.O_RDWR,parseInt("0666",8)),VC=new $ye(Zp,!0)}catch{}if(process.stdout.isTTY)Xu=process.stdout.fd;else{try{Xu=si.openSync("\\\\.\\CON","w")}catch{}if(typeof Xu!="number")try{Xu=p().open("CONOUT$",c.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{Zp=si.openSync("/dev/tty","r"),VC=process.stdin._handle}catch{}}else try{Zp=si.openSync("/dev/tty","r"),VC=new $ye(Zp,!1)}catch{}if(process.stdout.isTTY)Xu=process.stdout.fd;else try{Xu=si.openSync("/dev/tty","w")}catch{}}}(),function(){var n,c,f=!t.hideEchoBack&&!t.keyIn,p,h,E,C,S;oF="";function b(I){return I===eEe?!0:VC.setRawMode(I)!==0?!1:(eEe=I,!0)}if(rEe||!VC||typeof Xu!="number"&&(t.display||!f)){e=a();return}if(t.display&&(si.writeSync(Xu,t.display),t.display=""),!t.displayOnly){if(!b(!f)){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&&(c=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){E=0;try{E=si.readSync(Zp,p,0,h)}catch(I){if(I.code!=="EOF"){b(!1),e+=a();return}}if(E>0?(C=p.toString(t.encoding,0,E),oF+=C):(C=` -`,oF+="\0"),C&&typeof(S=(C.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(C=S,n=!0),C&&(C=C.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),C&&c&&(C=C.replace(c,"")),C&&(f||(t.hideEchoBack?t.mask&&si.writeSync(Xu,new Array(C.length+1).join(t.mask)):si.writeSync(Xu,C)),e+=C),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!f&&!s&&si.writeSync(Xu,` -`),b(!1)}}(),t.print&&!s&&t.print(r+(t.displayOnly?"":(t.hideEchoBack?new Array(e.length+1).join(t.mask):e)+` -`),t.encoding),t.displayOnly?"":D5=t.keepWhitespace||t.keyIn?e:e.trim()}function Hct(t,e){var r=[];function s(a){a!=null&&(Array.isArray(a)?a.forEach(s):(!e||e(a))&&r.push(a))}return s(t),r}function P5(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function Vs(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(C5),t.unshift(C5))),t.reduce(function(s,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 c;if(a.hasOwnProperty(n))switch(c=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":c=c!=null?c+"":"",c&&n!=="limitMessage"&&(c=c.replace(/[\r\n]/g,"")),s[n]=c;break;case"bufferSize":!isNaN(c=parseInt(c,10))&&typeof c=="number"&&(s[n]=c);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":s[n]=!!c;break;case"limit":case"trueValue":case"falseValue":s[n]=Hct(c,function(f){var p=typeof f;return p==="string"||p==="number"||p==="function"||f instanceof RegExp}).map(function(f){return typeof f=="string"?f.replace(/[\r\n]/g,""):f});break;case"print":case"phContent":case"preCheck":s[n]=typeof c=="function"?c:void 0;break;case"prompt":case"display":s[n]=c??"";break}})),s},{})}function v5(t,e,r){return e.some(function(s){var a=typeof s;return a==="string"?r?t===s:t.toLowerCase()===s.toLowerCase():a==="number"?parseFloat(t)===s:a==="function"?s(t):s instanceof RegExp?s.test(t):!1})}function b5(t,e){var r=V0.normalize(Pm?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=V0.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+P5(r)+"(?=\\/|\\\\|$)",Pm?"i":""),"~")}function JC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",s=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(c,f,p,h,E,C){var S;return f||typeof(S=e(E))!="string"?p:S?(h||"")+S+(C||""):""}return t.replace(s,n).replace(a,n)}function iEe(t,e,r){var s,a=[],n=-1,c=0,f="",p;function h(E,C){return C.length>3?(E.push(C[0]+"..."+C[C.length-1]),p=!0):C.length&&(E=E.concat(C)),E}return s=t.reduce(function(E,C){return E.concat((C+"").split(""))},[]).reduce(function(E,C){var S,b;return e||(C=C.toLowerCase()),S=/^\d$/.test(C)?1:/^[A-Z]$/.test(C)?2:/^[a-z]$/.test(C)?3:0,r&&S===0?f+=C:(b=C.charCodeAt(0),S&&S===n&&b===c+1?a.push(C):(E=h(E,a),a=[C],n=S),c=b),E},[]),s=h(s,a),f&&(s.push(f),p=!0),{values:s,suppressed:p}}function sEe(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function oEe(t,e){var r,s,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":s=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=iEe(s,e.caseSensitive),s=a.values):s=s.filter(function(c){var f=typeof c;return f==="string"||f==="number"}),r=sEe(s,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=D5;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=V0.basename(r):t==="cwdHome"&&(r=b5(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(c){return c.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=Dm[Dm.length-n]||"")}return r}function aEe(t){var e=/^(.)-(.)$/.exec(t),r="",s,a,n,c;if(!e)return null;for(s=e[1].charCodeAt(0),a=e[2].charCodeAt(0),c=s -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"?s+"..."+a:null}}),c,f,p,h,E,C,S;for(e=e||{},c=JC(e.charlist?e.charlist+"":"$",aEe),(isNaN(s=parseInt(e.min,10))||typeof s!="number")&&(s=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+P5(c)+"]{"+s+","+a+"}$"),r=iEe([c],n.caseSensitive,!0),r.text=sEe(r.values,r.suppressed),f=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;!S;)n.limit=h,n.limitMessage=E,C=$r.question(t,n),n.limit=[C,""],n.limitMessage=p,S=$r.question(f,n);return C};function uEe(t,e,r){var s;function a(n){return s=r(n),!isNaN(s)&&typeof s=="number"}return $r.question(t,Vs({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),s}$r.questionInt=function(t,e){return uEe(t,e,function(r){return parseInt(r,10)})};$r.questionFloat=function(t,e){return uEe(t,e,parseFloat)};$r.questionPath=function(t,e){var r,s="",a=Vs({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var c,f,p;n=b5(n,!0),s="";function h(E){E.split(/\/|\\/).reduce(function(C,S){var b=V0.resolve(C+=S+V0.sep);if(!si.existsSync(b))si.mkdirSync(b);else if(!si.statSync(b).isDirectory())throw new Error("Non directory already exists: "+b);return C},"")}try{if(c=si.existsSync(n),r=c?si.realpathSync(n):V0.resolve(n),!e.hasOwnProperty("exists")&&!c||typeof e.exists=="boolean"&&e.exists!==c)return s=(c?"Already exists":"No such file or directory")+": "+r,!1;if(!c&&e.create&&(e.isDirectory?h(r):(h(V0.dirname(r)),si.closeSync(si.openSync(r,"w"))),r=si.realpathSync(r)),c&&(e.min||e.max||e.isFile||e.isDirectory)){if(f=si.statSync(r),e.isFile&&!f.isFile())return s="Not file: "+r,!1;if(e.isDirectory&&!f.isDirectory())return s="Not directory: "+r,!1;if(e.min&&f.size<+e.min||e.max&&f.size>+e.max)return s="Size "+f.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(s=p),!1}catch(E){return s=E+"",!1}return!0},phContent:function(n){return n==="error"?s:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),$r.question(t,a),r};function fEe(t,e){var r={},s={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(s[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=S5(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&s.hasOwnProperty(n)?s[n].apply(a,r.args.slice(1)):s.hasOwnProperty("_")?s._.apply(a,r.args):null,{res:a,forceNext:!1}},s.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),s.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=S5(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}$r.promptCL=function(t,e){var r=Vs({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),s=fEe(t,r);return r.limit=s.limit,r.preCheck=s.preCheck,$r.prompt(r),s.args};$r.promptLoop=function(t,e){for(var r=Vs({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t($r.prompt(r)););};$r.promptCLLoop=function(t,e){var r=Vs({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),s=fEe(t,r);for(r.limit=s.limit,r.preCheck=s.preCheck;$r.prompt(r),!s.hRes;);};$r.promptSimShell=function(t){return $r.prompt(Vs({hideEchoBack:!1,history:!0},t,{prompt:function(){return Pm?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function AEe(t,e,r){var s;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),s=$r.keyIn(t,Vs(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof s=="boolean"?s:""}$r.keyInYN=function(t,e){return AEe(t,e)};$r.keyInYNStrict=function(t,e){return AEe(t,e,"yn")};$r.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),$r.keyIn(t,Vs({limit:null},e,{hideEchoBack:!0,mask:""}))};$r.keyInSelect=function(t,e,r){var s=Vs({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={},c=49,f=` -`;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(c);a+=E,n[E]=h,f+="["+E+"] "+(p+"").trim()+` -`,c=c===57?97:c+1}),(!r||r.cancel!==!1)&&(a+="0",n[0]=-1,f+="[0] "+(r&&r.cancel!=null&&typeof r.cancel!="boolean"?(r.cancel+"").trim():"CANCEL")+` -`),s.limit=a,f+=` -`,e==null&&(e="Choose one from list: "),(e+="")&&((!r||r.guide!==!1)&&(e=e.replace(/\s*:?\s*$/,"")+" [$]: "),f+=e),n[$r.keyIn(f,s).toLowerCase()]};$r.getRawInput=function(){return oF};function oS(t,e){var r;return e.length&&(r={},r[t]=e[0]),$r.setDefaultOptions(r)[t]}$r.setPrint=function(){return oS("print",arguments)};$r.setPrompt=function(){return oS("prompt",arguments)};$r.setEncoding=function(){return oS("encoding",arguments)};$r.setMask=function(){return oS("mask",arguments)};$r.setBufferSize=function(){return oS("bufferSize",arguments)}});var x5=_((BYt,ec)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(w,P,y){var F=tau_file_system.files[w];if(!F){if(y==="read")return null;F={path:w,text:"",type:P,get:function(z,Z){return Z===this.text.length||Z>this.text.length?"end_of_file":this.text.substring(Z,Z+z)},put:function(z,Z){return Z==="end_of_file"?(this.text+=z,!0):Z==="past_end_of_file"?null:(this.text=this.text.substring(0,Z)+z+this.text.substring(Z+z.length),!0)},get_byte:function(z){if(z==="end_of_stream")return-1;var Z=Math.floor(z/2);if(this.text.length<=Z)return-1;var $=n(this.text[Math.floor(z/2)],0);return z%2===0?$&255:$/256>>>0},put_byte:function(z,Z){var $=Z==="end_of_stream"?this.text.length:Math.floor(Z/2);if(this.text.length<$)return null;var oe=this.text.length===$?-1:n(this.text[Math.floor(Z/2)],0);return Z%2===0?(oe=oe/256>>>0,oe=(oe&255)<<8|z&255):(oe=oe&255,oe=(z&255)<<8|oe&255),this.text.length===$?this.text+=c(oe):this.text=this.text.substring(0,$)+c(oe)+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[w]=F}return y==="write"&&(F.text=""),F}},tau_user_input={buffer:"",get:function(w,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(w,P){return w.get_flag("char_conversion").id==="on"?P.replace(/./g,function(y){return w.get_char_conversion(y)}):P}function U(w){this.thread=w,this.text="",this.tokens=[]}U.prototype.set_last_tokens=function(w){return this.tokens=w},U.prototype.new_text=function(w){this.text=w,this.tokens=[]},U.prototype.get_tokens=function(w){var P,y=0,F=0,z=0,Z=[],$=!1;if(w){var oe=this.tokens[w-1];y=oe.len,P=N(this.thread,this.text.substr(oe.len)),F=oe.line,z=oe.start}else P=this.text;if(/^\s*$/.test(P))return null;for(;P!=="";){var xe=[],Re=!1;if(/^\n/.exec(P)!==null){F++,z=0,y++,P=P.replace(/\n/,""),$=!0;continue}for(var lt in T)if(T.hasOwnProperty(lt)){var Ct=T[lt].exec(P);Ct&&xe.push({value:Ct[0],name:lt,matches:Ct})}if(!xe.length)return this.set_last_tokens([{value:P,matches:[],name:"lexical",line:F,start:z}]);var oe=r(xe,function(br,Ir){return br.value.length>=Ir.value.length?br:Ir});switch(oe.start=z,oe.line=F,P=P.replace(oe.value,""),z+=oe.value.length,y+=oe.value.length,oe.name){case"atom":oe.raw=oe.value,oe.value.charAt(0)==="'"&&(oe.value=S(oe.value.substr(1,oe.value.length-2),"'"),oe.value===null&&(oe.name="lexical",oe.value="unknown escape sequence"));break;case"number":oe.float=oe.value.substring(0,2)!=="0x"&&oe.value.match(/[.eE]/)!==null&&oe.value!=="0'.",oe.value=I(oe.value),oe.blank=Re;break;case"string":var qt=oe.value.charAt(0);oe.value=S(oe.value.substr(1,oe.value.length-2),qt),oe.value===null&&(oe.name="lexical",oe.value="unknown escape sequence");break;case"whitespace":var ir=Z[Z.length-1];ir&&(ir.space=!0),Re=!0;continue;case"r_bracket":Z.length>0&&Z[Z.length-1].name==="l_bracket"&&(oe=Z.pop(),oe.name="atom",oe.value="{}",oe.raw="{}",oe.space=!1);break;case"r_brace":Z.length>0&&Z[Z.length-1].name==="l_brace"&&(oe=Z.pop(),oe.name="atom",oe.value="[]",oe.raw="[]",oe.space=!1);break}oe.len=y,Z.push(oe),Re=!1}var bt=this.set_last_tokens(Z);return bt.length===0?null:bt};function W(w,P,y,F,z){if(!P[y])return{type:f,value:x.error.syntax(P[y-1],"expression expected",!0)};var Z;if(F==="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 oe;switch(w.get_flag("double_quotes").id){case"atom":oe=new j($.value,[]);break;case"codes":oe=new j("[]",[]);for(var xe=$.value.length-1;xe>=0;xe--)oe=new j(".",[new x.type.Num(n($.value,xe),!1),oe]);break;case"chars":oe=new j("[]",[]);for(var xe=$.value.length-1;xe>=0;xe--)oe=new j(".",[new x.type.Term($.value.charAt(xe),[]),oe]);break}return{type:p,len:y+1,value:oe};case"l_paren":var bt=W(w,P,y+1,w.__get_max_priority(),!0);return bt.type!==p?bt:P[bt.len]&&P[bt.len].name==="r_paren"?(bt.len++,bt):{type:f,derived:!0,value:x.error.syntax(P[bt.len]?P[bt.len]:P[bt.len-1],") or operator expected",!P[bt.len])};case"l_bracket":var bt=W(w,P,y+1,w.__get_max_priority(),!0);return bt.type!==p?bt:P[bt.len]&&P[bt.len].name==="r_bracket"?(bt.len++,bt.value=new j("{}",[bt.value]),bt):{type:f,derived:!0,value:x.error.syntax(P[bt.len]?P[bt.len]:P[bt.len-1],"} or operator expected",!P[bt.len])}}var Re=ee(w,P,y,z);return Re.type===p||Re.derived||(Re=ie(w,P,y),Re.type===p||Re.derived)?Re:{type:f,derived:!1,value:x.error.syntax(P[y],"unexpected token")}}var lt=w.__get_max_priority(),Ct=w.__get_next_priority(F),qt=y;if(P[y].name==="atom"&&P[y+1]&&(P[y].space||P[y+1].name!=="l_paren")){var $=P[y++],ir=w.__lookup_operator_classes(F,$.value);if(ir&&ir.indexOf("fy")>-1){var bt=W(w,P,y,F,z);if(bt.type!==f)return $.value==="-"&&!$.space&&x.type.is_number(bt.value)?{value:new x.type.Num(-bt.value.value,bt.value.is_float),len:bt.len,type:p}:{value:new x.type.Term($.value,[bt.value]),len:bt.len,type:p};Z=bt}else if(ir&&ir.indexOf("fx")>-1){var bt=W(w,P,y,Ct,z);if(bt.type!==f)return{value:new x.type.Term($.value,[bt.value]),len:bt.len,type:p};Z=bt}}y=qt;var bt=W(w,P,y,Ct,z);if(bt.type===p){y=bt.len;var $=P[y];if(P[y]&&(P[y].name==="atom"&&w.__lookup_operator_classes(F,$.value)||P[y].name==="bar"&&w.__lookup_operator_classes(F,"|"))){var gn=Ct,br=F,ir=w.__lookup_operator_classes(F,$.value);if(ir.indexOf("xf")>-1)return{value:new x.type.Term($.value,[bt.value]),len:++bt.len,type:p};if(ir.indexOf("xfx")>-1){var Ir=W(w,P,y+1,gn,z);return Ir.type===p?{value:new x.type.Term($.value,[bt.value,Ir.value]),len:Ir.len,type:p}:(Ir.derived=!0,Ir)}else if(ir.indexOf("xfy")>-1){var Ir=W(w,P,y+1,br,z);return Ir.type===p?{value:new x.type.Term($.value,[bt.value,Ir.value]),len:Ir.len,type:p}:(Ir.derived=!0,Ir)}else if(bt.type!==f)for(;;){y=bt.len;var $=P[y];if($&&$.name==="atom"&&w.__lookup_operator_classes(F,$.value)){var ir=w.__lookup_operator_classes(F,$.value);if(ir.indexOf("yf")>-1)bt={value:new x.type.Term($.value,[bt.value]),len:++y,type:p};else if(ir.indexOf("yfx")>-1){var Ir=W(w,P,++y,gn,z);if(Ir.type===f)return Ir.derived=!0,Ir;y=Ir.len,bt={value:new x.type.Term($.value,[bt.value,Ir.value]),len:y,type:p}}else break}else break}}else Z={type:f,value:x.error.syntax(P[bt.len-1],"operator expected")};return bt}return bt}function ee(w,P,y,F){if(!P[y]||P[y].name==="atom"&&P[y].raw==="."&&!F&&(P[y].space||!P[y+1]||P[y+1].name!=="l_paren"))return{type:f,derived:!1,value:x.error.syntax(P[y-1],"unfounded token")};var z=P[y],Z=[];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,Z)};if(P[y]&&P[y].name==="l_paren"){if(P[y+1]&&P[y+1].name==="r_paren")return{type:f,derived:!0,value:x.error.syntax(P[y+1],"argument expected")};var $=W(w,P,++y,"999",!0);if($.type===f)return $.derived?$:{type:f,derived:!0,value:x.error.syntax(P[y]?P[y]:P[y-1],"argument expected",!P[y])};for(Z.push($.value),y=$.len;P[y]&&P[y].name==="atom"&&P[y].value===",";){if($=W(w,P,y+1,"999",!0),$.type===f)return $.derived?$:{type:f,derived:!0,value:x.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};Z.push($.value),y=$.len}if(P[y]&&P[y].name==="r_paren")y++;else return{type:f,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,Z)}}return{type:f,derived:!1,value:x.error.syntax(P[y],"term expected")}}function ie(w,P,y){if(!P[y])return{type:f,derived:!1,value:x.error.syntax(P[y-1],"[ expected")};if(P[y]&&P[y].name==="l_brace"){var F=W(w,P,++y,"999",!0),z=[F.value],Z=void 0;if(F.type===f)return P[y]&&P[y].name==="r_brace"?{type:p,len:y+1,value:new x.type.Term("[]",[])}:{type:f,derived:!0,value:x.error.syntax(P[y],"] expected")};for(y=F.len;P[y]&&P[y].name==="atom"&&P[y].value===",";){if(F=W(w,P,y+1,"999",!0),F.type===f)return F.derived?F:{type:f,derived:!0,value:x.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};z.push(F.value),y=F.len}var $=!1;if(P[y]&&P[y].name==="bar"){if($=!0,F=W(w,P,y+1,"999",!0),F.type===f)return F.derived?F:{type:f,derived:!0,value:x.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};Z=F.value,y=F.len}return P[y]&&P[y].name==="r_brace"?{type:p,len:y+1,value:g(z,Z)}:{type:f,derived:!0,value:x.error.syntax(P[y]?P[y]:P[y-1],$?"] expected":", or | or ] expected",!P[y])}}return{type:f,derived:!1,value:x.error.syntax(P[y],"list expected")}}function ue(w,P,y){var F=P[y].line,z=W(w,P,y,w.__get_max_priority(),!1),Z=null,$;if(z.type!==f)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"?(Z=new x.type.Rule(z.value.args[0],Ce(z.value.args[1])),$={value:Z,len:y,type:p}):z.value.indicator==="-->/2"?(Z=pe(new x.type.Rule(z.value.args[0],z.value.args[1]),w),Z.body=Ce(Z.body),$={value:Z,len:y,type:x.type.is_rule(Z)?p:f}):(Z=new x.type.Rule(z.value,null),$={value:Z,len:y,type:p}),Z){var oe=Z.singleton_variables();oe.length>0&&w.throw_warning(x.warning.singleton(oe,Z.head.indicator,F))}return $}else return{type:f,value:x.error.syntax(P[y],"callable expected")};else return{type:f,value:x.error.syntax(P[y]?P[y]:P[y-1],". or operator expected")};return z}function le(w,P,y){y=y||{},y.from=y.from?y.from:"$tau-js",y.reconsult=y.reconsult!==void 0?y.reconsult:!0;var F=new U(w),z={},Z;F.new_text(P);var $=0,oe=F.get_tokens($);do{if(oe===null||!oe[$])break;var xe=ue(w,oe,$);if(xe.type===f)return new j("throw",[xe.value]);if(xe.value.body===null&&xe.value.head.indicator==="?-/1"){var Re=new it(w.session);Re.add_goal(xe.value.head.args[0]),Re.answer(function(Ct){x.type.is_error(Ct)?w.throw_warning(Ct.args[0]):(Ct===!1||Ct===null)&&w.throw_warning(x.warning.failed_goal(xe.value.head.args[0],xe.len))}),$=xe.len;var lt=!0}else if(xe.value.body===null&&xe.value.head.indicator===":-/1"){var lt=w.run_directive(xe.value.head.args[0]);$=xe.len,xe.value.head.args[0].indicator==="char_conversion/2"&&(oe=F.get_tokens($),$=0)}else{Z=xe.value.head.indicator,y.reconsult!==!1&&z[Z]!==!0&&!w.is_multifile_predicate(Z)&&(w.session.rules[Z]=a(w.session.rules[Z]||[],function(qt){return qt.dynamic}),z[Z]=!0);var lt=w.add_rule(xe.value,y);$=xe.len}if(!lt)return lt}while(!0);return!0}function me(w,P){var y=new U(w);y.new_text(P);var F=0;do{var z=y.get_tokens(F);if(z===null)break;var Z=W(w,z,0,w.__get_max_priority(),!1);if(Z.type!==f){var $=Z.len,oe=$;if(z[$]&&z[$].name==="atom"&&z[$].raw===".")w.add_goal(Ce(Z.value));else{var xe=z[$];return new j("throw",[x.error.syntax(xe||z[$-1],". or operator expected",!xe)])}F=Z.len+1}else return new j("throw",[Z.value])}while(!0);return!0}function pe(w,P){w=w.rename(P);var y=P.next_free_variable(),F=Be(w.body,y,P);return F.error?F.value:(w.body=F.value,w.head.args=w.head.args.concat([y,F.variable]),w.head=new j(w.head.id,w.head.args),w)}function Be(w,P,y){var F;if(x.type.is_term(w)&&w.indicator==="!/0")return{value:w,variable:P,error:!1};if(x.type.is_term(w)&&w.indicator===",/2"){var z=Be(w.args[0],P,y);if(z.error)return z;var Z=Be(w.args[1],z.variable,y);return Z.error?Z:{value:new j(",",[z.value,Z.value]),variable:Z.variable,error:!1}}else{if(x.type.is_term(w)&&w.indicator==="{}/1")return{value:w.args[0],variable:P,error:!1};if(x.type.is_empty_list(w))return{value:new j("true",[]),variable:P,error:!1};if(x.type.is_list(w)){F=y.next_free_variable();for(var $=w,oe;$.indicator==="./2";)oe=$,$=$.args[1];return x.type.is_variable($)?{value:x.error.instantiation("DCG"),variable:P,error:!0}:x.type.is_empty_list($)?(oe.args[1]=F,{value:new j("=",[P,w]),variable:F,error:!1}):{value:x.error.type("list",w,"DCG"),variable:P,error:!0}}else return x.type.is_callable(w)?(F=y.next_free_variable(),w.args=w.args.concat([P,F]),w=new j(w.id,w.args),{value:w,variable:F,error:!1}):{value:x.error.type("callable",w,"DCG"),variable:P,error:!0}}}function Ce(w){return x.type.is_variable(w)?new j("call",[w]):x.type.is_term(w)&&[",/2",";/2","->/2"].indexOf(w.indicator)!==-1?new j(w.id,[Ce(w.args[0]),Ce(w.args[1])]):w}function g(w,P){for(var y=P||new x.type.Term("[]",[]),F=w.length-1;F>=0;F--)y=new x.type.Term(".",[w[F],y]);return y}function we(w,P){for(var y=w.length-1;y>=0;y--)w[y]===P&&w.splice(y,1)}function ye(w){for(var P={},y=[],F=0;F=0;P--)if(w.charAt(P)==="/")return new j("/",[new j(w.substring(0,P)),new Te(parseInt(w.substring(P+1)),!1)])}function De(w){this.id=w}function Te(w,P){this.is_float=P!==void 0?P:parseInt(w)!==w,this.value=this.is_float?w:parseInt(w)}var mt=0;function j(w,P,y){this.ref=y||++mt,this.id=w,this.args=P||[],this.indicator=w+"/"+this.args.length}var rt=0;function Fe(w,P,y,F,z,Z){this.id=rt++,this.stream=w,this.mode=P,this.alias=y,this.type=F!==void 0?F:"text",this.reposition=z!==void 0?z:!0,this.eof_action=Z!==void 0?Z:"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 Ne(w){w=w||{},this.links=w}function be(w,P,y){P=P||new Ne,y=y||null,this.goal=w,this.substitution=P,this.parent=y}function Ve(w,P,y){this.head=w,this.body=P,this.dynamic=y||!1}function ke(w){w=w===void 0||w<=0?1e3:w,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new it(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=w,this.streams={user_input:new Fe(typeof ec<"u"&&ec.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Fe(typeof ec<"u"&&ec.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof ec<"u"&&ec.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 it(w){this.epoch=Date.now(),this.session=w,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 Ue(w,P,y){this.id=w,this.rules=P,this.exports=y,x.module[w]=this}Ue.prototype.exports_predicate=function(w){return this.exports.indexOf(w)!==-1},De.prototype.unify=function(w,P){if(P&&e(w.variables(),this.id)!==-1&&!x.type.is_variable(w))return null;var y={};return y[this.id]=w,new Ne(y)},Te.prototype.unify=function(w,P){return x.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float?new Ne:null},j.prototype.unify=function(w,P){if(x.type.is_term(w)&&this.indicator===w.indicator){for(var y=new Ne,F=0;F=0){var F=this.args[0].value,z=Math.floor(F/26),Z=F%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[Z]+(z!==0?z:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(w)+"}";case"./2":for(var $="["+this.args[0].toString(w),oe=this.args[1];oe.indicator==="./2";)$+=", "+oe.args[0].toString(w),oe=oe.args[1];return oe.indicator!=="[]/0"&&($+="|"+oe.toString(w)),$+="]",$;case",/2":return"("+this.args[0].toString(w)+", "+this.args[1].toString(w)+")";default:var xe=this.id,Re=w.session?w.session.lookup_operator(this.id,this.args.length):null;if(w.session===void 0||w.ignore_ops||Re===null)return w.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(xe)&&xe!=="{}"&&xe!=="[]"&&(xe="'"+b(xe)+"'"),xe+(this.args.length?"("+s(this.args,function(ir){return ir.toString(w)}).join(", ")+")":"");var lt=Re.priority>P.priority||Re.priority===P.priority&&(Re.class==="xfy"&&this.indicator!==P.indicator||Re.class==="yfx"&&this.indicator!==P.indicator||this.indicator===P.indicator&&Re.class==="yfx"&&y==="right"||this.indicator===P.indicator&&Re.class==="xfy"&&y==="left");Re.indicator=this.indicator;var Ct=lt?"(":"",qt=lt?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Re.class)!==-1?Ct+xe+" "+this.args[0].toString(w,Re)+qt:["yf","xf"].indexOf(Re.class)!==-1?Ct+this.args[0].toString(w,Re)+" "+xe+qt:Ct+this.args[0].toString(w,Re,"left")+" "+this.id+" "+this.args[1].toString(w,Re,"right")+qt}},Fe.prototype.toString=function(w){return"("+this.id+")"},Ne.prototype.toString=function(w){var P="{";for(var y in this.links)this.links.hasOwnProperty(y)&&(P!=="{"&&(P+=", "),P+=y+"/"+this.links[y].toString(w));return P+="}",P},be.prototype.toString=function(w){return this.goal===null?"<"+this.substitution.toString(w)+">":"<"+this.goal.toString(w)+", "+this.substitution.toString(w)+">"},Ve.prototype.toString=function(w){return this.body?this.head.toString(w)+" :- "+this.body.toString(w)+".":this.head.toString(w)+"."},ke.prototype.toString=function(w){for(var P="",y=0;y=0;z--)F=new j(".",[P[z],F]);return F}return new j(this.id,s(this.args,function(Z){return Z.apply(w)}),this.ref)},Fe.prototype.apply=function(w){return this},Ve.prototype.apply=function(w){return new Ve(this.head.apply(w),this.body!==null?this.body.apply(w):null)},Ne.prototype.apply=function(w){var P,y={};for(P in this.links)this.links.hasOwnProperty(P)&&(y[P]=this.links[P].apply(w));return new Ne(y)},j.prototype.select=function(){for(var w=this;w.indicator===",/2";)w=w.args[0];return w},j.prototype.replace=function(w){return this.indicator===",/2"?this.args[0].indicator===",/2"?new j(",",[this.args[0].replace(w),this.args[1]]):w===null?this.args[1]:new j(",",[w,this.args[1]]):w},j.prototype.search=function(w){if(x.type.is_term(w)&&w.ref!==void 0&&this.ref===w.ref)return!0;for(var P=0;PP&&F0&&(P=this.head_point().substitution.domain());e(P,x.format_variable(this.session.rename))!==-1;)this.session.rename++;if(w.id==="_")return new De(x.format_variable(this.session.rename));this.session.renamed_variables[w.id]=x.format_variable(this.session.rename)}return new De(this.session.renamed_variables[w.id])},ke.prototype.next_free_variable=function(){return this.thread.next_free_variable()},it.prototype.next_free_variable=function(){this.session.rename++;var w=[];for(this.points.length>0&&(w=this.head_point().substitution.domain());e(w,x.format_variable(this.session.rename))!==-1;)this.session.rename++;return new De(x.format_variable(this.session.rename))},ke.prototype.is_public_predicate=function(w){return!this.public_predicates.hasOwnProperty(w)||this.public_predicates[w]===!0},it.prototype.is_public_predicate=function(w){return this.session.is_public_predicate(w)},ke.prototype.is_multifile_predicate=function(w){return this.multifile_predicates.hasOwnProperty(w)&&this.multifile_predicates[w]===!0},it.prototype.is_multifile_predicate=function(w){return this.session.is_multifile_predicate(w)},ke.prototype.prepend=function(w){return this.thread.prepend(w)},it.prototype.prepend=function(w){for(var P=w.length-1;P>=0;P--)this.points.push(w[P])},ke.prototype.success=function(w,P){return this.thread.success(w,P)},it.prototype.success=function(w,y){var y=typeof y>"u"?w:y;this.prepend([new be(w.goal.replace(null),w.substitution,y)])},ke.prototype.throw_error=function(w){return this.thread.throw_error(w)},it.prototype.throw_error=function(w){this.prepend([new be(new j("throw",[w]),new Ne,null,null)])},ke.prototype.step_rule=function(w,P){return this.thread.step_rule(w,P)},it.prototype.step_rule=function(w,P){var y=P.indicator;if(w==="user"&&(w=null),w===null&&this.session.rules.hasOwnProperty(y))return this.session.rules[y];for(var F=w===null?this.session.modules:e(this.session.modules,w)===-1?[]:[w],z=0;z1)&&this.again()},ke.prototype.answers=function(w,P,y){return this.thread.answers(w,P,y)},it.prototype.answers=function(w,P,y){var F=P||1e3,z=this;if(P<=0){y&&y();return}this.answer(function(Z){w(Z),Z!==!1?setTimeout(function(){z.answers(w,P-1,y)},1):y&&y()})},ke.prototype.again=function(w){return this.thread.again(w)},it.prototype.again=function(w){for(var P,y=Date.now();this.__calls.length>0;){for(this.warnings=[],w!==!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 F=Date.now();this.cpu_time_last=F-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))}},ke.prototype.unfold=function(w){if(w.body===null)return!1;var P=w.head,y=w.body,F=y.select(),z=new it(this),Z=[];z.add_goal(F),z.step();for(var $=z.points.length-1;$>=0;$--){var oe=z.points[$],xe=P.apply(oe.substitution),Re=y.replace(oe.goal);Re!==null&&(Re=Re.apply(oe.substitution)),Z.push(new Ve(xe,Re))}var lt=this.rules[P.indicator],Ct=e(lt,w);return Z.length>0&&Ct!==-1?(lt.splice.apply(lt,[Ct,1].concat(Z)),!0):!1},it.prototype.unfold=function(w){return this.session.unfold(w)},De.prototype.interpret=function(w){return x.error.instantiation(w.level)},Te.prototype.interpret=function(w){return this},j.prototype.interpret=function(w){return x.type.is_unitary_list(this)?this.args[0].interpret(w):x.operate(w,this)},De.prototype.compare=function(w){return this.idw.id?1:0},Te.prototype.compare=function(w){if(this.value===w.value&&this.is_float===w.is_float)return 0;if(this.valuew.value)return 1},j.prototype.compare=function(w){if(this.args.lengthw.args.length||this.args.length===w.args.length&&this.id>w.id)return 1;for(var P=0;PF)return 1;if(w.constructor===Te){if(w.is_float&&P.is_float)return 0;if(w.is_float)return-1;if(P.is_float)return 1}return 0},is_substitution:function(w){return w instanceof Ne},is_state:function(w){return w instanceof be},is_rule:function(w){return w instanceof Ve},is_variable:function(w){return w instanceof De},is_stream:function(w){return w instanceof Fe},is_anonymous_var:function(w){return w instanceof De&&w.id==="_"},is_callable:function(w){return w instanceof j},is_number:function(w){return w instanceof Te},is_integer:function(w){return w instanceof Te&&!w.is_float},is_float:function(w){return w instanceof Te&&w.is_float},is_term:function(w){return w instanceof j},is_atom:function(w){return w instanceof j&&w.args.length===0},is_ground:function(w){if(w instanceof De)return!1;if(w instanceof j){for(var P=0;P0},is_list:function(w){return w instanceof j&&(w.indicator==="[]/0"||w.indicator==="./2")},is_empty_list:function(w){return w instanceof j&&w.indicator==="[]/0"},is_non_empty_list:function(w){return w instanceof j&&w.indicator==="./2"},is_fully_list:function(w){for(;w instanceof j&&w.indicator==="./2";)w=w.args[1];return w instanceof De||w instanceof j&&w.indicator==="[]/0"},is_instantiated_list:function(w){for(;w instanceof j&&w.indicator==="./2";)w=w.args[1];return w instanceof j&&w.indicator==="[]/0"},is_unitary_list:function(w){return w instanceof j&&w.indicator==="./2"&&w.args[1]instanceof j&&w.args[1].indicator==="[]/0"},is_character:function(w){return w instanceof j&&(w.id.length===1||w.id.length>0&&w.id.length<=2&&n(w.id,0)>=65536)},is_character_code:function(w){return w instanceof Te&&!w.is_float&&w.value>=0&&w.value<=1114111},is_byte:function(w){return w instanceof Te&&!w.is_float&&w.value>=0&&w.value<=255},is_operator:function(w){return w instanceof j&&x.arithmetic.evaluation[w.indicator]},is_directive:function(w){return w instanceof j&&x.directive[w.indicator]!==void 0},is_builtin:function(w){return w instanceof j&&x.predicate[w.indicator]!==void 0},is_error:function(w){return w instanceof j&&w.indicator==="throw/1"},is_predicate_indicator:function(w){return w instanceof j&&w.indicator==="//2"&&w.args[0]instanceof j&&w.args[0].args.length===0&&w.args[1]instanceof Te&&w.args[1].is_float===!1},is_flag:function(w){return w instanceof j&&w.args.length===0&&x.flag[w.id]!==void 0},is_value_flag:function(w,P){if(!x.type.is_flag(w))return!1;for(var y in x.flag[w.id].allowed)if(x.flag[w.id].allowed.hasOwnProperty(y)&&x.flag[w.id].allowed[y].equals(P))return!0;return!1},is_io_mode:function(w){return x.type.is_atom(w)&&["read","write","append"].indexOf(w.id)!==-1},is_stream_option:function(w){return x.type.is_term(w)&&(w.indicator==="alias/1"&&x.type.is_atom(w.args[0])||w.indicator==="reposition/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="type/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary")||w.indicator==="eof_action/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))},is_stream_position:function(w){return x.type.is_integer(w)&&w.value>=0||x.type.is_atom(w)&&(w.id==="end_of_stream"||w.id==="past_end_of_stream")},is_stream_property:function(w){return x.type.is_term(w)&&(w.indicator==="input/0"||w.indicator==="output/0"||w.indicator==="alias/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="file_name/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="position/1"&&(x.type.is_variable(w.args[0])||x.type.is_stream_position(w.args[0]))||w.indicator==="reposition/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))||w.indicator==="type/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary"))||w.indicator==="mode/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="read"||w.args[0].id==="write"||w.args[0].id==="append"))||w.indicator==="eof_action/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))||w.indicator==="end_of_stream/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="at"||w.args[0].id==="past"||w.args[0].id==="not")))},is_streamable:function(w){return w.__proto__.stream!==void 0},is_read_option:function(w){return x.type.is_term(w)&&["variables/1","variable_names/1","singletons/1"].indexOf(w.indicator)!==-1},is_write_option:function(w){return x.type.is_term(w)&&(w.indicator==="quoted/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="ignore_ops/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="numbervars/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))},is_close_option:function(w){return x.type.is_term(w)&&w.indicator==="force/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")},is_modifiable_flag:function(w){return x.type.is_flag(w)&&x.flag[w.id].changeable},is_module:function(w){return w instanceof j&&w.indicator==="library/1"&&w.args[0]instanceof j&&w.args[0].args.length===0&&x.module[w.args[0].id]!==void 0}},arithmetic:{evaluation:{"e/0":{type_args:null,type_result:!0,fn:function(w){return Math.E}},"pi/0":{type_args:null,type_result:!0,fn:function(w){return Math.PI}},"tau/0":{type_args:null,type_result:!0,fn:function(w){return 2*Math.PI}},"epsilon/0":{type_args:null,type_result:!0,fn:function(w){return Number.EPSILON}},"+/1":{type_args:null,type_result:null,fn:function(w,P){return w}},"-/1":{type_args:null,type_result:null,fn:function(w,P){return-w}},"\\/1":{type_args:!1,type_result:!1,fn:function(w,P){return~w}},"abs/1":{type_args:null,type_result:null,fn:function(w,P){return Math.abs(w)}},"sign/1":{type_args:null,type_result:null,fn:function(w,P){return Math.sign(w)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(w,P){return parseInt(w)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(w,P){return w-parseInt(w)}},"float/1":{type_args:null,type_result:!0,fn:function(w,P){return parseFloat(w)}},"floor/1":{type_args:!0,type_result:!1,fn:function(w,P){return Math.floor(w)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(w,P){return parseInt(w)}},"round/1":{type_args:!0,type_result:!1,fn:function(w,P){return Math.round(w)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(w,P){return Math.ceil(w)}},"sin/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.sin(w)}},"cos/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.cos(w)}},"tan/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.tan(w)}},"asin/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.asin(w)}},"acos/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.acos(w)}},"atan/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.atan(w)}},"atan2/2":{type_args:null,type_result:!0,fn:function(w,P,y){return Math.atan2(w,P)}},"exp/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.exp(w)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.sqrt(w)}},"log/1":{type_args:null,type_result:!0,fn:function(w,P){return w>0?Math.log(w):x.error.evaluation("undefined",P.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(w,P,y){return w+P}},"-/2":{type_args:null,type_result:null,fn:function(w,P,y){return w-P}},"*/2":{type_args:null,type_result:null,fn:function(w,P,y){return w*P}},"//2":{type_args:null,type_result:!0,fn:function(w,P,y){return P?w/P:x.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(w,P,y){return P?parseInt(w/P):x.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(w,P,y){return Math.pow(w,P)}},"^/2":{type_args:null,type_result:null,fn:function(w,P,y){return Math.pow(w,P)}},"<>/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w>>P}},"/\\/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w&P}},"\\//2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w|P}},"xor/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w^P}},"rem/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return P?w%P:x.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return P?w-parseInt(w/P)*P:x.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(w,P,y){return Math.max(w,P)}},"min/2":{type_args:null,type_result:null,fn:function(w,P,y){return Math.min(w,P)}}}},directive:{"dynamic/1":function(w,P){var y=P.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(P.indicator));else if(!x.type.is_compound(y)||y.indicator!=="//2")w.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]))w.throw_error(x.error.instantiation(P.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],P.indicator));else if(!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],P.indicator));else{var F=P.args[0].args[0].id+"/"+P.args[0].args[1].value;w.session.public_predicates[F]=!0,w.session.rules[F]||(w.session.rules[F]=[])}},"multifile/1":function(w,P){var y=P.args[0];x.type.is_variable(y)?w.throw_error(x.error.instantiation(P.indicator)):!x.type.is_compound(y)||y.indicator!=="//2"?w.throw_error(x.error.type("predicate_indicator",y,P.indicator)):x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1])?w.throw_error(x.error.instantiation(P.indicator)):x.type.is_atom(y.args[0])?x.type.is_integer(y.args[1])?w.session.multifile_predicates[P.args[0].args[0].id+"/"+P.args[0].args[1].value]=!0:w.throw_error(x.error.type("integer",y.args[1],P.indicator)):w.throw_error(x.error.type("atom",y.args[0],P.indicator))},"set_prolog_flag/2":function(w,P){var y=P.args[0],F=P.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(P.indicator)):x.type.is_atom(y)?x.type.is_flag(y)?x.type.is_value_flag(y,F)?x.type.is_modifiable_flag(y)?w.session.flag[y.id]=F:w.throw_error(x.error.permission("modify","flag",y)):w.throw_error(x.error.domain("flag_value",new j("+",[y,F]),P.indicator)):w.throw_error(x.error.domain("prolog_flag",y,P.indicator)):w.throw_error(x.error.type("atom",y,P.indicator))},"use_module/1":function(w,P){var y=P.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(P.indicator));else if(!x.type.is_term(y))w.throw_error(x.error.type("term",y,P.indicator));else if(x.type.is_module(y)){var F=y.args[0].id;e(w.session.modules,F)===-1&&w.session.modules.push(F)}},"char_conversion/2":function(w,P){var y=P.args[0],F=P.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(P.indicator)):x.type.is_character(y)?x.type.is_character(F)?y.id===F.id?delete w.session.__char_conversion[y.id]:w.session.__char_conversion[y.id]=F.id:w.throw_error(x.error.type("character",F,P.indicator)):w.throw_error(x.error.type("character",y,P.indicator))},"op/3":function(w,P){var y=P.args[0],F=P.args[1],z=P.args[2];if(x.type.is_variable(y)||x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(P.indicator));else if(!x.type.is_integer(y))w.throw_error(x.error.type("integer",y,P.indicator));else if(!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,P.indicator));else if(!x.type.is_atom(z))w.throw_error(x.error.type("atom",z,P.indicator));else if(y.value<0||y.value>1200)w.throw_error(x.error.domain("operator_priority",y,P.indicator));else if(z.id===",")w.throw_error(x.error.permission("modify","operator",z,P.indicator));else if(z.id==="|"&&(y.value<1001||F.id.length!==3))w.throw_error(x.error.permission("modify","operator",z,P.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(F.id)===-1)w.throw_error(x.error.domain("operator_specifier",F,P.indicator));else{var Z={prefix:null,infix:null,postfix:null};for(var $ in w.session.__operators)if(w.session.__operators.hasOwnProperty($)){var oe=w.session.__operators[$][z.id];oe&&(e(oe,"fx")!==-1&&(Z.prefix={priority:$,type:"fx"}),e(oe,"fy")!==-1&&(Z.prefix={priority:$,type:"fy"}),e(oe,"xf")!==-1&&(Z.postfix={priority:$,type:"xf"}),e(oe,"yf")!==-1&&(Z.postfix={priority:$,type:"yf"}),e(oe,"xfx")!==-1&&(Z.infix={priority:$,type:"xfx"}),e(oe,"xfy")!==-1&&(Z.infix={priority:$,type:"xfy"}),e(oe,"yfx")!==-1&&(Z.infix={priority:$,type:"yfx"}))}var xe;switch(F.id){case"fy":case"fx":xe="prefix";break;case"yf":case"xf":xe="postfix";break;default:xe="infix";break}if(((Z.prefix&&xe==="prefix"||Z.postfix&&xe==="postfix"||Z.infix&&xe==="infix")&&Z[xe].type!==F.id||Z.infix&&xe==="postfix"||Z.postfix&&xe==="infix")&&y.value!==0)w.throw_error(x.error.permission("create","operator",z,P.indicator));else return Z[xe]&&(we(w.session.__operators[Z[xe].priority][z.id],F.id),w.session.__operators[Z[xe].priority][z.id].length===0&&delete w.session.__operators[Z[xe].priority][z.id]),y.value>0&&(w.session.__operators[y.value]||(w.session.__operators[y.value.toString()]={}),w.session.__operators[y.value][z.id]||(w.session.__operators[y.value][z.id]=[]),w.session.__operators[y.value][z.id].push(F.id)),!0}}},predicate:{"op/3":function(w,P,y){x.directive["op/3"](w,y)&&w.success(P)},"current_op/3":function(w,P,y){var F=y.args[0],z=y.args[1],Z=y.args[2],$=[];for(var oe in w.session.__operators)for(var xe in w.session.__operators[oe])for(var Re=0;Re/2"){var F=w.points,z=w.session.format_success,Z=w.session.format_error;w.session.format_success=function(Re){return Re.substitution},w.session.format_error=function(Re){return Re.goal},w.points=[new be(y.args[0].args[0],P.substitution,P)];var $=function(Re){w.points=F,w.session.format_success=z,w.session.format_error=Z,Re===!1?w.prepend([new be(P.goal.replace(y.args[1]),P.substitution,P)]):x.type.is_error(Re)?w.throw_error(Re.args[0]):Re===null?(w.prepend([P]),w.__calls.shift()(null)):w.prepend([new be(P.goal.replace(y.args[0].args[1]).apply(Re),P.substitution.apply(Re),P)])};w.__calls.unshift($)}else{var oe=new be(P.goal.replace(y.args[0]),P.substitution,P),xe=new be(P.goal.replace(y.args[1]),P.substitution,P);w.prepend([oe,xe])}},"!/0":function(w,P,y){var F,z,Z=[];for(F=P,z=null;F.parent!==null&&F.parent.goal.search(y);)if(z=F,F=F.parent,F.goal!==null){var $=F.goal.select();if($&&$.id==="call"&&$.search(y)){F=z;break}}for(var oe=w.points.length-1;oe>=0;oe--){for(var xe=w.points[oe],Re=xe.parent;Re!==null&&Re!==F.parent;)Re=Re.parent;Re===null&&Re!==F.parent&&Z.push(xe)}w.points=Z.reverse(),w.success(P)},"\\+/1":function(w,P,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(w.level)):x.type.is_callable(F)?w.prepend([new be(P.goal.replace(new j(",",[new j(",",[new j("call",[F]),new j("!",[])]),new j("fail",[])])),P.substitution,P),new be(P.goal.replace(null),P.substitution,P)]):w.throw_error(x.error.type("callable",F,w.level))},"->/2":function(w,P,y){var F=P.goal.replace(new j(",",[y.args[0],new j(",",[new j("!"),y.args[1]])]));w.prepend([new be(F,P.substitution,P)])},"fail/0":function(w,P,y){},"false/0":function(w,P,y){},"true/0":function(w,P,y){w.success(P)},"call/1":se(1),"call/2":se(2),"call/3":se(3),"call/4":se(4),"call/5":se(5),"call/6":se(6),"call/7":se(7),"call/8":se(8),"once/1":function(w,P,y){var F=y.args[0];w.prepend([new be(P.goal.replace(new j(",",[new j("call",[F]),new j("!",[])])),P.substitution,P)])},"forall/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new be(P.goal.replace(new j("\\+",[new j(",",[new j("call",[F]),new j("\\+",[new j("call",[z])])])])),P.substitution,P)])},"repeat/0":function(w,P,y){w.prepend([new be(P.goal.replace(null),P.substitution,P),P])},"throw/1":function(w,P,y){x.type.is_variable(y.args[0])?w.throw_error(x.error.instantiation(w.level)):w.throw_error(y.args[0])},"catch/3":function(w,P,y){var F=w.points;w.points=[],w.prepend([new be(y.args[0],P.substitution,P)]);var z=w.session.format_success,Z=w.session.format_error;w.session.format_success=function(oe){return oe.substitution},w.session.format_error=function(oe){return oe.goal};var $=function(oe){var xe=w.points;if(w.points=F,w.session.format_success=z,w.session.format_error=Z,x.type.is_error(oe)){for(var Re=[],lt=w.points.length-1;lt>=0;lt--){for(var ir=w.points[lt],Ct=ir.parent;Ct!==null&&Ct!==P.parent;)Ct=Ct.parent;Ct===null&&Ct!==P.parent&&Re.push(ir)}w.points=Re;var qt=w.get_flag("occurs_check").indicator==="true/0",ir=new be,bt=x.unify(oe.args[0],y.args[1],qt);bt!==null?(ir.substitution=P.substitution.apply(bt),ir.goal=P.goal.replace(y.args[2]).apply(bt),ir.parent=P,w.prepend([ir])):w.throw_error(oe.args[0])}else if(oe!==!1){for(var gn=oe===null?[]:[new be(P.goal.apply(oe).replace(null),P.substitution.apply(oe),P)],br=[],lt=xe.length-1;lt>=0;lt--){br.push(xe[lt]);var Ir=xe[lt].goal!==null?xe[lt].goal.select():null;if(x.type.is_term(Ir)&&Ir.indicator==="!/0")break}var Or=s(br,function(nn){return nn.goal===null&&(nn.goal=new j("true",[])),nn=new be(P.goal.replace(new j("catch",[nn.goal,y.args[1],y.args[2]])),P.substitution.apply(nn.substitution),nn.parent),nn.exclude=y.args[0].variables(),nn}).reverse();w.prepend(Or),w.prepend(gn),oe===null&&(this.current_limit=0,w.__calls.shift()(null))}};w.__calls.unshift($)},"=/2":function(w,P,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=new be,Z=x.unify(y.args[0],y.args[1],F);Z!==null&&(z.goal=P.goal.apply(Z).replace(null),z.substitution=P.substitution.apply(Z),z.parent=P,w.prepend([z]))},"unify_with_occurs_check/2":function(w,P,y){var F=new be,z=x.unify(y.args[0],y.args[1],!0);z!==null&&(F.goal=P.goal.apply(z).replace(null),F.substitution=P.substitution.apply(z),F.parent=P,w.prepend([F]))},"\\=/2":function(w,P,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[0],y.args[1],F);z===null&&w.success(P)},"subsumes_term/2":function(w,P,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[1],y.args[0],F);z!==null&&y.args[1].apply(z).equals(y.args[1])&&w.success(P)},"findall/3":function(w,P,y){var F=y.args[0],z=y.args[1],Z=y.args[2];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(z))w.throw_error(x.error.type("callable",z,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var $=w.next_free_variable(),oe=new j(",",[z,new j("=",[$,F])]),xe=w.points,Re=w.session.limit,lt=w.session.format_success;w.session.format_success=function(ir){return ir.substitution},w.add_goal(oe,!0,P);var Ct=[],qt=function(ir){if(ir!==!1&&ir!==null&&!x.type.is_error(ir))w.__calls.unshift(qt),Ct.push(ir.links[$.id]),w.session.limit=w.current_limit;else if(w.points=xe,w.session.limit=Re,w.session.format_success=lt,x.type.is_error(ir))w.throw_error(ir.args[0]);else if(w.current_limit>0){for(var bt=new j("[]"),gn=Ct.length-1;gn>=0;gn--)bt=new j(".",[Ct[gn],bt]);w.prepend([new be(P.goal.replace(new j("=",[Z,bt])),P.substitution,P)])}};w.__calls.unshift(qt)}},"bagof/3":function(w,P,y){var F,z=y.args[0],Z=y.args[1],$=y.args[2];if(x.type.is_variable(Z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(Z))w.throw_error(x.error.type("callable",Z,y.indicator));else if(!x.type.is_variable($)&&!x.type.is_list($))w.throw_error(x.error.type("list",$,y.indicator));else{var oe=w.next_free_variable(),xe;Z.indicator==="^/2"?(xe=Z.args[0].variables(),Z=Z.args[1]):xe=[],xe=xe.concat(z.variables());for(var Re=Z.variables().filter(function(Or){return e(xe,Or)===-1}),lt=new j("[]"),Ct=Re.length-1;Ct>=0;Ct--)lt=new j(".",[new De(Re[Ct]),lt]);var qt=new j(",",[Z,new j("=",[oe,new j(",",[lt,z])])]),ir=w.points,bt=w.session.limit,gn=w.session.format_success;w.session.format_success=function(Or){return Or.substitution},w.add_goal(qt,!0,P);var br=[],Ir=function(Or){if(Or!==!1&&Or!==null&&!x.type.is_error(Or)){w.__calls.unshift(Ir);var nn=!1,ai=Or.links[oe.id].args[0],Io=Or.links[oe.id].args[1];for(var ts in br)if(br.hasOwnProperty(ts)){var $s=br[ts];if($s.variables.equals(ai)){$s.answers.push(Io),nn=!0;break}}nn||br.push({variables:ai,answers:[Io]}),w.session.limit=w.current_limit}else if(w.points=ir,w.session.limit=bt,w.session.format_success=gn,x.type.is_error(Or))w.throw_error(Or.args[0]);else if(w.current_limit>0){for(var Co=[],Hi=0;Hi=0;wo--)eo=new j(".",[Or[wo],eo]);Co.push(new be(P.goal.replace(new j(",",[new j("=",[lt,br[Hi].variables]),new j("=",[$,eo])])),P.substitution,P))}w.prepend(Co)}};w.__calls.unshift(Ir)}},"setof/3":function(w,P,y){var F,z=y.args[0],Z=y.args[1],$=y.args[2];if(x.type.is_variable(Z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(Z))w.throw_error(x.error.type("callable",Z,y.indicator));else if(!x.type.is_variable($)&&!x.type.is_list($))w.throw_error(x.error.type("list",$,y.indicator));else{var oe=w.next_free_variable(),xe;Z.indicator==="^/2"?(xe=Z.args[0].variables(),Z=Z.args[1]):xe=[],xe=xe.concat(z.variables());for(var Re=Z.variables().filter(function(Or){return e(xe,Or)===-1}),lt=new j("[]"),Ct=Re.length-1;Ct>=0;Ct--)lt=new j(".",[new De(Re[Ct]),lt]);var qt=new j(",",[Z,new j("=",[oe,new j(",",[lt,z])])]),ir=w.points,bt=w.session.limit,gn=w.session.format_success;w.session.format_success=function(Or){return Or.substitution},w.add_goal(qt,!0,P);var br=[],Ir=function(Or){if(Or!==!1&&Or!==null&&!x.type.is_error(Or)){w.__calls.unshift(Ir);var nn=!1,ai=Or.links[oe.id].args[0],Io=Or.links[oe.id].args[1];for(var ts in br)if(br.hasOwnProperty(ts)){var $s=br[ts];if($s.variables.equals(ai)){$s.answers.push(Io),nn=!0;break}}nn||br.push({variables:ai,answers:[Io]}),w.session.limit=w.current_limit}else if(w.points=ir,w.session.limit=bt,w.session.format_success=gn,x.type.is_error(Or))w.throw_error(Or.args[0]);else if(w.current_limit>0){for(var Co=[],Hi=0;Hi=0;wo--)eo=new j(".",[Or[wo],eo]);Co.push(new be(P.goal.replace(new j(",",[new j("=",[lt,br[Hi].variables]),new j("=",[$,eo])])),P.substitution,P))}w.prepend(Co)}};w.__calls.unshift(Ir)}},"functor/3":function(w,P,y){var F,z=y.args[0],Z=y.args[1],$=y.args[2];if(x.type.is_variable(z)&&(x.type.is_variable(Z)||x.type.is_variable($)))w.throw_error(x.error.instantiation("functor/3"));else if(!x.type.is_variable($)&&!x.type.is_integer($))w.throw_error(x.error.type("integer",y.args[2],"functor/3"));else if(!x.type.is_variable(Z)&&!x.type.is_atomic(Z))w.throw_error(x.error.type("atomic",y.args[1],"functor/3"));else if(x.type.is_integer(Z)&&x.type.is_integer($)&&$.value!==0)w.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 oe=[],xe=0;xe<$.value;xe++)oe.push(w.next_free_variable());var Re=x.type.is_integer(Z)?Z:new j(Z.id,oe);w.prepend([new be(P.goal.replace(new j("=",[z,Re])),P.substitution,P)])}}else{var lt=x.type.is_integer(z)?z:new j(z.id,[]),Ct=x.type.is_integer(z)?new Te(0,!1):new Te(z.args.length,!1),qt=new j(",",[new j("=",[lt,Z]),new j("=",[Ct,$])]);w.prepend([new be(P.goal.replace(qt),P.substitution,P)])}},"arg/3":function(w,P,y){if(x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1]))w.throw_error(x.error.instantiation(y.indicator));else if(y.args[0].value<0)w.throw_error(x.error.domain("not_less_than_zero",y.args[0],y.indicator));else if(!x.type.is_compound(y.args[1]))w.throw_error(x.error.type("compound",y.args[1],y.indicator));else{var F=y.args[0].value;if(F>0&&F<=y.args[1].args.length){var z=new j("=",[y.args[1].args[F-1],y.args[2]]);w.prepend([new be(P.goal.replace(z),P.substitution,P)])}}},"=../2":function(w,P,y){var F;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])))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_fully_list(y.args[1]))w.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 Z=[];for(F=y.args[1].args[1];F.indicator==="./2";)Z.push(F.args[0]),F=F.args[1];x.type.is_variable(y.args[0])&&x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):Z.length===0&&x.type.is_compound(y.args[1].args[0])?w.throw_error(x.error.type("atomic",y.args[1].args[0],y.indicator)):Z.length>0&&(x.type.is_compound(y.args[1].args[0])||x.type.is_number(y.args[1].args[0]))?w.throw_error(x.error.type("atom",y.args[1].args[0],y.indicator)):Z.length===0?w.prepend([new be(P.goal.replace(new j("=",[y.args[1].args[0],y.args[0]],P)),P.substitution,P)]):w.prepend([new be(P.goal.replace(new j("=",[new j(y.args[1].args[0].id,Z),y.args[0]])),P.substitution,P)])}}else{if(x.type.is_atomic(y.args[0]))F=new j(".",[y.args[0],new j("[]")]);else{F=new j("[]");for(var z=y.args[0].args.length-1;z>=0;z--)F=new j(".",[y.args[0].args[z],F]);F=new j(".",[new j(y.args[0].id),F])}w.prepend([new be(P.goal.replace(new j("=",[F,y.args[1]])),P.substitution,P)])}},"copy_term/2":function(w,P,y){var F=y.args[0].rename(w);w.prepend([new be(P.goal.replace(new j("=",[F,y.args[1]])),P.substitution,P.parent)])},"term_variables/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(!x.type.is_fully_list(z))w.throw_error(x.error.type("list",z,y.indicator));else{var Z=g(s(ye(F.variables()),function($){return new De($)}));w.prepend([new be(P.goal.replace(new j("=",[z,Z])),P.substitution,P)])}},"clause/2":function(w,P,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.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]))w.throw_error(x.error.type("callable",y.args[1],y.indicator));else if(w.session.rules[y.args[0].indicator]!==void 0)if(w.is_public_predicate(y.args[0].indicator)){var F=[];for(var z in w.session.rules[y.args[0].indicator])if(w.session.rules[y.args[0].indicator].hasOwnProperty(z)){var Z=w.session.rules[y.args[0].indicator][z];w.session.renamed_variables={},Z=Z.rename(w),Z.body===null&&(Z.body=new j("true"));var $=new j(",",[new j("=",[Z.head,y.args[0]]),new j("=",[Z.body,y.args[1]])]);F.push(new be(P.goal.replace($),P.substitution,P))}w.prepend(F)}else w.throw_error(x.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(w,P,y){var F=y.args[0];if(!x.type.is_variable(F)&&(!x.type.is_compound(F)||F.indicator!=="//2"))w.throw_error(x.error.type("predicate_indicator",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[0])&&!x.type.is_atom(F.args[0]))w.throw_error(x.error.type("atom",F.args[0],y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[1])&&!x.type.is_integer(F.args[1]))w.throw_error(x.error.type("integer",F.args[1],y.indicator));else{var z=[];for(var Z in w.session.rules)if(w.session.rules.hasOwnProperty(Z)){var $=Z.lastIndexOf("/"),oe=Z.substr(0,$),xe=parseInt(Z.substr($+1,Z.length-($+1))),Re=new j("/",[new j(oe),new Te(xe,!1)]),lt=new j("=",[Re,F]);z.push(new be(P.goal.replace(lt),P.substitution,P))}w.prepend(z)}},"asserta/1":function(w,P,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Ce(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator]=[new Ve(F,z,!0)].concat(w.session.rules[F.indicator]),w.success(P)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"assertz/1":function(w,P,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Ce(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator].push(new Ve(F,z,!0)),w.success(P)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"retract/1":function(w,P,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;if(y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=y.args[0].args[1]):(F=y.args[0],z=new j("true")),typeof P.retract>"u")if(w.is_public_predicate(F.indicator)){if(w.session.rules[F.indicator]!==void 0){for(var Z=[],$=0;$w.get_flag("max_arity").value)w.throw_error(x.error.representation("max_arity",y.indicator));else{var F=y.args[0].args[0].id+"/"+y.args[0].args[1].value;w.is_public_predicate(F)?(delete w.session.rules[F],w.success(P)):w.throw_error(x.error.permission("modify","static_procedure",F,y.indicator))}},"atom_length/2":function(w,P,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_atom(y.args[0]))w.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]))w.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)w.throw_error(x.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var F=new Te(y.args[0].id.length,!1);w.prepend([new be(P.goal.replace(new j("=",[F,y.args[1]])),P.substitution,P)])}},"atom_concat/3":function(w,P,y){var F,z,Z=y.args[0],$=y.args[1],oe=y.args[2];if(x.type.is_variable(oe)&&(x.type.is_variable(Z)||x.type.is_variable($)))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_atom(Z))w.throw_error(x.error.type("atom",Z,y.indicator));else if(!x.type.is_variable($)&&!x.type.is_atom($))w.throw_error(x.error.type("atom",$,y.indicator));else if(!x.type.is_variable(oe)&&!x.type.is_atom(oe))w.throw_error(x.error.type("atom",oe,y.indicator));else{var xe=x.type.is_variable(Z),Re=x.type.is_variable($);if(!xe&&!Re)z=new j("=",[oe,new j(Z.id+$.id)]),w.prepend([new be(P.goal.replace(z),P.substitution,P)]);else if(xe&&!Re)F=oe.id.substr(0,oe.id.length-$.id.length),F+$.id===oe.id&&(z=new j("=",[Z,new j(F)]),w.prepend([new be(P.goal.replace(z),P.substitution,P)]));else if(Re&&!xe)F=oe.id.substr(Z.id.length),Z.id+F===oe.id&&(z=new j("=",[$,new j(F)]),w.prepend([new be(P.goal.replace(z),P.substitution,P)]));else{for(var lt=[],Ct=0;Ct<=oe.id.length;Ct++){var qt=new j(oe.id.substr(0,Ct)),ir=new j(oe.id.substr(Ct));z=new j(",",[new j("=",[qt,Z]),new j("=",[ir,$])]),lt.push(new be(P.goal.replace(z),P.substitution,P))}w.prepend(lt)}}},"sub_atom/5":function(w,P,y){var F,z=y.args[0],Z=y.args[1],$=y.args[2],oe=y.args[3],xe=y.args[4];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",Z,y.indicator));else if(!x.type.is_variable($)&&!x.type.is_integer($))w.throw_error(x.error.type("integer",$,y.indicator));else if(!x.type.is_variable(oe)&&!x.type.is_integer(oe))w.throw_error(x.error.type("integer",oe,y.indicator));else if(x.type.is_integer(Z)&&Z.value<0)w.throw_error(x.error.domain("not_less_than_zero",Z,y.indicator));else if(x.type.is_integer($)&&$.value<0)w.throw_error(x.error.domain("not_less_than_zero",$,y.indicator));else if(x.type.is_integer(oe)&&oe.value<0)w.throw_error(x.error.domain("not_less_than_zero",oe,y.indicator));else{var Re=[],lt=[],Ct=[];if(x.type.is_variable(Z))for(F=0;F<=z.id.length;F++)Re.push(F);else Re.push(Z.value);if(x.type.is_variable($))for(F=0;F<=z.id.length;F++)lt.push(F);else lt.push($.value);if(x.type.is_variable(oe))for(F=0;F<=z.id.length;F++)Ct.push(F);else Ct.push(oe.value);var qt=[];for(var ir in Re)if(Re.hasOwnProperty(ir)){F=Re[ir];for(var bt in lt)if(lt.hasOwnProperty(bt)){var gn=lt[bt],br=z.id.length-F-gn;if(e(Ct,br)!==-1&&F+gn+br===z.id.length){var Ir=z.id.substr(F,gn);if(z.id===z.id.substr(0,F)+Ir+z.id.substr(F+gn,br)){var Or=new j("=",[new j(Ir),xe]),nn=new j("=",[Z,new Te(F)]),ai=new j("=",[$,new Te(gn)]),Io=new j("=",[oe,new Te(br)]),ts=new j(",",[new j(",",[new j(",",[nn,ai]),Io]),Or]);qt.push(new be(P.goal.replace(ts),P.substitution,P))}}}}w.prepend(qt)}},"atom_chars/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var oe=z,xe=x.type.is_variable(F),Re="";oe.indicator==="./2";){if(x.type.is_character(oe.args[0]))Re+=oe.args[0].id;else if(x.type.is_variable(oe.args[0])&&xe){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(oe.args[0])){w.throw_error(x.error.type("character",oe.args[0],y.indicator));return}oe=oe.args[1]}x.type.is_variable(oe)&&xe?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(oe)&&!x.type.is_variable(oe)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new be(P.goal.replace(new j("=",[new j(Re),F])),P.substitution,P)])}else{for(var Z=new j("[]"),$=F.id.length-1;$>=0;$--)Z=new j(".",[new j(F.id.charAt($)),Z]);w.prepend([new be(P.goal.replace(new j("=",[z,Z])),P.substitution,P)])}},"atom_codes/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var oe=z,xe=x.type.is_variable(F),Re="";oe.indicator==="./2";){if(x.type.is_character_code(oe.args[0]))Re+=c(oe.args[0].value);else if(x.type.is_variable(oe.args[0])&&xe){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(oe.args[0])){w.throw_error(x.error.representation("character_code",y.indicator));return}oe=oe.args[1]}x.type.is_variable(oe)&&xe?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(oe)&&!x.type.is_variable(oe)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new be(P.goal.replace(new j("=",[new j(Re),F])),P.substitution,P)])}else{for(var Z=new j("[]"),$=F.id.length-1;$>=0;$--)Z=new j(".",[new Te(n(F.id,$),!1),Z]);w.prepend([new be(P.goal.replace(new j("=",[z,Z])),P.substitution,P)])}},"char_code/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_character(F))w.throw_error(x.error.type("character",F,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_character_code(z))w.throw_error(x.error.representation("character_code",y.indicator));else if(x.type.is_variable(z)){var Z=new Te(n(F.id,0),!1);w.prepend([new be(P.goal.replace(new j("=",[Z,z])),P.substitution,P)])}else{var $=new j(c(z.value));w.prepend([new be(P.goal.replace(new j("=",[$,F])),P.substitution,P)])}},"number_chars/2":function(w,P,y){var F,z=y.args[0],Z=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(Z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var $=x.type.is_variable(z);if(!x.type.is_variable(Z)){var oe=Z,xe=!0;for(F="";oe.indicator==="./2";){if(x.type.is_character(oe.args[0]))F+=oe.args[0].id;else if(x.type.is_variable(oe.args[0]))xe=!1;else if(!x.type.is_variable(oe.args[0])){w.throw_error(x.error.type("character",oe.args[0],y.indicator));return}oe=oe.args[1]}if(xe=xe&&x.type.is_empty_list(oe),!x.type.is_empty_list(oe)&&!x.type.is_variable(oe)){w.throw_error(x.error.type("list",Z,y.indicator));return}if(!xe&&$){w.throw_error(x.error.instantiation(y.indicator));return}else if(xe)if(x.type.is_variable(oe)&&$){w.throw_error(x.error.instantiation(y.indicator));return}else{var Re=w.parse(F),lt=Re.value;!x.type.is_number(lt)||Re.tokens[Re.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new be(P.goal.replace(new j("=",[z,lt])),P.substitution,P)]);return}}if(!$){F=z.toString();for(var Ct=new j("[]"),qt=F.length-1;qt>=0;qt--)Ct=new j(".",[new j(F.charAt(qt)),Ct]);w.prepend([new be(P.goal.replace(new j("=",[Z,Ct])),P.substitution,P)])}}},"number_codes/2":function(w,P,y){var F,z=y.args[0],Z=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(Z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var $=x.type.is_variable(z);if(!x.type.is_variable(Z)){var oe=Z,xe=!0;for(F="";oe.indicator==="./2";){if(x.type.is_character_code(oe.args[0]))F+=c(oe.args[0].value);else if(x.type.is_variable(oe.args[0]))xe=!1;else if(!x.type.is_variable(oe.args[0])){w.throw_error(x.error.type("character_code",oe.args[0],y.indicator));return}oe=oe.args[1]}if(xe=xe&&x.type.is_empty_list(oe),!x.type.is_empty_list(oe)&&!x.type.is_variable(oe)){w.throw_error(x.error.type("list",Z,y.indicator));return}if(!xe&&$){w.throw_error(x.error.instantiation(y.indicator));return}else if(xe)if(x.type.is_variable(oe)&&$){w.throw_error(x.error.instantiation(y.indicator));return}else{var Re=w.parse(F),lt=Re.value;!x.type.is_number(lt)||Re.tokens[Re.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new be(P.goal.replace(new j("=",[z,lt])),P.substitution,P)]);return}}if(!$){F=z.toString();for(var Ct=new j("[]"),qt=F.length-1;qt>=0;qt--)Ct=new j(".",[new Te(n(F,qt),!1),Ct]);w.prepend([new be(P.goal.replace(new j("=",[Z,Ct])),P.substitution,P)])}}},"upcase_atom/2":function(w,P,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new be(P.goal.replace(new j("=",[z,new j(F.id.toUpperCase(),[])])),P.substitution,P)]):w.throw_error(x.error.type("atom",F,y.indicator))},"downcase_atom/2":function(w,P,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new be(P.goal.replace(new j("=",[z,new j(F.id.toLowerCase(),[])])),P.substitution,P)]):w.throw_error(x.error.type("atom",F,y.indicator))},"atomic_list_concat/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new be(P.goal.replace(new j("atomic_list_concat",[F,new j("",[]),z])),P.substitution,P)])},"atomic_list_concat/3":function(w,P,y){var F=y.args[0],z=y.args[1],Z=y.args[2];if(x.type.is_variable(z)||x.type.is_variable(F)&&x.type.is_variable(Z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_list(F))w.throw_error(x.error.type("list",F,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_atom(Z))w.throw_error(x.error.type("atom",Z,y.indicator));else if(x.type.is_variable(Z)){for(var oe="",xe=F;x.type.is_term(xe)&&xe.indicator==="./2";){if(!x.type.is_atom(xe.args[0])&&!x.type.is_number(xe.args[0])){w.throw_error(x.error.type("atomic",xe.args[0],y.indicator));return}oe!==""&&(oe+=z.id),x.type.is_atom(xe.args[0])?oe+=xe.args[0].id:oe+=""+xe.args[0].value,xe=xe.args[1]}oe=new j(oe,[]),x.type.is_variable(xe)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_term(xe)||xe.indicator!=="[]/0"?w.throw_error(x.error.type("list",F,y.indicator)):w.prepend([new be(P.goal.replace(new j("=",[oe,Z])),P.substitution,P)])}else{var $=g(s(Z.id.split(z.id),function(Re){return new j(Re,[])}));w.prepend([new be(P.goal.replace(new j("=",[$,F])),P.substitution,P)])}},"@=/2":function(w,P,y){x.compare(y.args[0],y.args[1])>0&&w.success(P)},"@>=/2":function(w,P,y){x.compare(y.args[0],y.args[1])>=0&&w.success(P)},"compare/3":function(w,P,y){var F=y.args[0],z=y.args[1],Z=y.args[2];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_atom(F)&&["<",">","="].indexOf(F.id)===-1)w.throw_error(x.type.domain("order",F,y.indicator));else{var $=x.compare(z,Z);$=$===0?"=":$===-1?"<":">",w.prepend([new be(P.goal.replace(new j("=",[F,new j($,[])])),P.substitution,P)])}},"is/2":function(w,P,y){var F=y.args[1].interpret(w);x.type.is_number(F)?w.prepend([new be(P.goal.replace(new j("=",[y.args[0],F],w.level)),P.substitution,P)]):w.throw_error(F)},"between/3":function(w,P,y){var F=y.args[0],z=y.args[1],Z=y.args[2];if(x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_integer(F))w.throw_error(x.error.type("integer",F,y.indicator));else if(!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",Z,y.indicator));else if(x.type.is_variable(Z)){var $=[new be(P.goal.replace(new j("=",[Z,F])),P.substitution,P)];F.value=Z.value&&w.success(P)},"succ/2":function(w,P,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)&&x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_variable(F)&&!x.type.is_integer(F)?w.throw_error(x.error.type("integer",F,y.indicator)):!x.type.is_variable(z)&&!x.type.is_integer(z)?w.throw_error(x.error.type("integer",z,y.indicator)):!x.type.is_variable(F)&&F.value<0?w.throw_error(x.error.domain("not_less_than_zero",F,y.indicator)):!x.type.is_variable(z)&&z.value<0?w.throw_error(x.error.domain("not_less_than_zero",z,y.indicator)):(x.type.is_variable(z)||z.value>0)&&(x.type.is_variable(F)?w.prepend([new be(P.goal.replace(new j("=",[F,new Te(z.value-1,!1)])),P.substitution,P)]):w.prepend([new be(P.goal.replace(new j("=",[z,new Te(F.value+1,!1)])),P.substitution,P)]))},"=:=/2":function(w,P,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F===0&&w.success(P)},"=\\=/2":function(w,P,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F!==0&&w.success(P)},"/2":function(w,P,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>0&&w.success(P)},">=/2":function(w,P,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>=0&&w.success(P)},"var/1":function(w,P,y){x.type.is_variable(y.args[0])&&w.success(P)},"atom/1":function(w,P,y){x.type.is_atom(y.args[0])&&w.success(P)},"atomic/1":function(w,P,y){x.type.is_atomic(y.args[0])&&w.success(P)},"compound/1":function(w,P,y){x.type.is_compound(y.args[0])&&w.success(P)},"integer/1":function(w,P,y){x.type.is_integer(y.args[0])&&w.success(P)},"float/1":function(w,P,y){x.type.is_float(y.args[0])&&w.success(P)},"number/1":function(w,P,y){x.type.is_number(y.args[0])&&w.success(P)},"nonvar/1":function(w,P,y){x.type.is_variable(y.args[0])||w.success(P)},"ground/1":function(w,P,y){y.variables().length===0&&w.success(P)},"acyclic_term/1":function(w,P,y){for(var F=P.substitution.apply(P.substitution),z=y.args[0].variables(),Z=0;Z0?bt[bt.length-1]:null,bt!==null&&(qt=W(w,bt,0,w.__get_max_priority(),!1))}if(qt.type===p&&qt.len===bt.length-1&&gn.value==="."){qt=qt.value.rename(w);var br=new j("=",[z,qt]);if(oe.variables){var Ir=g(s(ye(qt.variables()),function(Or){return new De(Or)}));br=new j(",",[br,new j("=",[oe.variables,Ir])])}if(oe.variable_names){var Ir=g(s(ye(qt.variables()),function(nn){var ai;for(ai in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(ai)&&w.session.renamed_variables[ai]===nn)break;return new j("=",[new j(ai,[]),new De(nn)])}));br=new j(",",[br,new j("=",[oe.variable_names,Ir])])}if(oe.singletons){var Ir=g(s(new Ve(qt,null).singleton_variables(),function(nn){var ai;for(ai in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(ai)&&w.session.renamed_variables[ai]===nn)break;return new j("=",[new j(ai,[]),new De(nn)])}));br=new j(",",[br,new j("=",[oe.singletons,Ir])])}w.prepend([new be(P.goal.replace(br),P.substitution,P)])}else qt.type===p?w.throw_error(x.error.syntax(bt[qt.len],"unexpected token",!1)):w.throw_error(qt.value)}}},"write/1":function(w,P,y){var F=y.args[0];w.prepend([new be(P.goal.replace(new j(",",[new j("current_output",[new De("S")]),new j("write",[new De("S"),F])])),P.substitution,P)])},"write/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new be(P.goal.replace(new j("write_term",[F,z,new j(".",[new j("quoted",[new j("false",[])]),new j(".",[new j("ignore_ops",[new j("false")]),new j(".",[new j("numbervars",[new j("true")]),new j("[]",[])])])])])),P.substitution,P)])},"writeq/1":function(w,P,y){var F=y.args[0];w.prepend([new be(P.goal.replace(new j(",",[new j("current_output",[new De("S")]),new j("writeq",[new De("S"),F])])),P.substitution,P)])},"writeq/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new be(P.goal.replace(new j("write_term",[F,z,new j(".",[new j("quoted",[new j("true",[])]),new j(".",[new j("ignore_ops",[new j("false")]),new j(".",[new j("numbervars",[new j("true")]),new j("[]",[])])])])])),P.substitution,P)])},"write_canonical/1":function(w,P,y){var F=y.args[0];w.prepend([new be(P.goal.replace(new j(",",[new j("current_output",[new De("S")]),new j("write_canonical",[new De("S"),F])])),P.substitution,P)])},"write_canonical/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new be(P.goal.replace(new j("write_term",[F,z,new j(".",[new j("quoted",[new j("true",[])]),new j(".",[new j("ignore_ops",[new j("true")]),new j(".",[new j("numbervars",[new j("false")]),new j("[]",[])])])])])),P.substitution,P)])},"write_term/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new be(P.goal.replace(new j(",",[new j("current_output",[new De("S")]),new j("write_term",[new De("S"),F,z])])),P.substitution,P)])},"write_term/3":function(w,P,y){var F=y.args[0],z=y.args[1],Z=y.args[2],$=x.type.is_stream(F)?F:w.get_stream_by_alias(F.id);if(x.type.is_variable(F)||x.type.is_variable(Z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else if(!x.type.is_stream(F)&&!x.type.is_atom(F))w.throw_error(x.error.domain("stream_or_alias",F,y.indicator));else if(!x.type.is_stream($)||$.stream===null)w.throw_error(x.error.existence("stream",F,y.indicator));else if($.input)w.throw_error(x.error.permission("output","stream",F,y.indicator));else if($.type==="binary")w.throw_error(x.error.permission("output","binary_stream",F,y.indicator));else if($.position==="past_end_of_stream"&&$.eof_action==="error")w.throw_error(x.error.permission("output","past_end_of_stream",F,y.indicator));else{for(var oe={},xe=Z,Re;x.type.is_term(xe)&&xe.indicator==="./2";){if(Re=xe.args[0],x.type.is_variable(Re)){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_write_option(Re)){w.throw_error(x.error.domain("write_option",Re,y.indicator));return}oe[Re.id]=Re.args[0].id==="true",xe=xe.args[1]}if(xe.indicator!=="[]/0"){x.type.is_variable(xe)?w.throw_error(x.error.instantiation(y.indicator)):w.throw_error(x.error.type("list",Z,y.indicator));return}else{oe.session=w.session;var lt=z.toString(oe);$.stream.put(lt,$.position),typeof $.position=="number"&&($.position+=lt.length),w.success(P)}}},"halt/0":function(w,P,y){w.points=[]},"halt/1":function(w,P,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_integer(F)?w.points=[]:w.throw_error(x.error.type("integer",F,y.indicator))},"current_prolog_flag/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_flag(F))w.throw_error(x.error.domain("prolog_flag",F,y.indicator));else{var Z=[];for(var $ in x.flag)if(x.flag.hasOwnProperty($)){var oe=new j(",",[new j("=",[new j($),F]),new j("=",[w.get_flag($),z])]);Z.push(new be(P.goal.replace(oe),P.substitution,P))}w.prepend(Z)}},"set_prolog_flag/2":function(w,P,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)||x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?x.type.is_flag(F)?x.type.is_value_flag(F,z)?x.type.is_modifiable_flag(F)?(w.session.flag[F.id]=z,w.success(P)):w.throw_error(x.error.permission("modify","flag",F)):w.throw_error(x.error.domain("flag_value",new j("+",[F,z]),y.indicator)):w.throw_error(x.error.domain("prolog_flag",F,y.indicator)):w.throw_error(x.error.type("atom",F,y.indicator))}},flag:{bounded:{allowed:[new j("true"),new j("false")],value:new j("true"),changeable:!1},max_integer:{allowed:[new Te(Number.MAX_SAFE_INTEGER)],value:new Te(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new Te(Number.MIN_SAFE_INTEGER)],value:new Te(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new j("down"),new j("toward_zero")],value:new j("toward_zero"),changeable:!1},char_conversion:{allowed:[new j("on"),new j("off")],value:new j("on"),changeable:!0},debug:{allowed:[new j("on"),new j("off")],value:new j("off"),changeable:!0},max_arity:{allowed:[new j("unbounded")],value:new j("unbounded"),changeable:!1},unknown:{allowed:[new j("error"),new j("fail"),new j("warning")],value:new j("error"),changeable:!0},double_quotes:{allowed:[new j("chars"),new j("codes"),new j("atom")],value:new j("codes"),changeable:!0},occurs_check:{allowed:[new j("false"),new j("true")],value:new j("false"),changeable:!0},dialect:{allowed:[new j("tau")],value:new j("tau"),changeable:!1},version_data:{allowed:[new j("tau",[new Te(t.major,!1),new Te(t.minor,!1),new Te(t.patch,!1),new j(t.status)])],value:new j("tau",[new Te(t.major,!1),new Te(t.minor,!1),new Te(t.patch,!1),new j(t.status)]),changeable:!1},nodejs:{allowed:[new j("yes"),new j("no")],value:new j(typeof ec<"u"&&ec.exports?"yes":"no"),changeable:!1}},unify:function(w,P,y){y=y===void 0?!1:y;for(var F=[{left:w,right:P}],z={};F.length!==0;){var Z=F.pop();if(w=Z.left,P=Z.right,x.type.is_term(w)&&x.type.is_term(P)){if(w.indicator!==P.indicator)return null;for(var $=0;$z.value?1:0:z}else return F},operate:function(w,P){if(x.type.is_operator(P)){for(var y=x.type.is_operator(P),F=[],z,Z=!1,$=0;$w.get_flag("max_integer").value||z0?w.start+w.matches[0].length:w.start,z=y?new j("token_not_found"):new j("found",[new j(w.value.toString())]),Z=new j(".",[new j("line",[new Te(w.line+1)]),new j(".",[new j("column",[new Te(F+1)]),new j(".",[z,new j("[]",[])])])]);return new j("error",[new j("syntax_error",[new j(P)]),Z])},syntax_by_predicate:function(w,P){return new j("error",[new j("syntax_error",[new j(w)]),X(P)])}},warning:{singleton:function(w,P,y){for(var F=new j("[]"),z=w.length-1;z>=0;z--)F=new j(".",[new De(w[z]),F]);return new j("warning",[new j("singleton_variables",[F,X(P)]),new j(".",[new j("line",[new Te(y,!1)]),new j("[]")])])},failed_goal:function(w,P){return new j("warning",[new j("failed_goal",[w]),new j(".",[new j("line",[new Te(P,!1)]),new j("[]")])])}},format_variable:function(w){return"_"+w},format_answer:function(w,P,F){P instanceof ke&&(P=P.thread);var F=F||{};if(F.session=P?P.session:void 0,x.type.is_error(w))return"uncaught exception: "+w.args[0].toString();if(w===!1)return"false.";if(w===null)return"limit exceeded ;";var z=0,Z="";if(x.type.is_substitution(w)){var $=w.domain(!0);w=w.filter(function(Re,lt){return!x.type.is_variable(lt)||$.indexOf(lt.id)!==-1&&Re!==lt.id})}for(var oe in w.links)w.links.hasOwnProperty(oe)&&(z++,Z!==""&&(Z+=", "),Z+=oe.toString(F)+" = "+w.links[oe].toString(F));var xe=typeof P>"u"||P.points.length>0?" ;":".";return z===0?"true"+xe:Z+xe},flatten_error:function(w){if(!x.type.is_error(w))return null;w=w.args[0];var P={};return P.type=w.args[0].id,P.thrown=P.type==="syntax_error"?null:w.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=w.args[0].args[0].id,P.found=w.args[0].args[1].toString()):P.type==="syntax_error"?w.args[1].indicator==="./2"?(P.expected=w.args[0].args[0].id,P.found=w.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=w.args[1].args[0].args[0].value,P.column=w.args[1].args[1].args[0].args[0].value):P.thrown=w.args[1].id:P.type==="permission_error"?(P.found=w.args[0].args[2].toString(),P.permission_operation=w.args[0].args[0].id,P.permission_type=w.args[0].args[1].id):P.type==="evaluation_error"?P.evaluation_type=w.args[0].args[0].id:P.type==="representation_error"?P.representation=w.args[0].args[0].id:P.type==="existence_error"&&(P.existence=w.args[0].args[1].toString(),P.existence_type=w.args[0].args[0].id),P},create:function(w){return new x.type.Session(w)}};typeof ec<"u"?ec.exports=x:window.pl=x})()});function hEe(t,e,r){t.prepend(r.map(s=>new hl.default.type.State(e.goal.replace(s),e.substitution,e)))}function k5(t){let e=dEe.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function mEe(t,e){dEe.set(t,e),t.consult(`:- use_module(library(${qct.id})).`)}var hl,gEe,J0,jct,Gct,dEe,qct,yEe=Ze(()=>{Ge();ql();hl=ut(x5()),gEe=ut(Ie("vm")),{is_atom:J0,is_variable:jct,is_instantiated_list:Gct}=hl.default.type;dEe=new WeakMap;qct=new hl.default.type.Module("constraints",{"project_workspaces_by_descriptor/3":(t,e,r)=>{let[s,a,n]=r.args;if(!J0(s)||!J0(a)){t.throw_error(hl.default.error.instantiation(r.indicator));return}let c=G.parseIdent(s.id),f=G.makeDescriptor(c,a.id),h=k5(t).tryWorkspaceByDescriptor(f);jct(n)&&h!==null&&hEe(t,e,[new hl.default.type.Term("=",[n,new hl.default.type.Term(String(h.relativeCwd))])]),J0(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},"workspace_field/3":(t,e,r)=>{let[s,a,n]=r.args;if(!J0(s)||!J0(a)){t.throw_error(hl.default.error.instantiation(r.indicator));return}let f=k5(t).tryWorkspaceByCwd(s.id);if(f==null)return;let p=va(f.manifest.raw,a.id);typeof p>"u"||hEe(t,e,[new hl.default.type.Term("=",[n,new hl.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},"workspace_field_test/3":(t,e,r)=>{let[s,a,n]=r.args;t.prepend([new hl.default.type.State(e.goal.replace(new hl.default.type.Term("workspace_field_test",[s,a,n,new hl.default.type.Term("[]",[])])),e.substitution,e)])},"workspace_field_test/4":(t,e,r)=>{let[s,a,n,c]=r.args;if(!J0(s)||!J0(a)||!J0(n)||!Gct(c)){t.throw_error(hl.default.error.instantiation(r.indicator));return}let p=k5(t).tryWorkspaceByCwd(s.id);if(p==null)return;let h=va(p.manifest.raw,a.id);if(typeof h>"u")return;let E={$$:h};for(let[S,b]of c.toJavaScript().entries())E[`$${S}`]=b;gEe.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 aS={};Vt(aS,{Constraints:()=>R5,DependencyType:()=>wEe});function go(t){if(t instanceof KC.default.type.Num)return t.value;if(t instanceof KC.default.type.Term)switch(t.indicator){case"throw/1":return go(t.args[0]);case"error/1":return go(t.args[0]);case"error/2":if(t.args[0]instanceof KC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(go(t.args[0]),...go(t.args[1]));{let e=go(t.args[0]);return e.message+=` (in ${go(t.args[1])})`,e}case"syntax_error/1":return new jt(43,`Syntax error: ${go(t.args[0])}`);case"existence_error/2":return new jt(44,`Existence error: ${go(t.args[0])} ${go(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:go(t.args[0])};case"column/1":return{column:go(t.args[0])};case"found/1":return{found:go(t.args[0])};case"./2":return[go(t.args[0])].concat(go(t.args[1]));case"//2":return`${go(t.args[0])}/${go(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function IEe(t){let e;try{e=go(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 bm(t){return t.id==="null"?null:`${t.toJavaScript()}`}function Wct(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 K0(t){return typeof t=="string"?`'${t}'`:"[]"}var CEe,KC,wEe,EEe,Q5,R5,lS=Ze(()=>{Ge();Ge();Dt();CEe=ut(Xye()),KC=ut(x5());iS();yEe();(0,CEe.default)(KC.default);wEe=(s=>(s.Dependencies="dependencies",s.DevDependencies="devDependencies",s.PeerDependencies="peerDependencies",s))(wEe||{}),EEe=["dependencies","devDependencies","peerDependencies"];Q5=class{constructor(e,r){let s=1e3*e.workspaces.length;this.session=KC.default.create(s),mEe(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 IEe(r);for(;;){let s=await this.fetchNextAnswer();if(s===null)throw new jt(79,"Resolution limit exceeded");if(!s)break;if(s.id==="throw")throw IEe(s);yield s}}};R5=class t{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");ce.existsSync(r)&&(this.source=ce.readFileSync(r,"utf8"))}static async find(e){return new t(e)}getProjectDatabase(){let e="";for(let r of EEe)e+=`dependency_type(${r}). -`;for(let r of this.project.workspacesByCwd.values()){let s=r.relativeCwd;e+=`workspace(${K0(s)}). -`,e+=`workspace_ident(${K0(s)}, ${K0(G.stringifyIdent(r.anchoredLocator))}). -`,e+=`workspace_version(${K0(s)}, ${K0(r.manifest.version)}). -`;for(let a of EEe)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${K0(s)}, ${K0(G.stringifyIdent(n))}, ${K0(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 Q5(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(),s=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:c,dependencyType:f}of e){let p=nS([f,G.stringifyIdent(n)]),h=je.getMapWithDefault(s,a.cwd);je.getMapWithDefault(h,p).set(c??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:c}of r){let f=nS(n),p=je.getMapWithDefault(s,a.cwd);je.getMapWithDefault(p,f).set(JSON.parse(c)??void 0,new Set)}return{manifestUpdates:s,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let s of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=J.resolve(this.project.cwd,bm(s.links.WorkspaceCwd)),n=bm(s.links.DependencyIdent),c=bm(s.links.DependencyRange),f=bm(s.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:c,dependencyType:f})}return je.sortMap(r,[({dependencyRange:s})=>s!==null?"0":"1",({workspace:s})=>G.stringifyIdent(s.anchoredLocator),({dependencyIdent:s})=>G.stringifyIdent(s)])}async genEnforcedFields(e){let r=[];for await(let s of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=J.resolve(this.project.cwd,bm(s.links.WorkspaceCwd)),n=bm(s.links.FieldPath),c=Wct(s.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let f=this.project.getWorkspaceByCwd(a);r.push({workspace:f,fieldPath:n,fieldValue:c})}return je.sortMap(r,[({workspace:s})=>G.stringifyIdent(s.anchoredLocator),({fieldPath:s})=>s])}async*query(e){let r=this.createSession();for await(let s of r.makeQuery(e)){let a={};for(let[n,c]of Object.entries(s.links))n!=="_"&&(a[n]=bm(c));yield a}}}});var QEe=_(uF=>{"use strict";Object.defineProperty(uF,"__esModule",{value:!0});function BS(t){let e=[...t.caches],r=e.shift();return r===void 0?kEe():{get(s,a,n={miss:()=>Promise.resolve()}){return r.get(s,a,n).catch(()=>BS({caches:e}).get(s,a,n))},set(s,a){return r.set(s,a).catch(()=>BS({caches:e}).set(s,a))},delete(s){return r.delete(s).catch(()=>BS({caches:e}).delete(s))},clear(){return r.clear().catch(()=>BS({caches:e}).clear())}}}function kEe(){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()}}}uF.createFallbackableCache=BS;uF.createNullCache=kEe});var TEe=_((iJt,REe)=>{REe.exports=QEe()});var FEe=_(Y5=>{"use strict";Object.defineProperty(Y5,"__esModule",{value:!0});function uut(t={serializable:!0}){let e={};return{get(r,s,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 c=s(),f=a&&a.miss||(()=>Promise.resolve());return c.then(p=>f(p)).then(()=>c)},set(r,s){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(s):s,Promise.resolve(s)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}Y5.createInMemoryCache=uut});var OEe=_((oJt,NEe)=>{NEe.exports=FEe()});var MEe=_($u=>{"use strict";Object.defineProperty($u,"__esModule",{value:!0});function fut(t,e,r){let s={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===V5.WithinHeaders?s:{}},queryParameters(){return t===V5.WithinQueryParameters?s:{}}}}function Aut(t){let e=0,r=()=>(e++,new Promise(s=>{setTimeout(()=>{s(t(r))},Math.min(100*e,1e3))}));return t(r)}function LEe(t,e=(r,s)=>Promise.resolve()){return Object.assign(t,{wait(r){return LEe(t.then(s=>Promise.all([e(s,r),s])).then(s=>s[1]))}})}function put(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),s=t[e];t[e]=t[r],t[r]=s}return t}function hut(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function gut(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var dut="4.22.1",mut=t=>()=>t.transporter.requester.destroy(),V5={WithinQueryParameters:0,WithinHeaders:1};$u.AuthMode=V5;$u.addMethods=hut;$u.createAuth=fut;$u.createRetryablePromise=Aut;$u.createWaitablePromise=LEe;$u.destroy=mut;$u.encode=gut;$u.shuffle=put;$u.version=dut});var vS=_((lJt,UEe)=>{UEe.exports=MEe()});var _Ee=_(J5=>{"use strict";Object.defineProperty(J5,"__esModule",{value:!0});var yut={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};J5.MethodEnum=yut});var SS=_((uJt,HEe)=>{HEe.exports=_Ee()});var rIe=_(Wi=>{"use strict";Object.defineProperty(Wi,"__esModule",{value:!0});var GEe=SS();function K5(t,e){let r=t||{},s=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(s[a]=r[a])}),{data:Object.entries(s).length>0?s:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var DS={Read:1,Write:2,Any:3},sw={Up:1,Down:2,Timeouted:3},qEe=2*60*1e3;function Z5(t,e=sw.Up){return{...t,status:e,lastUpdate:Date.now()}}function WEe(t){return t.status===sw.Up||Date.now()-t.lastUpdate>qEe}function YEe(t){return t.status===sw.Timeouted&&Date.now()-t.lastUpdate<=qEe}function X5(t){return typeof t=="string"?{protocol:"https",url:t,accept:DS.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||DS.Any}}function Eut(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(Z5(r))))).then(r=>{let s=r.filter(f=>WEe(f)),a=r.filter(f=>YEe(f)),n=[...s,...a],c=n.length>0?n.map(f=>X5(f)):e;return{getTimeout(f,p){return(a.length===0&&f===0?1:a.length+3+f)*p},statelessHosts:c}})}var Iut=({isTimedOut:t,status:e})=>!t&&~~e===0,Cut=t=>{let e=t.status;return t.isTimedOut||Iut(t)||~~(e/100)!==2&&~~(e/100)!==4},wut=({status:t})=>~~(t/100)===2,But=(t,e)=>Cut(t)?e.onRetry(t):wut(t)?e.onSuccess(t):e.onFail(t);function jEe(t,e,r,s){let a=[],n=ZEe(r,s),c=XEe(t,s),f=r.method,p=r.method!==GEe.MethodEnum.Get?{}:{...r.data,...s.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...s.queryParameters},E=0,C=(S,b)=>{let I=S.pop();if(I===void 0)throw tIe(z5(a));let T={data:n,headers:c,method:f,url:KEe(I,r.path,h),connectTimeout:b(E,t.timeouts.connect),responseTimeout:b(E,s.timeout)},N=W=>{let ee={request:T,response:W,host:I,triesLeft:S.length};return a.push(ee),ee},U={onSuccess:W=>VEe(W),onRetry(W){let ee=N(W);return W.isTimedOut&&E++,Promise.all([t.logger.info("Retryable failure",$5(ee)),t.hostsCache.set(I,Z5(I,W.isTimedOut?sw.Timeouted:sw.Down))]).then(()=>C(S,b))},onFail(W){throw N(W),JEe(W,z5(a))}};return t.requester.send(T).then(W=>But(W,U))};return Eut(t.hostsCache,e).then(S=>C([...S.statelessHosts].reverse(),S.getTimeout))}function vut(t){let{hostsCache:e,logger:r,requester:s,requestsCache:a,responsesCache:n,timeouts:c,userAgent:f,hosts:p,queryParameters:h,headers:E}=t,C={hostsCache:e,logger:r,requester:s,requestsCache:a,responsesCache:n,timeouts:c,userAgent:f,headers:E,queryParameters:h,hosts:p.map(S=>X5(S)),read(S,b){let I=K5(b,C.timeouts.read),T=()=>jEe(C,C.hosts.filter(W=>(W.accept&DS.Read)!==0),S,I);if((I.cacheable!==void 0?I.cacheable:S.cacheable)!==!0)return T();let U={request:S,mappedRequestOptions:I,transporter:{queryParameters:C.queryParameters,headers:C.headers}};return C.responsesCache.get(U,()=>C.requestsCache.get(U,()=>C.requestsCache.set(U,T()).then(W=>Promise.all([C.requestsCache.delete(U),W]),W=>Promise.all([C.requestsCache.delete(U),Promise.reject(W)])).then(([W,ee])=>ee)),{miss:W=>C.responsesCache.set(U,W)})},write(S,b){return jEe(C,C.hosts.filter(I=>(I.accept&DS.Write)!==0),S,K5(b,C.timeouts.write))}};return C}function Sut(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let s=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(s)===-1&&(e.value=`${e.value}${s}`),e}};return e}function VEe(t){try{return JSON.parse(t.content)}catch(e){throw eIe(e.message,t)}}function JEe({content:t,status:e},r){let s=t;try{s=JSON.parse(t).message}catch{}return $Ee(s,e,r)}function Dut(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function KEe(t,e,r){let s=zEe(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return s.length&&(a+=`?${s}`),a}function zEe(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>Dut("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function ZEe(t,e){if(t.method===GEe.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 XEe(t,e){let r={...t.headers,...e.headers},s={};return Object.keys(r).forEach(a=>{let n=r[a];s[a.toLowerCase()]=n}),s}function z5(t){return t.map(e=>$5(e))}function $5(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 $Ee(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function eIe(t,e){return{name:"DeserializationError",message:t,response:e}}function tIe(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Wi.CallEnum=DS;Wi.HostStatusEnum=sw;Wi.createApiError=$Ee;Wi.createDeserializationError=eIe;Wi.createMappedRequestOptions=K5;Wi.createRetryError=tIe;Wi.createStatefulHost=Z5;Wi.createStatelessHost=X5;Wi.createTransporter=vut;Wi.createUserAgent=Sut;Wi.deserializeFailure=JEe;Wi.deserializeSuccess=VEe;Wi.isStatefulHostTimeouted=YEe;Wi.isStatefulHostUp=WEe;Wi.serializeData=ZEe;Wi.serializeHeaders=XEe;Wi.serializeQueryParameters=zEe;Wi.serializeUrl=KEe;Wi.stackFrameWithoutCredentials=$5;Wi.stackTraceWithoutCredentials=z5});var PS=_((AJt,nIe)=>{nIe.exports=rIe()});var iIe=_(Z0=>{"use strict";Object.defineProperty(Z0,"__esModule",{value:!0});var ow=vS(),Put=PS(),bS=SS(),but=t=>{let e=t.region||"us",r=ow.createAuth(ow.AuthMode.WithinHeaders,t.appId,t.apiKey),s=Put.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 ow.addMethods({appId:a,transporter:s},t.methods)},xut=t=>(e,r)=>t.transporter.write({method:bS.MethodEnum.Post,path:"2/abtests",data:e},r),kut=t=>(e,r)=>t.transporter.write({method:bS.MethodEnum.Delete,path:ow.encode("2/abtests/%s",e)},r),Qut=t=>(e,r)=>t.transporter.read({method:bS.MethodEnum.Get,path:ow.encode("2/abtests/%s",e)},r),Rut=t=>e=>t.transporter.read({method:bS.MethodEnum.Get,path:"2/abtests"},e),Tut=t=>(e,r)=>t.transporter.write({method:bS.MethodEnum.Post,path:ow.encode("2/abtests/%s/stop",e)},r);Z0.addABTest=xut;Z0.createAnalyticsClient=but;Z0.deleteABTest=kut;Z0.getABTest=Qut;Z0.getABTests=Rut;Z0.stopABTest=Tut});var oIe=_((hJt,sIe)=>{sIe.exports=iIe()});var lIe=_(xS=>{"use strict";Object.defineProperty(xS,"__esModule",{value:!0});var e9=vS(),Fut=PS(),aIe=SS(),Nut=t=>{let e=t.region||"us",r=e9.createAuth(e9.AuthMode.WithinHeaders,t.appId,t.apiKey),s=Fut.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return e9.addMethods({appId:t.appId,transporter:s},t.methods)},Out=t=>e=>t.transporter.read({method:aIe.MethodEnum.Get,path:"1/strategies/personalization"},e),Lut=t=>(e,r)=>t.transporter.write({method:aIe.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);xS.createPersonalizationClient=Nut;xS.getPersonalizationStrategy=Out;xS.setPersonalizationStrategy=Lut});var uIe=_((dJt,cIe)=>{cIe.exports=lIe()});var vIe=_(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var Jt=vS(),gl=PS(),Pr=SS(),Mut=Ie("crypto");function fF(t){let e=r=>t.request(r).then(s=>{if(t.batch!==void 0&&t.batch(s.hits),!t.shouldStop(s))return s.cursor?e({cursor:s.cursor}):e({page:(r.page||0)+1})});return e({})}var Uut=t=>{let e=t.appId,r=Jt.createAuth(t.authMode!==void 0?t.authMode:Jt.AuthMode.WithinHeaders,e,t.apiKey),s=gl.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:gl.CallEnum.Read},{url:`${e}.algolia.net`,accept:gl.CallEnum.Write}].concat(Jt.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:s,appId:e,addAlgoliaAgent(n,c){s.userAgent.add({segment:n,version:c})},clearCache(){return Promise.all([s.requestsCache.clear(),s.responsesCache.clear()]).then(()=>{})}};return Jt.addMethods(a,t.methods)};function fIe(){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 AIe(){return{name:"ObjectNotFoundError",message:"Object not found."}}function pIe(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var _ut=t=>(e,r)=>{let{queryParameters:s,...a}=r||{},n={acl:e,...s!==void 0?{queryParameters:s}:{}},c=(f,p)=>Jt.createRetryablePromise(h=>kS(t)(f.key,p).catch(E=>{if(E.status!==404)throw E;return h()}));return Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:"1/keys",data:n},a),c)},Hut=t=>(e,r,s)=>{let a=gl.createMappedRequestOptions(s);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Pr.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},jut=t=>(e,r,s)=>t.transporter.write({method:Pr.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},s),Gut=t=>(e,r)=>Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(s,a)=>aw(t)(s.taskID,a)),AF=t=>(e,r,s)=>{let a=(n,c)=>QS(t)(e,{methods:{waitTask:hs}}).waitTask(n.taskID,c);return Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},s),a)},qut=t=>(e,r,s)=>AF(t)(e,r,{...s,scope:[hF.Rules]}),Wut=t=>(e,r,s)=>AF(t)(e,r,{...s,scope:[hF.Settings]}),Yut=t=>(e,r,s)=>AF(t)(e,r,{...s,scope:[hF.Synonyms]}),Vut=t=>(e,r)=>e.method===Pr.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),Jut=t=>(e,r)=>{let s=(a,n)=>Jt.createRetryablePromise(c=>kS(t)(e,n).then(c).catch(f=>{if(f.status!==404)throw f}));return Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Delete,path:Jt.encode("1/keys/%s",e)},r),s)},Kut=t=>(e,r,s)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},s),(n,c)=>aw(t)(n.taskID,c))},zut=()=>(t,e)=>{let r=gl.serializeQueryParameters(e),s=Mut.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(s+r).toString("base64")},kS=t=>(e,r)=>t.transporter.read({method:Pr.MethodEnum.Get,path:Jt.encode("1/keys/%s",e)},r),hIe=t=>(e,r)=>t.transporter.read({method:Pr.MethodEnum.Get,path:Jt.encode("1/task/%s",e.toString())},r),Zut=t=>e=>t.transporter.read({method:Pr.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),Xut=t=>e=>t.transporter.read({method:Pr.MethodEnum.Get,path:"1/logs"},e),$ut=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,s=e.match(r);if(s===null)throw pIe();return parseInt(s[1],10)-Math.round(new Date().getTime()/1e3)},eft=t=>e=>t.transporter.read({method:Pr.MethodEnum.Get,path:"1/clusters/mapping/top"},e),tft=t=>(e,r)=>t.transporter.read({method:Pr.MethodEnum.Get,path:Jt.encode("1/clusters/mapping/%s",e)},r),rft=t=>e=>{let{retrieveMappings:r,...s}=e||{};return r===!0&&(s.getClusters=!0),t.transporter.read({method:Pr.MethodEnum.Get,path:"1/clusters/mapping/pending"},s)},QS=t=>(e,r={})=>{let s={transporter:t.transporter,appId:t.appId,indexName:e};return Jt.addMethods(s,r.methods)},nft=t=>e=>t.transporter.read({method:Pr.MethodEnum.Get,path:"1/keys"},e),ift=t=>e=>t.transporter.read({method:Pr.MethodEnum.Get,path:"1/clusters"},e),sft=t=>e=>t.transporter.read({method:Pr.MethodEnum.Get,path:"1/indexes"},e),oft=t=>e=>t.transporter.read({method:Pr.MethodEnum.Get,path:"1/clusters/mapping"},e),aft=t=>(e,r,s)=>{let a=(n,c)=>QS(t)(e,{methods:{waitTask:hs}}).waitTask(n.taskID,c);return Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},s),a)},lft=t=>(e,r)=>{let s=(a,n)=>Promise.all(Object.keys(a.taskID).map(c=>QS(t)(c,{methods:{waitTask:hs}}).waitTask(a.taskID[c],n)));return Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),s)},cft=t=>(e,r)=>t.transporter.read({method:Pr.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),uft=t=>(e,r)=>{let s=e.map(a=>({...a,params:gl.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:Pr.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:s},cacheable:!0},r)},fft=t=>(e,r)=>Promise.all(e.map(s=>{let{facetName:a,facetQuery:n,...c}=s.params;return QS(t)(s.indexName,{methods:{searchForFacetValues:CIe}}).searchForFacetValues(a,n,{...r,...c})})),Aft=t=>(e,r)=>{let s=gl.createMappedRequestOptions(r);return s.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Pr.MethodEnum.Delete,path:"1/clusters/mapping"},s)},pft=t=>(e,r,s)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},s),(n,c)=>aw(t)(n.taskID,c))},hft=t=>(e,r)=>{let s=(a,n)=>Jt.createRetryablePromise(c=>kS(t)(e,n).catch(f=>{if(f.status!==404)throw f;return c()}));return Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("1/keys/%s/restore",e)},r),s)},gft=t=>(e,r,s)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},s),(n,c)=>aw(t)(n.taskID,c))},dft=t=>(e,r,s)=>t.transporter.read({method:Pr.MethodEnum.Post,path:Jt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},s),mft=t=>(e,r)=>t.transporter.read({method:Pr.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),yft=t=>(e,r)=>Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(s,a)=>aw(t)(s.taskID,a)),Eft=t=>(e,r)=>{let s=Object.assign({},r),{queryParameters:a,...n}=r||{},c=a?{queryParameters:a}:{},f=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=E=>Object.keys(s).filter(C=>f.indexOf(C)!==-1).every(C=>{if(Array.isArray(E[C])&&Array.isArray(s[C])){let S=E[C];return S.length===s[C].length&&S.every((b,I)=>b===s[C][I])}else return E[C]===s[C]}),h=(E,C)=>Jt.createRetryablePromise(S=>kS(t)(e,C).then(b=>p(b)?Promise.resolve():S()));return Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Put,path:Jt.encode("1/keys/%s",e),data:c},n),h)},aw=t=>(e,r)=>Jt.createRetryablePromise(s=>hIe(t)(e,r).then(a=>a.status!=="published"?s():void 0)),gIe=t=>(e,r)=>{let s=(a,n)=>hs(t)(a.taskID,n);return Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),s)},Ift=t=>e=>fF({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),Cft=t=>e=>{let r={hitsPerPage:1e3,...e};return fF({shouldStop:s=>s.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},wft=t=>e=>{let r={hitsPerPage:1e3,...e};return fF({shouldStop:s=>s.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},pF=t=>(e,r,s)=>{let{batchSize:a,...n}=s||{},c={taskIDs:[],objectIDs:[]},f=(p=0)=>{let h=[],E;for(E=p;E({action:r,body:C})),n).then(C=>(c.objectIDs=c.objectIDs.concat(C.objectIDs),c.taskIDs.push(C.taskID),E++,f(E)))};return Jt.createWaitablePromise(f(),(p,h)=>Promise.all(p.taskIDs.map(E=>hs(t)(E,h))))},Bft=t=>e=>Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/clear",t.indexName)},e),(r,s)=>hs(t)(r.taskID,s)),vft=t=>e=>{let{forwardToReplicas:r,...s}=e||{},a=gl.createMappedRequestOptions(s);return r&&(a.queryParameters.forwardToReplicas=1),Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,c)=>hs(t)(n.taskID,c))},Sft=t=>e=>{let{forwardToReplicas:r,...s}=e||{},a=gl.createMappedRequestOptions(s);return r&&(a.queryParameters.forwardToReplicas=1),Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,c)=>hs(t)(n.taskID,c))},Dft=t=>(e,r)=>Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(s,a)=>hs(t)(s.taskID,a)),Pft=t=>e=>Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Delete,path:Jt.encode("1/indexes/%s",t.indexName)},e),(r,s)=>hs(t)(r.taskID,s)),bft=t=>(e,r)=>Jt.createWaitablePromise(dIe(t)([e],r).then(s=>({taskID:s.taskIDs[0]})),(s,a)=>hs(t)(s.taskID,a)),dIe=t=>(e,r)=>{let s=e.map(a=>({objectID:a}));return pF(t)(s,km.DeleteObject,r)},xft=t=>(e,r)=>{let{forwardToReplicas:s,...a}=r||{},n=gl.createMappedRequestOptions(a);return s&&(n.queryParameters.forwardToReplicas=1),Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Delete,path:Jt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(c,f)=>hs(t)(c.taskID,f))},kft=t=>(e,r)=>{let{forwardToReplicas:s,...a}=r||{},n=gl.createMappedRequestOptions(a);return s&&(n.queryParameters.forwardToReplicas=1),Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Delete,path:Jt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(c,f)=>hs(t)(c.taskID,f))},Qft=t=>e=>mIe(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),Rft=t=>(e,r,s)=>t.transporter.read({method:Pr.MethodEnum.Post,path:Jt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},s),Tft=t=>(e,r)=>{let{query:s,paginate:a,...n}=r||{},c=0,f=()=>IIe(t)(s||"",{...n,page:c}).then(p=>{for(let[h,E]of Object.entries(p.hits))if(e(E))return{object:E,position:parseInt(h,10),page:c};if(c++,a===!1||c>=p.nbPages)throw AIe();return f()});return f()},Fft=t=>(e,r)=>t.transporter.read({method:Pr.MethodEnum.Get,path:Jt.encode("1/indexes/%s/%s",t.indexName,e)},r),Nft=()=>(t,e)=>{for(let[r,s]of Object.entries(t.hits))if(s.objectID===e)return parseInt(r,10);return-1},Oft=t=>(e,r)=>{let{attributesToRetrieve:s,...a}=r||{},n=e.map(c=>({indexName:t.indexName,objectID:c,...s?{attributesToRetrieve:s}:{}}));return t.transporter.read({method:Pr.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},Lft=t=>(e,r)=>t.transporter.read({method:Pr.MethodEnum.Get,path:Jt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),mIe=t=>e=>t.transporter.read({method:Pr.MethodEnum.Get,path:Jt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),Mft=t=>(e,r)=>t.transporter.read({method:Pr.MethodEnum.Get,path:Jt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),yIe=t=>(e,r)=>t.transporter.read({method:Pr.MethodEnum.Get,path:Jt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),Uft=t=>(e,r)=>Jt.createWaitablePromise(EIe(t)([e],r).then(s=>({objectID:s.objectIDs[0],taskID:s.taskIDs[0]})),(s,a)=>hs(t)(s.taskID,a)),EIe=t=>(e,r)=>{let{createIfNotExists:s,...a}=r||{},n=s?km.PartialUpdateObject:km.PartialUpdateObjectNoCreate;return pF(t)(e,n,a)},_ft=t=>(e,r)=>{let{safe:s,autoGenerateObjectIDIfNotExist:a,batchSize:n,...c}=r||{},f=(I,T,N,U)=>Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/operation",I),data:{operation:N,destination:T}},U),(W,ee)=>hs(t)(W.taskID,ee)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,E=t9({appId:t.appId,transporter:t.transporter,indexName:h}),C=[],S=f(t.indexName,h,"copy",{...c,scope:["settings","synonyms","rules"]});C.push(S);let b=(s?S.wait(c):S).then(()=>{let I=E(e,{...c,autoGenerateObjectIDIfNotExist:a,batchSize:n});return C.push(I),s?I.wait(c):I}).then(()=>{let I=f(h,t.indexName,"move",c);return C.push(I),s?I.wait(c):I}).then(()=>Promise.all(C)).then(([I,T,N])=>({objectIDs:T.objectIDs,taskIDs:[I.taskID,...T.taskIDs,N.taskID]}));return Jt.createWaitablePromise(b,(I,T)=>Promise.all(C.map(N=>N.wait(T))))},Hft=t=>(e,r)=>r9(t)(e,{...r,clearExistingRules:!0}),jft=t=>(e,r)=>n9(t)(e,{...r,clearExistingSynonyms:!0}),Gft=t=>(e,r)=>Jt.createWaitablePromise(t9(t)([e],r).then(s=>({objectID:s.objectIDs[0],taskID:s.taskIDs[0]})),(s,a)=>hs(t)(s.taskID,a)),t9=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:s,...a}=r||{},n=s?km.AddObject:km.UpdateObject;if(n===km.UpdateObject){for(let c of e)if(c.objectID===void 0)return Jt.createWaitablePromise(Promise.reject(fIe()))}return pF(t)(e,n,a)},qft=t=>(e,r)=>r9(t)([e],r),r9=t=>(e,r)=>{let{forwardToReplicas:s,clearExistingRules:a,...n}=r||{},c=gl.createMappedRequestOptions(n);return s&&(c.queryParameters.forwardToReplicas=1),a&&(c.queryParameters.clearExistingRules=1),Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},c),(f,p)=>hs(t)(f.taskID,p))},Wft=t=>(e,r)=>n9(t)([e],r),n9=t=>(e,r)=>{let{forwardToReplicas:s,clearExistingSynonyms:a,replaceExistingSynonyms:n,...c}=r||{},f=gl.createMappedRequestOptions(c);return s&&(f.queryParameters.forwardToReplicas=1),(n||a)&&(f.queryParameters.replaceExistingSynonyms=1),Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},f),(p,h)=>hs(t)(p.taskID,h))},IIe=t=>(e,r)=>t.transporter.read({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),CIe=t=>(e,r,s)=>t.transporter.read({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},s),wIe=t=>(e,r)=>t.transporter.read({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),BIe=t=>(e,r)=>t.transporter.read({method:Pr.MethodEnum.Post,path:Jt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),Yft=t=>(e,r)=>{let{forwardToReplicas:s,...a}=r||{},n=gl.createMappedRequestOptions(a);return s&&(n.queryParameters.forwardToReplicas=1),Jt.createWaitablePromise(t.transporter.write({method:Pr.MethodEnum.Put,path:Jt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(c,f)=>hs(t)(c.taskID,f))},hs=t=>(e,r)=>Jt.createRetryablePromise(s=>yIe(t)(e,r).then(a=>a.status!=="published"?s():void 0)),Vft={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"},km={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},hF={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},Jft={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},Kft={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Ft.ApiKeyACLEnum=Vft;Ft.BatchActionEnum=km;Ft.ScopeEnum=hF;Ft.StrategyEnum=Jft;Ft.SynonymEnum=Kft;Ft.addApiKey=_ut;Ft.assignUserID=Hut;Ft.assignUserIDs=jut;Ft.batch=gIe;Ft.browseObjects=Ift;Ft.browseRules=Cft;Ft.browseSynonyms=wft;Ft.chunkedBatch=pF;Ft.clearDictionaryEntries=Gut;Ft.clearObjects=Bft;Ft.clearRules=vft;Ft.clearSynonyms=Sft;Ft.copyIndex=AF;Ft.copyRules=qut;Ft.copySettings=Wut;Ft.copySynonyms=Yut;Ft.createBrowsablePromise=fF;Ft.createMissingObjectIDError=fIe;Ft.createObjectNotFoundError=AIe;Ft.createSearchClient=Uut;Ft.createValidUntilNotFoundError=pIe;Ft.customRequest=Vut;Ft.deleteApiKey=Jut;Ft.deleteBy=Dft;Ft.deleteDictionaryEntries=Kut;Ft.deleteIndex=Pft;Ft.deleteObject=bft;Ft.deleteObjects=dIe;Ft.deleteRule=xft;Ft.deleteSynonym=kft;Ft.exists=Qft;Ft.findAnswers=Rft;Ft.findObject=Tft;Ft.generateSecuredApiKey=zut;Ft.getApiKey=kS;Ft.getAppTask=hIe;Ft.getDictionarySettings=Zut;Ft.getLogs=Xut;Ft.getObject=Fft;Ft.getObjectPosition=Nft;Ft.getObjects=Oft;Ft.getRule=Lft;Ft.getSecuredApiKeyRemainingValidity=$ut;Ft.getSettings=mIe;Ft.getSynonym=Mft;Ft.getTask=yIe;Ft.getTopUserIDs=eft;Ft.getUserID=tft;Ft.hasPendingMappings=rft;Ft.initIndex=QS;Ft.listApiKeys=nft;Ft.listClusters=ift;Ft.listIndices=sft;Ft.listUserIDs=oft;Ft.moveIndex=aft;Ft.multipleBatch=lft;Ft.multipleGetObjects=cft;Ft.multipleQueries=uft;Ft.multipleSearchForFacetValues=fft;Ft.partialUpdateObject=Uft;Ft.partialUpdateObjects=EIe;Ft.removeUserID=Aft;Ft.replaceAllObjects=_ft;Ft.replaceAllRules=Hft;Ft.replaceAllSynonyms=jft;Ft.replaceDictionaryEntries=pft;Ft.restoreApiKey=hft;Ft.saveDictionaryEntries=gft;Ft.saveObject=Gft;Ft.saveObjects=t9;Ft.saveRule=qft;Ft.saveRules=r9;Ft.saveSynonym=Wft;Ft.saveSynonyms=n9;Ft.search=IIe;Ft.searchDictionaryEntries=dft;Ft.searchForFacetValues=CIe;Ft.searchRules=wIe;Ft.searchSynonyms=BIe;Ft.searchUserIDs=mft;Ft.setDictionarySettings=yft;Ft.setSettings=Yft;Ft.updateApiKey=Eft;Ft.waitAppTask=aw;Ft.waitTask=hs});var DIe=_((yJt,SIe)=>{SIe.exports=vIe()});var PIe=_(gF=>{"use strict";Object.defineProperty(gF,"__esModule",{value:!0});function zft(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var Zft={Debug:1,Info:2,Error:3};gF.LogLevelEnum=Zft;gF.createNullLogger=zft});var xIe=_((IJt,bIe)=>{bIe.exports=PIe()});var TIe=_(i9=>{"use strict";Object.defineProperty(i9,"__esModule",{value:!0});var kIe=Ie("http"),QIe=Ie("https"),Xft=Ie("url"),RIe={keepAlive:!0},$ft=new kIe.Agent(RIe),eAt=new QIe.Agent(RIe);function tAt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:s={}}={}){let a=e||t||$ft,n=r||t||eAt;return{send(c){return new Promise(f=>{let p=Xft.parse(c.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,E={...s,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:c.method,headers:{...s&&s.headers?s.headers:{},...c.headers},...p.port!==void 0?{port:p.port||""}:{}},C=(p.protocol==="https:"?QIe:kIe).request(E,T=>{let N=[];T.on("data",U=>{N=N.concat(U)}),T.on("end",()=>{clearTimeout(b),clearTimeout(I),f({status:T.statusCode||0,content:Buffer.concat(N).toString(),isTimedOut:!1})})}),S=(T,N)=>setTimeout(()=>{C.abort(),f({status:0,content:N,isTimedOut:!0})},T*1e3),b=S(c.connectTimeout,"Connection timeout"),I;C.on("error",T=>{clearTimeout(b),clearTimeout(I),f({status:0,content:T.message,isTimedOut:!1})}),C.once("response",()=>{clearTimeout(b),I=S(c.responseTimeout,"Socket timeout")}),c.data!==void 0&&C.write(c.data),C.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}i9.createNodeHttpRequester=tAt});var NIe=_((wJt,FIe)=>{FIe.exports=TIe()});var UIe=_((BJt,MIe)=>{"use strict";var OIe=TEe(),rAt=OEe(),lw=oIe(),o9=vS(),s9=uIe(),Gt=DIe(),nAt=xIe(),iAt=NIe(),sAt=PS();function LIe(t,e,r){let s={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:iAt.createNodeHttpRequester(),logger:nAt.createNullLogger(),responsesCache:OIe.createNullCache(),requestsCache:OIe.createNullCache(),hostsCache:rAt.createInMemoryCache(),userAgent:sAt.createUserAgent(o9.version).add({segment:"Node.js",version:process.versions.node})},a={...s,...r},n=()=>c=>s9.createPersonalizationClient({...s,...c,methods:{getPersonalizationStrategy:s9.getPersonalizationStrategy,setPersonalizationStrategy:s9.setPersonalizationStrategy}});return Gt.createSearchClient({...a,methods:{search:Gt.multipleQueries,searchForFacetValues:Gt.multipleSearchForFacetValues,multipleBatch:Gt.multipleBatch,multipleGetObjects:Gt.multipleGetObjects,multipleQueries:Gt.multipleQueries,copyIndex:Gt.copyIndex,copySettings:Gt.copySettings,copyRules:Gt.copyRules,copySynonyms:Gt.copySynonyms,moveIndex:Gt.moveIndex,listIndices:Gt.listIndices,getLogs:Gt.getLogs,listClusters:Gt.listClusters,multipleSearchForFacetValues:Gt.multipleSearchForFacetValues,getApiKey:Gt.getApiKey,addApiKey:Gt.addApiKey,listApiKeys:Gt.listApiKeys,updateApiKey:Gt.updateApiKey,deleteApiKey:Gt.deleteApiKey,restoreApiKey:Gt.restoreApiKey,assignUserID:Gt.assignUserID,assignUserIDs:Gt.assignUserIDs,getUserID:Gt.getUserID,searchUserIDs:Gt.searchUserIDs,listUserIDs:Gt.listUserIDs,getTopUserIDs:Gt.getTopUserIDs,removeUserID:Gt.removeUserID,hasPendingMappings:Gt.hasPendingMappings,generateSecuredApiKey:Gt.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Gt.getSecuredApiKeyRemainingValidity,destroy:o9.destroy,clearDictionaryEntries:Gt.clearDictionaryEntries,deleteDictionaryEntries:Gt.deleteDictionaryEntries,getDictionarySettings:Gt.getDictionarySettings,getAppTask:Gt.getAppTask,replaceDictionaryEntries:Gt.replaceDictionaryEntries,saveDictionaryEntries:Gt.saveDictionaryEntries,searchDictionaryEntries:Gt.searchDictionaryEntries,setDictionarySettings:Gt.setDictionarySettings,waitAppTask:Gt.waitAppTask,customRequest:Gt.customRequest,initIndex:c=>f=>Gt.initIndex(c)(f,{methods:{batch:Gt.batch,delete:Gt.deleteIndex,findAnswers:Gt.findAnswers,getObject:Gt.getObject,getObjects:Gt.getObjects,saveObject:Gt.saveObject,saveObjects:Gt.saveObjects,search:Gt.search,searchForFacetValues:Gt.searchForFacetValues,waitTask:Gt.waitTask,setSettings:Gt.setSettings,getSettings:Gt.getSettings,partialUpdateObject:Gt.partialUpdateObject,partialUpdateObjects:Gt.partialUpdateObjects,deleteObject:Gt.deleteObject,deleteObjects:Gt.deleteObjects,deleteBy:Gt.deleteBy,clearObjects:Gt.clearObjects,browseObjects:Gt.browseObjects,getObjectPosition:Gt.getObjectPosition,findObject:Gt.findObject,exists:Gt.exists,saveSynonym:Gt.saveSynonym,saveSynonyms:Gt.saveSynonyms,getSynonym:Gt.getSynonym,searchSynonyms:Gt.searchSynonyms,browseSynonyms:Gt.browseSynonyms,deleteSynonym:Gt.deleteSynonym,clearSynonyms:Gt.clearSynonyms,replaceAllObjects:Gt.replaceAllObjects,replaceAllSynonyms:Gt.replaceAllSynonyms,searchRules:Gt.searchRules,getRule:Gt.getRule,deleteRule:Gt.deleteRule,saveRule:Gt.saveRule,saveRules:Gt.saveRules,replaceAllRules:Gt.replaceAllRules,browseRules:Gt.browseRules,clearRules:Gt.clearRules}}),initAnalytics:()=>c=>lw.createAnalyticsClient({...s,...c,methods:{addABTest:lw.addABTest,getABTest:lw.getABTest,getABTests:lw.getABTests,stopABTest:lw.stopABTest,deleteABTest:lw.deleteABTest}}),initPersonalization:n,initRecommendation:()=>c=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(c))}})}LIe.version=o9.version;MIe.exports=LIe});var l9=_((vJt,a9)=>{var _Ie=UIe();a9.exports=_Ie;a9.exports.default=_Ie});var f9=_((DJt,GIe)=>{"use strict";var jIe=Object.getOwnPropertySymbols,aAt=Object.prototype.hasOwnProperty,lAt=Object.prototype.propertyIsEnumerable;function cAt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function uAt(){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 s=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(s.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}}GIe.exports=uAt()?Object.assign:function(t,e){for(var r,s=cAt(t),a,n=1;n{"use strict";var p9=f9(),cw=60103,YIe=60106;Dn.Fragment=60107;Dn.StrictMode=60108;Dn.Profiler=60114;var VIe=60109,JIe=60110,KIe=60112;Dn.Suspense=60113;var zIe=60115,ZIe=60116;typeof Symbol=="function"&&Symbol.for&&(Gc=Symbol.for,cw=Gc("react.element"),YIe=Gc("react.portal"),Dn.Fragment=Gc("react.fragment"),Dn.StrictMode=Gc("react.strict_mode"),Dn.Profiler=Gc("react.profiler"),VIe=Gc("react.provider"),JIe=Gc("react.context"),KIe=Gc("react.forward_ref"),Dn.Suspense=Gc("react.suspense"),zIe=Gc("react.memo"),ZIe=Gc("react.lazy"));var Gc,qIe=typeof Symbol=="function"&&Symbol.iterator;function fAt(t){return t===null||typeof t!="object"?null:(t=qIe&&t[qIe]||t["@@iterator"],typeof t=="function"?t:null)}function RS(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;r{"use strict";oCe.exports=sCe()});var yF=_((xJt,aCe)=>{function dAt(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}aCe.exports=dAt});var cCe=_((kJt,lCe)=>{var mAt=typeof global=="object"&&global&&global.Object===Object&&global;lCe.exports=mAt});var y9=_((QJt,uCe)=>{var yAt=cCe(),EAt=typeof self=="object"&&self&&self.Object===Object&&self,IAt=yAt||EAt||Function("return this")();uCe.exports=IAt});var ACe=_((RJt,fCe)=>{var CAt=y9(),wAt=function(){return CAt.Date.now()};fCe.exports=wAt});var hCe=_((TJt,pCe)=>{var BAt=/\s/;function vAt(t){for(var e=t.length;e--&&BAt.test(t.charAt(e)););return e}pCe.exports=vAt});var dCe=_((FJt,gCe)=>{var SAt=hCe(),DAt=/^\s+/;function PAt(t){return t&&t.slice(0,SAt(t)+1).replace(DAt,"")}gCe.exports=PAt});var E9=_((NJt,mCe)=>{var bAt=y9(),xAt=bAt.Symbol;mCe.exports=xAt});var CCe=_((OJt,ICe)=>{var yCe=E9(),ECe=Object.prototype,kAt=ECe.hasOwnProperty,QAt=ECe.toString,TS=yCe?yCe.toStringTag:void 0;function RAt(t){var e=kAt.call(t,TS),r=t[TS];try{t[TS]=void 0;var s=!0}catch{}var a=QAt.call(t);return s&&(e?t[TS]=r:delete t[TS]),a}ICe.exports=RAt});var BCe=_((LJt,wCe)=>{var TAt=Object.prototype,FAt=TAt.toString;function NAt(t){return FAt.call(t)}wCe.exports=NAt});var PCe=_((MJt,DCe)=>{var vCe=E9(),OAt=CCe(),LAt=BCe(),MAt="[object Null]",UAt="[object Undefined]",SCe=vCe?vCe.toStringTag:void 0;function _At(t){return t==null?t===void 0?UAt:MAt:SCe&&SCe in Object(t)?OAt(t):LAt(t)}DCe.exports=_At});var xCe=_((UJt,bCe)=>{function HAt(t){return t!=null&&typeof t=="object"}bCe.exports=HAt});var QCe=_((_Jt,kCe)=>{var jAt=PCe(),GAt=xCe(),qAt="[object Symbol]";function WAt(t){return typeof t=="symbol"||GAt(t)&&jAt(t)==qAt}kCe.exports=WAt});var NCe=_((HJt,FCe)=>{var YAt=dCe(),RCe=yF(),VAt=QCe(),TCe=NaN,JAt=/^[-+]0x[0-9a-f]+$/i,KAt=/^0b[01]+$/i,zAt=/^0o[0-7]+$/i,ZAt=parseInt;function XAt(t){if(typeof t=="number")return t;if(VAt(t))return TCe;if(RCe(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=RCe(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=YAt(t);var r=KAt.test(t);return r||zAt.test(t)?ZAt(t.slice(2),r?2:8):JAt.test(t)?TCe:+t}FCe.exports=XAt});var MCe=_((jJt,LCe)=>{var $At=yF(),I9=ACe(),OCe=NCe(),ept="Expected a function",tpt=Math.max,rpt=Math.min;function npt(t,e,r){var s,a,n,c,f,p,h=0,E=!1,C=!1,S=!0;if(typeof t!="function")throw new TypeError(ept);e=OCe(e)||0,$At(r)&&(E=!!r.leading,C="maxWait"in r,n=C?tpt(OCe(r.maxWait)||0,e):n,S="trailing"in r?!!r.trailing:S);function b(le){var me=s,pe=a;return s=a=void 0,h=le,c=t.apply(pe,me),c}function I(le){return h=le,f=setTimeout(U,e),E?b(le):c}function T(le){var me=le-p,pe=le-h,Be=e-me;return C?rpt(Be,n-pe):Be}function N(le){var me=le-p,pe=le-h;return p===void 0||me>=e||me<0||C&&pe>=n}function U(){var le=I9();if(N(le))return W(le);f=setTimeout(U,T(le))}function W(le){return f=void 0,S&&s?b(le):(s=a=void 0,c)}function ee(){f!==void 0&&clearTimeout(f),h=0,s=p=a=f=void 0}function ie(){return f===void 0?c:W(I9())}function ue(){var le=I9(),me=N(le);if(s=arguments,a=this,p=le,me){if(f===void 0)return I(p);if(C)return clearTimeout(f),f=setTimeout(U,e),b(p)}return f===void 0&&(f=setTimeout(U,e)),c}return ue.cancel=ee,ue.flush=ie,ue}LCe.exports=npt});var _Ce=_((GJt,UCe)=>{var ipt=MCe(),spt=yF(),opt="Expected a function";function apt(t,e,r){var s=!0,a=!0;if(typeof t!="function")throw new TypeError(opt);return spt(r)&&(s="leading"in r?!!r.leading:s,a="trailing"in r?!!r.trailing:a),ipt(t,e,{leading:s,maxWait:e,trailing:a})}UCe.exports=apt});var w9=_((qJt,C9)=>{"use strict";var Cn=C9.exports;C9.exports.default=Cn;var Zn="\x1B[",NS="\x1B]",fw="\x07",EF=";",HCe=process.env.TERM_PROGRAM==="Apple_Terminal";Cn.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Zn+(t+1)+"G":Zn+(e+1)+";"+(t+1)+"H"};Cn.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Zn+-t+"D":t>0&&(r+=Zn+t+"C"),e<0?r+=Zn+-e+"A":e>0&&(r+=Zn+e+"B"),r};Cn.cursorUp=(t=1)=>Zn+t+"A";Cn.cursorDown=(t=1)=>Zn+t+"B";Cn.cursorForward=(t=1)=>Zn+t+"C";Cn.cursorBackward=(t=1)=>Zn+t+"D";Cn.cursorLeft=Zn+"G";Cn.cursorSavePosition=HCe?"\x1B7":Zn+"s";Cn.cursorRestorePosition=HCe?"\x1B8":Zn+"u";Cn.cursorGetPosition=Zn+"6n";Cn.cursorNextLine=Zn+"E";Cn.cursorPrevLine=Zn+"F";Cn.cursorHide=Zn+"?25l";Cn.cursorShow=Zn+"?25h";Cn.eraseLines=t=>{let e="";for(let r=0;r[NS,"8",EF,EF,e,fw,t,NS,"8",EF,EF,fw].join("");Cn.image=(t,e={})=>{let r=`${NS}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")+fw};Cn.iTerm={setCwd:(t=process.cwd())=>`${NS}50;CurrentDir=${t}${fw}`,annotation:(t,e={})=>{let r=`${NS}1337;`,s=typeof e.x<"u",a=typeof e.y<"u";if((s||a)&&!(s&&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+=(s?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+fw}}});var GCe=_((WJt,B9)=>{"use strict";var jCe=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};B9.exports=jCe;B9.exports.default=jCe});var WCe=_((YJt,CF)=>{"use strict";var lpt=GCe(),IF=new WeakMap,qCe=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,s=0,a=t.displayName||t.name||"",n=function(...c){if(IF.set(n,++s),s===1)r=t.apply(this,c),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return lpt(n,t),IF.set(n,s),n};CF.exports=qCe;CF.exports.default=qCe;CF.exports.callCount=t=>{if(!IF.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return IF.get(t)}});var YCe=_((VJt,wF)=>{wF.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&wF.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&wF.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var D9=_((JJt,hw)=>{var Qi=global.process,Qm=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"};Qm(Qi)?(VCe=Ie("assert"),Aw=YCe(),JCe=/^win/i.test(Qi.platform),OS=Ie("events"),typeof OS!="function"&&(OS=OS.EventEmitter),Qi.__signal_exit_emitter__?Js=Qi.__signal_exit_emitter__:(Js=Qi.__signal_exit_emitter__=new OS,Js.count=0,Js.emitted={}),Js.infinite||(Js.setMaxListeners(1/0),Js.infinite=!0),hw.exports=function(t,e){if(!Qm(global.process))return function(){};VCe.equal(typeof t,"function","a callback must be provided for exit handler"),pw===!1&&v9();var r="exit";e&&e.alwaysLast&&(r="afterexit");var s=function(){Js.removeListener(r,t),Js.listeners("exit").length===0&&Js.listeners("afterexit").length===0&&BF()};return Js.on(r,t),s},BF=function(){!pw||!Qm(global.process)||(pw=!1,Aw.forEach(function(e){try{Qi.removeListener(e,vF[e])}catch{}}),Qi.emit=SF,Qi.reallyExit=S9,Js.count-=1)},hw.exports.unload=BF,Rm=function(e,r,s){Js.emitted[e]||(Js.emitted[e]=!0,Js.emit(e,r,s))},vF={},Aw.forEach(function(t){vF[t]=function(){if(Qm(global.process)){var r=Qi.listeners(t);r.length===Js.count&&(BF(),Rm("exit",null,t),Rm("afterexit",null,t),JCe&&t==="SIGHUP"&&(t="SIGINT"),Qi.kill(Qi.pid,t))}}}),hw.exports.signals=function(){return Aw},pw=!1,v9=function(){pw||!Qm(global.process)||(pw=!0,Js.count+=1,Aw=Aw.filter(function(e){try{return Qi.on(e,vF[e]),!0}catch{return!1}}),Qi.emit=zCe,Qi.reallyExit=KCe)},hw.exports.load=v9,S9=Qi.reallyExit,KCe=function(e){Qm(global.process)&&(Qi.exitCode=e||0,Rm("exit",Qi.exitCode,null),Rm("afterexit",Qi.exitCode,null),S9.call(Qi,Qi.exitCode))},SF=Qi.emit,zCe=function(e,r){if(e==="exit"&&Qm(global.process)){r!==void 0&&(Qi.exitCode=r);var s=SF.apply(this,arguments);return Rm("exit",Qi.exitCode,null),Rm("afterexit",Qi.exitCode,null),s}else return SF.apply(this,arguments)}):hw.exports=function(){return function(){}};var VCe,Aw,JCe,OS,Js,BF,Rm,vF,pw,v9,S9,KCe,SF,zCe});var XCe=_((KJt,ZCe)=>{"use strict";var cpt=WCe(),upt=D9();ZCe.exports=cpt(()=>{upt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var P9=_(gw=>{"use strict";var fpt=XCe(),DF=!1;gw.show=(t=process.stderr)=>{t.isTTY&&(DF=!1,t.write("\x1B[?25h"))};gw.hide=(t=process.stderr)=>{t.isTTY&&(fpt(),DF=!0,t.write("\x1B[?25l"))};gw.toggle=(t,e)=>{t!==void 0&&(DF=t),DF?gw.show(e):gw.hide(e)}});var rwe=_(LS=>{"use strict";var twe=LS&&LS.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(LS,"__esModule",{value:!0});var $Ce=twe(w9()),ewe=twe(P9()),Apt=(t,{showCursor:e=!1}={})=>{let r=0,s="",a=!1,n=c=>{!e&&!a&&(ewe.default.hide(),a=!0);let f=c+` -`;f!==s&&(s=f,t.write($Ce.default.eraseLines(r)+f),r=f.split(` -`).length)};return n.clear=()=>{t.write($Ce.default.eraseLines(r)),s="",r=0},n.done=()=>{s="",r=0,e||(ewe.default.show(),a=!1)},n};LS.default={create:Apt}});var nwe=_((XJt,ppt)=>{ppt.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 owe=_(tc=>{"use strict";var swe=nwe(),uA=process.env;Object.defineProperty(tc,"_vendors",{value:swe.map(function(t){return t.constant})});tc.name=null;tc.isPR=null;swe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(s){return iwe(s)});if(tc[t.constant]=r,r)switch(tc.name=t.name,typeof t.pr){case"string":tc.isPR=!!uA[t.pr];break;case"object":"env"in t.pr?tc.isPR=t.pr.env in uA&&uA[t.pr.env]!==t.pr.ne:"any"in t.pr?tc.isPR=t.pr.any.some(function(s){return!!uA[s]}):tc.isPR=iwe(t.pr);break;default:tc.isPR=null}});tc.isCI=!!(uA.CI||uA.CONTINUOUS_INTEGRATION||uA.BUILD_NUMBER||uA.RUN_ID||tc.name);function iwe(t){return typeof t=="string"?!!uA[t]:Object.keys(t).every(function(e){return uA[e]===t[e]})}});var lwe=_((eKt,awe)=>{"use strict";awe.exports=owe().isCI});var uwe=_((tKt,cwe)=>{"use strict";var hpt=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};cwe.exports=(t,{include:e,exclude:r}={})=>{let s=a=>{let n=c=>typeof c=="string"?a===c:c.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of hpt(t.constructor.prototype)){if(n==="constructor"||!s(n))continue;let c=Reflect.getOwnPropertyDescriptor(a,n);c&&typeof c.value=="function"&&(t[n]=t[n].bind(t))}return t}});var dwe=_(Vn=>{"use strict";var mw,_S,kF,F9;typeof performance=="object"&&typeof performance.now=="function"?(fwe=performance,Vn.unstable_now=function(){return fwe.now()}):(b9=Date,Awe=b9.now(),Vn.unstable_now=function(){return b9.now()-Awe});var fwe,b9,Awe;typeof window>"u"||typeof MessageChannel!="function"?(dw=null,x9=null,k9=function(){if(dw!==null)try{var t=Vn.unstable_now();dw(!0,t),dw=null}catch(e){throw setTimeout(k9,0),e}},mw=function(t){dw!==null?setTimeout(mw,0,t):(dw=t,setTimeout(k9,0))},_S=function(t,e){x9=setTimeout(t,e)},kF=function(){clearTimeout(x9)},Vn.unstable_shouldYield=function(){return!1},F9=Vn.unstable_forceFrameRate=function(){}):(pwe=window.setTimeout,hwe=window.clearTimeout,typeof console<"u"&&(gwe=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 gwe!="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")),MS=!1,US=null,PF=-1,Q9=5,R9=0,Vn.unstable_shouldYield=function(){return Vn.unstable_now()>=R9},F9=function(){},Vn.unstable_forceFrameRate=function(t){0>t||125>>1,a=t[s];if(a!==void 0&&0xF(c,r))p!==void 0&&0>xF(p,c)?(t[s]=p,t[f]=r,s=f):(t[s]=c,t[n]=r,s=n);else if(p!==void 0&&0>xF(p,r))t[s]=p,t[f]=r,s=f;else break e}}return e}return null}function xF(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var fA=[],X0=[],gpt=1,qc=null,$o=3,RF=!1,Tm=!1,HS=!1;function O9(t){for(var e=ef(X0);e!==null;){if(e.callback===null)QF(X0);else if(e.startTime<=t)QF(X0),e.sortIndex=e.expirationTime,N9(fA,e);else break;e=ef(X0)}}function L9(t){if(HS=!1,O9(t),!Tm)if(ef(fA)!==null)Tm=!0,mw(M9);else{var e=ef(X0);e!==null&&_S(L9,e.startTime-t)}}function M9(t,e){Tm=!1,HS&&(HS=!1,kF()),RF=!0;var r=$o;try{for(O9(e),qc=ef(fA);qc!==null&&(!(qc.expirationTime>e)||t&&!Vn.unstable_shouldYield());){var s=qc.callback;if(typeof s=="function"){qc.callback=null,$o=qc.priorityLevel;var a=s(qc.expirationTime<=e);e=Vn.unstable_now(),typeof a=="function"?qc.callback=a:qc===ef(fA)&&QF(fA),O9(e)}else QF(fA);qc=ef(fA)}if(qc!==null)var n=!0;else{var c=ef(X0);c!==null&&_S(L9,c.startTime-e),n=!1}return n}finally{qc=null,$o=r,RF=!1}}var dpt=F9;Vn.unstable_IdlePriority=5;Vn.unstable_ImmediatePriority=1;Vn.unstable_LowPriority=4;Vn.unstable_NormalPriority=3;Vn.unstable_Profiling=null;Vn.unstable_UserBlockingPriority=2;Vn.unstable_cancelCallback=function(t){t.callback=null};Vn.unstable_continueExecution=function(){Tm||RF||(Tm=!0,mw(M9))};Vn.unstable_getCurrentPriorityLevel=function(){return $o};Vn.unstable_getFirstCallbackNode=function(){return ef(fA)};Vn.unstable_next=function(t){switch($o){case 1:case 2:case 3:var e=3;break;default:e=$o}var r=$o;$o=e;try{return t()}finally{$o=r}};Vn.unstable_pauseExecution=function(){};Vn.unstable_requestPaint=dpt;Vn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=$o;$o=t;try{return e()}finally{$o=r}};Vn.unstable_scheduleCallback=function(t,e,r){var s=Vn.unstable_now();switch(typeof r=="object"&&r!==null?(r=r.delay,r=typeof r=="number"&&0s?(t.sortIndex=r,N9(X0,t),ef(fA)===null&&t===ef(X0)&&(HS?kF():HS=!0,_S(L9,r-s))):(t.sortIndex=a,N9(fA,t),Tm||RF||(Tm=!0,mw(M9))),t};Vn.unstable_wrapCallback=function(t){var e=$o;return function(){var r=$o;$o=e;try{return t.apply(this,arguments)}finally{$o=r}}}});var U9=_((nKt,mwe)=>{"use strict";mwe.exports=dwe()});var ywe=_((iKt,jS)=>{jS.exports=function(e){var r={},s=f9(),a=hn(),n=U9();function c(v){for(var D="https://reactjs.org/docs/error-decoder.html?invariant="+v,Q=1;Q_e||V[Se]!==ne[_e])return` -`+V[Se].replace(" at new "," at ");while(1<=Se&&0<=_e);break}}}finally{ve=!1,Error.prepareStackTrace=Q}return(v=v?v.displayName||v.name:"")?oc(v):""}var ac=[],Oi=-1;function no(v){return{current:v}}function Tt(v){0>Oi||(v.current=ac[Oi],ac[Oi]=null,Oi--)}function xn(v,D){Oi++,ac[Oi]=v.current,v.current=D}var la={},ji=no(la),Li=no(!1),Na=la;function dn(v,D){var Q=v.type.contextTypes;if(!Q)return la;var H=v.stateNode;if(H&&H.__reactInternalMemoizedUnmaskedChildContext===D)return H.__reactInternalMemoizedMaskedChildContext;var V={},ne;for(ne in Q)V[ne]=D[ne];return H&&(v=v.stateNode,v.__reactInternalMemoizedUnmaskedChildContext=D,v.__reactInternalMemoizedMaskedChildContext=V),V}function Kn(v){return v=v.childContextTypes,v!=null}function Au(){Tt(Li),Tt(ji)}function yh(v,D,Q){if(ji.current!==la)throw Error(c(168));xn(ji,D),xn(Li,Q)}function Oa(v,D,Q){var H=v.stateNode;if(v=D.childContextTypes,typeof H.getChildContext!="function")return Q;H=H.getChildContext();for(var V in H)if(!(V in v))throw Error(c(108,g(D)||"Unknown",V));return s({},Q,H)}function La(v){return v=(v=v.stateNode)&&v.__reactInternalMemoizedMergedChildContext||la,Na=ji.current,xn(ji,v),xn(Li,Li.current),!0}function Ma(v,D,Q){var H=v.stateNode;if(!H)throw Error(c(169));Q?(v=Oa(v,D,Na),H.__reactInternalMemoizedMergedChildContext=v,Tt(Li),Tt(ji),xn(ji,v)):Tt(Li),xn(Li,Q)}var $e=null,Ua=null,hf=n.unstable_now;hf();var lc=0,wn=8;function ca(v){if(1&v)return wn=15,1;if(2&v)return wn=14,2;if(4&v)return wn=13,4;var D=24&v;return D!==0?(wn=12,D):v&32?(wn=11,32):(D=192&v,D!==0?(wn=10,D):v&256?(wn=9,256):(D=3584&v,D!==0?(wn=8,D):v&4096?(wn=7,4096):(D=4186112&v,D!==0?(wn=6,D):(D=62914560&v,D!==0?(wn=5,D):v&67108864?(wn=4,67108864):v&134217728?(wn=3,134217728):(D=805306368&v,D!==0?(wn=2,D):1073741824&v?(wn=1,1073741824):(wn=8,v))))))}function LA(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 MA(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(c(358,v))}}function ua(v,D){var Q=v.pendingLanes;if(Q===0)return wn=0;var H=0,V=0,ne=v.expiredLanes,Se=v.suspendedLanes,_e=v.pingedLanes;if(ne!==0)H=ne,V=wn=15;else if(ne=Q&134217727,ne!==0){var pt=ne&~Se;pt!==0?(H=ca(pt),V=wn):(_e&=ne,_e!==0&&(H=ca(_e),V=wn))}else ne=Q&~Se,ne!==0?(H=ca(ne),V=wn):_e!==0&&(H=ca(_e),V=wn);if(H===0)return 0;if(H=31-rs(H),H=Q&((0>H?0:1<Q;Q++)D.push(v);return D}function Ha(v,D,Q){v.pendingLanes|=D;var H=D-1;v.suspendedLanes&=H,v.pingedLanes&=H,v=v.eventTimes,D=31-rs(D),v[D]=Q}var rs=Math.clz32?Math.clz32:uc,cc=Math.log,pu=Math.LN2;function uc(v){return v===0?32:31-(cc(v)/pu|0)|0}var ja=n.unstable_runWithPriority,Mi=n.unstable_scheduleCallback,Is=n.unstable_cancelCallback,vl=n.unstable_shouldYield,gf=n.unstable_requestPaint,fc=n.unstable_now,wi=n.unstable_getCurrentPriorityLevel,Qn=n.unstable_ImmediatePriority,Ac=n.unstable_UserBlockingPriority,Ke=n.unstable_NormalPriority,st=n.unstable_LowPriority,St=n.unstable_IdlePriority,lr={},te=gf!==void 0?gf:function(){},Ee=null,Oe=null,dt=!1,Et=fc(),Pt=1e4>Et?fc:function(){return fc()-Et};function tr(){switch(wi()){case Qn:return 99;case Ac:return 98;case Ke:return 97;case st:return 96;case St:return 95;default:throw Error(c(332))}}function An(v){switch(v){case 99:return Qn;case 98:return Ac;case 97:return Ke;case 96:return st;case 95:return St;default:throw Error(c(332))}}function li(v,D){return v=An(v),ja(v,D)}function Gi(v,D,Q){return v=An(v),Mi(v,D,Q)}function Rn(){if(Oe!==null){var v=Oe;Oe=null,Is(v)}Ga()}function Ga(){if(!dt&&Ee!==null){dt=!0;var v=0;try{var D=Ee;li(99,function(){for(;vTn?(_n=kr,kr=null):_n=kr.sibling;var zr=Xt(et,kr,gt[Tn],Zt);if(zr===null){kr===null&&(kr=_n);break}v&&kr&&zr.alternate===null&&D(et,kr),qe=ne(zr,qe,Tn),Xn===null?Dr=zr:Xn.sibling=zr,Xn=zr,kr=_n}if(Tn===gt.length)return Q(et,kr),Dr;if(kr===null){for(;TnTn?(_n=kr,kr=null):_n=kr.sibling;var ci=Xt(et,kr,zr.value,Zt);if(ci===null){kr===null&&(kr=_n);break}v&&kr&&ci.alternate===null&&D(et,kr),qe=ne(ci,qe,Tn),Xn===null?Dr=ci:Xn.sibling=ci,Xn=ci,kr=_n}if(zr.done)return Q(et,kr),Dr;if(kr===null){for(;!zr.done;Tn++,zr=gt.next())zr=Lr(et,zr.value,Zt),zr!==null&&(qe=ne(zr,qe,Tn),Xn===null?Dr=zr:Xn.sibling=zr,Xn=zr);return Dr}for(kr=H(et,kr);!zr.done;Tn++,zr=gt.next())zr=zn(kr,et,Tn,zr.value,Zt),zr!==null&&(v&&zr.alternate!==null&&kr.delete(zr.key===null?Tn:zr.key),qe=ne(zr,qe,Tn),Xn===null?Dr=zr:Xn.sibling=zr,Xn=zr);return v&&kr.forEach(function(Du){return D(et,Du)}),Dr}return function(et,qe,gt,Zt){var Dr=typeof gt=="object"&>!==null&>.type===E&>.key===null;Dr&&(gt=gt.props.children);var Xn=typeof gt=="object"&>!==null;if(Xn)switch(gt.$$typeof){case p:e:{for(Xn=gt.key,Dr=qe;Dr!==null;){if(Dr.key===Xn){switch(Dr.tag){case 7:if(gt.type===E){Q(et,Dr.sibling),qe=V(Dr,gt.props.children),qe.return=et,et=qe;break e}break;default:if(Dr.elementType===gt.type){Q(et,Dr.sibling),qe=V(Dr,gt.props),qe.ref=yt(et,Dr,gt),qe.return=et,et=qe;break e}}Q(et,Dr);break}else D(et,Dr);Dr=Dr.sibling}gt.type===E?(qe=kf(gt.props.children,et.mode,Zt,gt.key),qe.return=et,et=qe):(Zt=sd(gt.type,gt.key,gt.props,null,et.mode,Zt),Zt.ref=yt(et,qe,gt),Zt.return=et,et=Zt)}return Se(et);case h:e:{for(Dr=gt.key;qe!==null;){if(qe.key===Dr)if(qe.tag===4&&qe.stateNode.containerInfo===gt.containerInfo&&qe.stateNode.implementation===gt.implementation){Q(et,qe.sibling),qe=V(qe,gt.children||[]),qe.return=et,et=qe;break e}else{Q(et,qe);break}else D(et,qe);qe=qe.sibling}qe=Qo(gt,et.mode,Zt),qe.return=et,et=qe}return Se(et)}if(typeof gt=="string"||typeof gt=="number")return gt=""+gt,qe!==null&&qe.tag===6?(Q(et,qe.sibling),qe=V(qe,gt),qe.return=et,et=qe):(Q(et,qe),qe=P2(gt,et.mode,Zt),qe.return=et,et=qe),Se(et);if(mf(gt))return yi(et,qe,gt,Zt);if(Ce(gt))return za(et,qe,gt,Zt);if(Xn&&gu(et,gt),typeof gt>"u"&&!Dr)switch(et.tag){case 1:case 22:case 0:case 11:case 15:throw Error(c(152,g(et.type)||"Component"))}return Q(et,qe)}}var Mg=By(!0),e2=By(!1),vh={},ur=no(vh),Ki=no(vh),yf=no(vh);function qa(v){if(v===vh)throw Error(c(174));return v}function Ug(v,D){xn(yf,D),xn(Ki,v),xn(ur,vh),v=mt(D),Tt(ur),xn(ur,v)}function du(){Tt(ur),Tt(Ki),Tt(yf)}function Ef(v){var D=qa(yf.current),Q=qa(ur.current);D=j(Q,v.type,D),Q!==D&&(xn(Ki,v),xn(ur,D))}function wt(v){Ki.current===v&&(Tt(ur),Tt(Ki))}var di=no(0);function GA(v){for(var D=v;D!==null;){if(D.tag===13){var Q=D.memoizedState;if(Q!==null&&(Q=Q.dehydrated,Q===null||gr(Q)||Bo(Q)))return D}else if(D.tag===19&&D.memoizedProps.revealOrder!==void 0){if(D.flags&64)return D}else if(D.child!==null){D.child.return=D,D=D.child;continue}if(D===v)break;for(;D.sibling===null;){if(D.return===null||D.return===v)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}return null}var Wa=null,Aa=null,Ya=!1;function _g(v,D){var Q=Ka(5,null,null,0);Q.elementType="DELETED",Q.type="DELETED",Q.stateNode=D,Q.return=v,Q.flags=8,v.lastEffect!==null?(v.lastEffect.nextEffect=Q,v.lastEffect=Q):v.firstEffect=v.lastEffect=Q}function Sh(v,D){switch(v.tag){case 5:return D=aa(D,v.type,v.pendingProps),D!==null?(v.stateNode=D,!0):!1;case 6:return D=FA(D,v.pendingProps),D!==null?(v.stateNode=D,!0):!1;case 13:return!1;default:return!1}}function Hg(v){if(Ya){var D=Aa;if(D){var Q=D;if(!Sh(v,D)){if(D=Me(Q),!D||!Sh(v,D)){v.flags=v.flags&-1025|2,Ya=!1,Wa=v;return}_g(Wa,Q)}Wa=v,Aa=cu(D)}else v.flags=v.flags&-1025|2,Ya=!1,Wa=v}}function vy(v){for(v=v.return;v!==null&&v.tag!==5&&v.tag!==3&&v.tag!==13;)v=v.return;Wa=v}function qA(v){if(!Z||v!==Wa)return!1;if(!Ya)return vy(v),Ya=!0,!1;var D=v.type;if(v.tag!==5||D!=="head"&&D!=="body"&&!it(D,v.memoizedProps))for(D=Aa;D;)_g(v,D),D=Me(D);if(vy(v),v.tag===13){if(!Z)throw Error(c(316));if(v=v.memoizedState,v=v!==null?v.dehydrated:null,!v)throw Error(c(317));Aa=NA(v)}else Aa=Wa?Me(v.stateNode):null;return!0}function jg(){Z&&(Aa=Wa=null,Ya=!1)}var mu=[];function yu(){for(var v=0;vne))throw Error(c(301));ne+=1,bi=ns=null,D.updateQueue=null,If.current=re,v=Q(H,V)}while(Cf)}if(If.current=kt,D=ns!==null&&ns.next!==null,Eu=0,bi=ns=Gn=null,WA=!1,D)throw Error(c(300));return v}function is(){var v={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return bi===null?Gn.memoizedState=bi=v:bi=bi.next=v,bi}function bl(){if(ns===null){var v=Gn.alternate;v=v!==null?v.memoizedState:null}else v=ns.next;var D=bi===null?Gn.memoizedState:bi.next;if(D!==null)bi=D,ns=v;else{if(v===null)throw Error(c(310));ns=v,v={memoizedState:ns.memoizedState,baseState:ns.baseState,baseQueue:ns.baseQueue,queue:ns.queue,next:null},bi===null?Gn.memoizedState=bi=v:bi=bi.next=v}return bi}function bo(v,D){return typeof D=="function"?D(v):D}function wf(v){var D=bl(),Q=D.queue;if(Q===null)throw Error(c(311));Q.lastRenderedReducer=v;var H=ns,V=H.baseQueue,ne=Q.pending;if(ne!==null){if(V!==null){var Se=V.next;V.next=ne.next,ne.next=Se}H.baseQueue=V=ne,Q.pending=null}if(V!==null){V=V.next,H=H.baseState;var _e=Se=ne=null,pt=V;do{var Wt=pt.lane;if((Eu&Wt)===Wt)_e!==null&&(_e=_e.next={lane:0,action:pt.action,eagerReducer:pt.eagerReducer,eagerState:pt.eagerState,next:null}),H=pt.eagerReducer===v?pt.eagerState:v(H,pt.action);else{var Sr={lane:Wt,action:pt.action,eagerReducer:pt.eagerReducer,eagerState:pt.eagerState,next:null};_e===null?(Se=_e=Sr,ne=H):_e=_e.next=Sr,Gn.lanes|=Wt,Xg|=Wt}pt=pt.next}while(pt!==null&&pt!==V);_e===null?ne=H:_e.next=Se,vo(H,D.memoizedState)||(Je=!0),D.memoizedState=H,D.baseState=ne,D.baseQueue=_e,Q.lastRenderedState=H}return[D.memoizedState,Q.dispatch]}function Bf(v){var D=bl(),Q=D.queue;if(Q===null)throw Error(c(311));Q.lastRenderedReducer=v;var H=Q.dispatch,V=Q.pending,ne=D.memoizedState;if(V!==null){Q.pending=null;var Se=V=V.next;do ne=v(ne,Se.action),Se=Se.next;while(Se!==V);vo(ne,D.memoizedState)||(Je=!0),D.memoizedState=ne,D.baseQueue===null&&(D.baseState=ne),Q.lastRenderedState=ne}return[ne,H]}function xl(v,D,Q){var H=D._getVersion;H=H(D._source);var V=y?D._workInProgressVersionPrimary:D._workInProgressVersionSecondary;if(V!==null?v=V===H:(v=v.mutableReadLanes,(v=(Eu&v)===v)&&(y?D._workInProgressVersionPrimary=H:D._workInProgressVersionSecondary=H,mu.push(D))),v)return Q(D._source);throw mu.push(D),Error(c(350))}function yn(v,D,Q,H){var V=so;if(V===null)throw Error(c(349));var ne=D._getVersion,Se=ne(D._source),_e=If.current,pt=_e.useState(function(){return xl(V,D,Q)}),Wt=pt[1],Sr=pt[0];pt=bi;var Lr=v.memoizedState,Xt=Lr.refs,zn=Xt.getSnapshot,yi=Lr.source;Lr=Lr.subscribe;var za=Gn;return v.memoizedState={refs:Xt,source:D,subscribe:H},_e.useEffect(function(){Xt.getSnapshot=Q,Xt.setSnapshot=Wt;var et=ne(D._source);if(!vo(Se,et)){et=Q(D._source),vo(Sr,et)||(Wt(et),et=Bs(za),V.mutableReadLanes|=et&V.pendingLanes),et=V.mutableReadLanes,V.entangledLanes|=et;for(var qe=V.entanglements,gt=et;0Q?98:Q,function(){v(!0)}),li(97m2&&(D.flags|=64,V=!0,ZA(H,!1),D.lanes=33554432)}else{if(!V)if(v=GA(ne),v!==null){if(D.flags|=64,V=!0,v=v.updateQueue,v!==null&&(D.updateQueue=v,D.flags|=4),ZA(H,!0),H.tail===null&&H.tailMode==="hidden"&&!ne.alternate&&!Ya)return D=D.lastEffect=H.lastEffect,D!==null&&(D.nextEffect=null),null}else 2*Pt()-H.renderingStartTime>m2&&Q!==1073741824&&(D.flags|=64,V=!0,ZA(H,!1),D.lanes=33554432);H.isBackwards?(ne.sibling=D.child,D.child=ne):(v=H.last,v!==null?v.sibling=ne:D.child=ne,H.last=ne)}return H.tail!==null?(v=H.tail,H.rendering=v,H.tail=v.sibling,H.lastEffect=D.lastEffect,H.renderingStartTime=Pt(),v.sibling=null,D=di.current,xn(di,V?D&1|2:D&1),v):null;case 23:case 24:return B2(),v!==null&&v.memoizedState!==null!=(D.memoizedState!==null)&&H.mode!=="unstable-defer-without-hiding"&&(D.flags|=4),null}throw Error(c(156,D.tag))}function jL(v){switch(v.tag){case 1:Kn(v.type)&&Au();var D=v.flags;return D&4096?(v.flags=D&-4097|64,v):null;case 3:if(du(),Tt(Li),Tt(ji),yu(),D=v.flags,D&64)throw Error(c(285));return v.flags=D&-4097|64,v;case 5:return wt(v),null;case 13:return Tt(di),D=v.flags,D&4096?(v.flags=D&-4097|64,v):null;case 19:return Tt(di),null;case 4:return du(),null;case 10:return Og(v),null;case 23:case 24:return B2(),null;default:return null}}function Yg(v,D){try{var Q="",H=D;do Q+=$1(H),H=H.return;while(H);var V=Q}catch(ne){V=` -Error generating stack: `+ne.message+` -`+ne.stack}return{value:v,source:D,stack:V}}function Vg(v,D){try{console.error(D.value)}catch(Q){setTimeout(function(){throw Q})}}var qL=typeof WeakMap=="function"?WeakMap:Map;function i2(v,D,Q){Q=Dl(-1,Q),Q.tag=3,Q.payload={element:null};var H=D.value;return Q.callback=function(){_y||(_y=!0,y2=H),Vg(v,D)},Q}function Jg(v,D,Q){Q=Dl(-1,Q),Q.tag=3;var H=v.type.getDerivedStateFromError;if(typeof H=="function"){var V=D.value;Q.payload=function(){return Vg(v,D),H(V)}}var ne=v.stateNode;return ne!==null&&typeof ne.componentDidCatch=="function"&&(Q.callback=function(){typeof H!="function"&&(hc===null?hc=new Set([this]):hc.add(this),Vg(v,D));var Se=D.stack;this.componentDidCatch(D.value,{componentStack:Se!==null?Se:""})}),Q}var WL=typeof WeakSet=="function"?WeakSet:Set;function s2(v){var D=v.ref;if(D!==null)if(typeof D=="function")try{D(null)}catch(Q){xf(v,Q)}else D.current=null}function xy(v,D){switch(D.tag){case 0:case 11:case 15:case 22:return;case 1:if(D.flags&256&&v!==null){var Q=v.memoizedProps,H=v.memoizedState;v=D.stateNode,D=v.getSnapshotBeforeUpdate(D.elementType===D.type?Q:So(D.type,Q),H),v.__reactInternalSnapshotBeforeUpdate=D}return;case 3:F&&D.flags&256&&Rs(D.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(c(163))}function Rh(v,D){if(D=D.updateQueue,D=D!==null?D.lastEffect:null,D!==null){var Q=D=D.next;do{if((Q.tag&v)===v){var H=Q.destroy;Q.destroy=void 0,H!==void 0&&H()}Q=Q.next}while(Q!==D)}}function ub(v,D,Q){switch(Q.tag){case 0:case 11:case 15:case 22:if(D=Q.updateQueue,D=D!==null?D.lastEffect:null,D!==null){v=D=D.next;do{if((v.tag&3)===3){var H=v.create;v.destroy=H()}v=v.next}while(v!==D)}if(D=Q.updateQueue,D=D!==null?D.lastEffect:null,D!==null){v=D=D.next;do{var V=v;H=V.next,V=V.tag,V&4&&V&1&&(vb(Q,v),eM(Q,v)),v=H}while(v!==D)}return;case 1:v=Q.stateNode,Q.flags&4&&(D===null?v.componentDidMount():(H=Q.elementType===Q.type?D.memoizedProps:So(Q.type,D.memoizedProps),v.componentDidUpdate(H,D.memoizedState,v.__reactInternalSnapshotBeforeUpdate))),D=Q.updateQueue,D!==null&&Cy(Q,D,v);return;case 3:if(D=Q.updateQueue,D!==null){if(v=null,Q.child!==null)switch(Q.child.tag){case 5:v=Te(Q.child.stateNode);break;case 1:v=Q.child.stateNode}Cy(Q,D,v)}return;case 5:v=Q.stateNode,D===null&&Q.flags&4&&$s(v,Q.type,Q.memoizedProps,Q);return;case 6:return;case 4:return;case 12:return;case 13:Z&&Q.memoizedState===null&&(Q=Q.alternate,Q!==null&&(Q=Q.memoizedState,Q!==null&&(Q=Q.dehydrated,Q!==null&&uu(Q))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(c(163))}function fb(v,D){if(F)for(var Q=v;;){if(Q.tag===5){var H=Q.stateNode;D?dh(H):to(Q.stateNode,Q.memoizedProps)}else if(Q.tag===6)H=Q.stateNode,D?mh(H):jn(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 ky(v,D){if(Ua&&typeof Ua.onCommitFiberUnmount=="function")try{Ua.onCommitFiberUnmount($e,D)}catch{}switch(D.tag){case 0:case 11:case 14:case 15:case 22:if(v=D.updateQueue,v!==null&&(v=v.lastEffect,v!==null)){var Q=v=v.next;do{var H=Q,V=H.destroy;if(H=H.tag,V!==void 0)if(H&4)vb(D,Q);else{H=D;try{V()}catch(ne){xf(H,ne)}}Q=Q.next}while(Q!==v)}break;case 1:if(s2(D),v=D.stateNode,typeof v.componentWillUnmount=="function")try{v.props=D.memoizedProps,v.state=D.memoizedState,v.componentWillUnmount()}catch(ne){xf(D,ne)}break;case 5:s2(D);break;case 4:F?gb(v,D):z&&z&&(D=D.stateNode.containerInfo,v=ou(D),RA(D,v))}}function Ab(v,D){for(var Q=D;;)if(ky(v,Q),Q.child===null||F&&Q.tag===4){if(Q===D)break;for(;Q.sibling===null;){if(Q.return===null||Q.return===D)return;Q=Q.return}Q.sibling.return=Q.return,Q=Q.sibling}else Q.child.return=Q,Q=Q.child}function Qy(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 pb(v){return v.tag===5||v.tag===3||v.tag===4}function hb(v){if(F){e:{for(var D=v.return;D!==null;){if(pb(D))break e;D=D.return}throw Error(c(160))}var Q=D;switch(D=Q.stateNode,Q.tag){case 5:var H=!1;break;case 3:D=D.containerInfo,H=!0;break;case 4:D=D.containerInfo,H=!0;break;default:throw Error(c(161))}Q.flags&16&&(Af(D),Q.flags&=-17);e:t:for(Q=v;;){for(;Q.sibling===null;){if(Q.return===null||pb(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?o2(v,Q,D):a2(v,Q,D)}}function o2(v,D,Q){var H=v.tag,V=H===5||H===6;if(V)v=V?v.stateNode:v.stateNode.instance,D?eo(Q,v,D):Io(Q,v);else if(H!==4&&(v=v.child,v!==null))for(o2(v,D,Q),v=v.sibling;v!==null;)o2(v,D,Q),v=v.sibling}function a2(v,D,Q){var H=v.tag,V=H===5||H===6;if(V)v=V?v.stateNode:v.stateNode.instance,D?Hi(Q,v,D):ai(Q,v);else if(H!==4&&(v=v.child,v!==null))for(a2(v,D,Q),v=v.sibling;v!==null;)a2(v,D,Q),v=v.sibling}function gb(v,D){for(var Q=D,H=!1,V,ne;;){if(!H){H=Q.return;e:for(;;){if(H===null)throw Error(c(160));switch(V=H.stateNode,H.tag){case 5:ne=!1;break e;case 3:V=V.containerInfo,ne=!0;break e;case 4:V=V.containerInfo,ne=!0;break e}H=H.return}H=!0}if(Q.tag===5||Q.tag===6)Ab(v,Q),ne?QA(V,Q.stateNode):wo(V,Q.stateNode);else if(Q.tag===4){if(Q.child!==null){V=Q.stateNode.containerInfo,ne=!0,Q.child.return=Q,Q=Q.child;continue}}else if(ky(v,Q),Q.child!==null){Q.child.return=Q,Q=Q.child;continue}if(Q===D)break;for(;Q.sibling===null;){if(Q.return===null||Q.return===D)return;Q=Q.return,Q.tag===4&&(H=!1)}Q.sibling.return=Q.return,Q=Q.sibling}}function l2(v,D){if(F){switch(D.tag){case 0:case 11:case 14:case 15:case 22:Rh(3,D);return;case 1:return;case 5:var Q=D.stateNode;if(Q!=null){var H=D.memoizedProps;v=v!==null?v.memoizedProps:H;var V=D.type,ne=D.updateQueue;D.updateQueue=null,ne!==null&&Co(Q,ne,V,v,H,D)}return;case 6:if(D.stateNode===null)throw Error(c(162));Q=D.memoizedProps,ts(D.stateNode,v!==null?v.memoizedProps:Q,Q);return;case 3:Z&&(D=D.stateNode,D.hydrate&&(D.hydrate=!1,OA(D.containerInfo)));return;case 12:return;case 13:db(D),Kg(D);return;case 19:Kg(D);return;case 17:return;case 23:case 24:fb(D,D.memoizedState!==null);return}throw Error(c(163))}switch(D.tag){case 0:case 11:case 14:case 15:case 22:Rh(3,D);return;case 12:return;case 13:db(D),Kg(D);return;case 19:Kg(D);return;case 3:Z&&(Q=D.stateNode,Q.hydrate&&(Q.hydrate=!1,OA(Q.containerInfo)));break;case 23:case 24:return}e:if(z){switch(D.tag){case 1:case 5:case 6:case 20:break e;case 3:case 4:D=D.stateNode,RA(D.containerInfo,D.pendingChildren);break e}throw Error(c(163))}}function db(v){v.memoizedState!==null&&(d2=Pt(),F&&fb(v.child,!0))}function Kg(v){var D=v.updateQueue;if(D!==null){v.updateQueue=null;var Q=v.stateNode;Q===null&&(Q=v.stateNode=new WL),D.forEach(function(H){var V=rM.bind(null,v,H);Q.has(H)||(Q.add(H),H.then(V,V))})}}function YL(v,D){return v!==null&&(v=v.memoizedState,v===null||v.dehydrated!==null)?(D=D.memoizedState,D!==null&&D.dehydrated===null):!1}var Ry=0,Ty=1,Fy=2,zg=3,Ny=4;if(typeof Symbol=="function"&&Symbol.for){var Zg=Symbol.for;Ry=Zg("selector.component"),Ty=Zg("selector.has_pseudo_class"),Fy=Zg("selector.role"),zg=Zg("selector.test_id"),Ny=Zg("selector.text")}function Oy(v){var D=$(v);if(D!=null){if(typeof D.memoizedProps["data-testname"]!="string")throw Error(c(364));return D}if(v=ir(v),v===null)throw Error(c(362));return v.stateNode.current}function Sf(v,D){switch(D.$$typeof){case Ry:if(v.type===D.value)return!0;break;case Ty:e:{D=D.value,v=[v,0];for(var Q=0;Q";case Ty:return":has("+(Df(v)||"")+")";case Fy:return'[role="'+v.value+'"]';case Ny:return'"'+v.value+'"';case zg:return'[data-testname="'+v.value+'"]';default:throw Error(c(365,v))}}function c2(v,D){var Q=[];v=[v,0];for(var H=0;HV&&(V=Se),Q&=~ne}if(Q=V,Q=Pt()-Q,Q=(120>Q?120:480>Q?480:1080>Q?1080:1920>Q?1920:3e3>Q?3e3:4320>Q?4320:1960*JL(Q/1960))-Q,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}ws!==5&&(ws=2),pt=Yg(pt,_e),Xt=Se;do{switch(Xt.tag){case 3:ne=pt,Xt.flags|=4096,D&=-D,Xt.lanes|=D;var Xn=i2(Xt,ne,D);Iy(Xt,Xn);break e;case 1:ne=pt;var kr=Xt.type,Tn=Xt.stateNode;if(!(Xt.flags&64)&&(typeof kr.getDerivedStateFromError=="function"||Tn!==null&&typeof Tn.componentDidCatch=="function"&&(hc===null||!hc.has(Tn)))){Xt.flags|=4096,D&=-D,Xt.lanes|=D;var _n=Jg(Xt,ne,D);Iy(Xt,_n);break e}}Xt=Xt.return}while(Xt!==null)}Bb(Q)}catch(zr){D=zr,zi===Q&&Q!==null&&(zi=Q=Q.return);continue}break}while(!0)}function Cb(){var v=My.current;return My.current=kt,v===null?kt:v}function id(v,D){var Q=xr;xr|=16;var H=Cb();so===v&&Ns===D||Oh(v,D);do try{zL();break}catch(V){Ib(v,V)}while(!0);if(Fg(),xr=Q,My.current=H,zi!==null)throw Error(c(261));return so=null,Ns=0,ws}function zL(){for(;zi!==null;)wb(zi)}function ZL(){for(;zi!==null&&!vl();)wb(zi)}function wb(v){var D=Pb(v.alternate,v,XA);v.memoizedProps=v.pendingProps,D===null?Bb(v):zi=D,f2.current=null}function Bb(v){var D=v;do{var Q=D.alternate;if(v=D.return,D.flags&2048){if(Q=jL(D),Q!==null){Q.flags&=2047,zi=Q;return}v!==null&&(v.firstEffect=v.lastEffect=null,v.flags|=2048)}else{if(Q=HL(Q,D,XA),Q!==null){zi=Q;return}if(Q=D,Q.tag!==24&&Q.tag!==23||Q.memoizedState===null||XA&1073741824||!(Q.mode&4)){for(var H=0,V=Q.child;V!==null;)H|=V.lanes|V.childLanes,V=V.sibling;Q.childLanes=H}v!==null&&!(v.flags&2048)&&(v.firstEffect===null&&(v.firstEffect=D.firstEffect),D.lastEffect!==null&&(v.lastEffect!==null&&(v.lastEffect.nextEffect=D.firstEffect),v.lastEffect=D.lastEffect),1Pt()-d2?Oh(v,0):h2|=Q),ga(v,D)}function rM(v,D){var Q=v.stateNode;Q!==null&&Q.delete(D),D=0,D===0&&(D=v.mode,D&2?D&4?(Bu===0&&(Bu=Th),D=kn(62914560&~Bu),D===0&&(D=4194304)):D=tr()===99?1:2:D=1),Q=ko(),v=Gy(v,D),v!==null&&(Ha(v,D,Q),ga(v,Q))}var Pb;Pb=function(v,D,Q){var H=D.lanes;if(v!==null)if(v.memoizedProps!==D.pendingProps||Li.current)Je=!0;else if(Q&H)Je=!!(v.flags&16384);else{switch(Je=!1,D.tag){case 3:Py(D),jg();break;case 5:Ef(D);break;case 1:Kn(D.type)&&La(D);break;case 4:Ug(D,D.stateNode.containerInfo);break;case 10:Ng(D,D.memoizedProps.value);break;case 13:if(D.memoizedState!==null)return Q&D.child.childLanes?r2(v,D,Q):(xn(di,di.current&1),D=qn(v,D,Q),D!==null?D.sibling:null);xn(di,di.current&1);break;case 19:if(H=(Q&D.childLanes)!==0,v.flags&64){if(H)return lb(v,D,Q);D.flags|=64}var V=D.memoizedState;if(V!==null&&(V.rendering=null,V.tail=null,V.lastEffect=null),xn(di,di.current),H)break;return null;case 23:case 24:return D.lanes=0,mi(v,D,Q)}return qn(v,D,Q)}else Je=!1;switch(D.lanes=0,D.tag){case 2:if(H=D.type,v!==null&&(v.alternate=null,D.alternate=null,D.flags|=2),v=D.pendingProps,V=dn(D,ji.current),df(D,Q),V=qg(null,D,H,v,V,Q),D.flags|=1,typeof V=="object"&&V!==null&&typeof V.render=="function"&&V.$$typeof===void 0){if(D.tag=1,D.memoizedState=null,D.updateQueue=null,Kn(H)){var ne=!0;La(D)}else ne=!1;D.memoizedState=V.state!==null&&V.state!==void 0?V.state:null,Bh(D);var Se=H.getDerivedStateFromProps;typeof Se=="function"&&_A(D,H,Se,v),V.updater=HA,D.stateNode=V,V._reactInternals=D,Po(D,H,v,Q),D=t2(null,D,H,!0,ne,Q)}else D.tag=0,At(null,D,V,Q),D=D.child;return D;case 16:V=D.elementType;e:{switch(v!==null&&(v.alternate=null,D.alternate=null,D.flags|=2),v=D.pendingProps,ne=V._init,V=ne(V._payload),D.type=V,ne=D.tag=iM(V),v=So(V,v),ne){case 0:D=JA(null,D,V,v,Q);break e;case 1:D=ab(null,D,V,v,Q);break e;case 11:D=dr(null,D,V,v,Q);break e;case 14:D=vr(null,D,V,So(V.type,v),H,Q);break e}throw Error(c(306,V,""))}return D;case 0:return H=D.type,V=D.pendingProps,V=D.elementType===H?V:So(H,V),JA(v,D,H,V,Q);case 1:return H=D.type,V=D.pendingProps,V=D.elementType===H?V:So(H,V),ab(v,D,H,V,Q);case 3:if(Py(D),H=D.updateQueue,v===null||H===null)throw Error(c(282));if(H=D.pendingProps,V=D.memoizedState,V=V!==null?V.element:null,Lg(v,D),UA(D,H,null,Q),H=D.memoizedState.element,H===V)jg(),D=qn(v,D,Q);else{if(V=D.stateNode,(ne=V.hydrate)&&(Z?(Aa=cu(D.stateNode.containerInfo),Wa=D,ne=Ya=!0):ne=!1),ne){if(Z&&(v=V.mutableSourceEagerHydrationData,v!=null))for(V=0;V=Wt&&ne>=Lr&&V<=Sr&&Se<=Xt){v.splice(D,1);break}else if(H!==Wt||Q.width!==pt.width||XtSe){if(!(ne!==Lr||Q.height!==pt.height||SrV)){Wt>H&&(pt.width+=Wt-H,pt.x=H),Srne&&(pt.height+=Lr-ne,pt.y=ne),XtQ&&(Q=Se)),Se ")+` - -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 Te(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:f.ReactCurrentDispatcher,findHostInstanceByFiber:oM,findFiberByHostInstance:v.findFiberByHostInstance||aM,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")v=!1;else{var D=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!D.isDisabled&&D.supportsFiber)try{$e=D.inject(v),Ua=D}catch{}v=!0}return v},r.observeVisibleRects=function(v,D,Q,H){if(!qt)throw Error(c(363));v=u2(v,D);var V=nn(v,Q,H).disconnect;return{disconnect:function(){V()}}},r.registerMutableSourceForHydration=function(v,D){var Q=D._getVersion;Q=Q(D._source),v.mutableSourceEagerHydrationData==null?v.mutableSourceEagerHydrationData=[D,Q]:v.mutableSourceEagerHydrationData.push(D,Q)},r.runWithPriority=function(v,D){var Q=lc;try{return lc=v,D()}finally{lc=Q}},r.shouldSuspend=function(){return!1},r.unbatchedUpdates=function(v,D){var Q=xr;xr&=-2,xr|=8;try{return v(D)}finally{xr=Q,xr===0&&(Pf(),Rn())}},r.updateContainer=function(v,D,Q,H){var V=D.current,ne=ko(),Se=Bs(V);e:if(Q){Q=Q._reactInternals;t:{if(we(Q)!==Q||Q.tag!==1)throw Error(c(170));var _e=Q;do{switch(_e.tag){case 3:_e=_e.stateNode.context;break t;case 1:if(Kn(_e.type)){_e=_e.stateNode.__reactInternalMemoizedMergedChildContext;break t}}_e=_e.return}while(_e!==null);throw Error(c(171))}if(Q.tag===1){var pt=Q.type;if(Kn(pt)){Q=Oa(Q,pt,_e);break e}}Q=_e}else Q=la;return D.context===null?D.context=Q:D.pendingContext=Q,D=Dl(ne,Se),D.payload={element:v},H=H===void 0?null:H,H!==null&&(D.callback=H),Pl(V,D),Rl(V,Se,ne),Se},r}});var Iwe=_((sKt,Ewe)=>{"use strict";Ewe.exports=ywe()});var wwe=_((oKt,Cwe)=>{"use strict";var mpt={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};Cwe.exports=mpt});var Dwe=_((aKt,Swe)=>{"use strict";var ypt=Object.assign||function(t){for(var e=1;e"}}]),t}(),Bwe=function(){TF(t,null,[{key:"fromJS",value:function(r){var s=r.width,a=r.height;return new t(s,a)}}]);function t(e,r){H9(this,t),this.width=e,this.height=r}return TF(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),vwe=function(){function t(e,r){H9(this,t),this.unit=e,this.value=r}return TF(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case tf.UNIT_POINT:return String(this.value);case tf.UNIT_PERCENT:return this.value+"%";case tf.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();Swe.exports=function(t,e){function r(c,f,p){var h=c[f];c[f]=function(){for(var E=arguments.length,C=Array(E),S=0;S1?C-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]:tf.DIRECTION_LTR;return c.call(this,f,p,h)}),ypt({Config:e.Config,Node:e.Node,Layout:t("Layout",Ept),Size:t("Size",Bwe),Value:t("Value",vwe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},tf)}});var Pwe=_((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 Ie=="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 s=nodeFS.readFileSync(e);return r?s:s.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,s){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):s()},a.onerror=s,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 s=enlargeMemory();if(!s)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 s=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return s},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,s,a,n){var c=getCFunc(e),f=[],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,s){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var c=typeof e=="string"?e:null,f;if(r==ALLOC_NONE?f=s:f=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,c?1:e.length)),a){var s=f,p;for(assert((f&3)==0),p=f+(n&-4);s>2]=0;for(p=f+n;s>0]=0;return f}if(c==="i8")return t.subarray||t.slice?HEAPU8.set(t,f):HEAPU8.set(new Uint8Array(t),f),f;for(var h=0,E,C,S;h>0],r|=s,!(s==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var c=1024,f;e>0;)f=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,c))),n=n?n+f:f,t+=c,e-=c;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 s,a,n,c,f,p,h="";;){if(s=t[e++],!s)return h;if(!(s&128)){h+=String.fromCharCode(s);continue}if(a=t[e++]&63,(s&224)==192){h+=String.fromCharCode((s&31)<<6|a);continue}if(n=t[e++]&63,(s&240)==224?s=(s&15)<<12|a<<6|n:(c=t[e++]&63,(s&248)==240?s=(s&7)<<18|a<<12|n<<6|c:(f=t[e++]&63,(s&252)==248?s=(s&3)<<24|a<<18|n<<12|c<<6|f:(p=t[e++]&63,s=(s&1)<<30|a<<24|n<<18|c<<12|f<<6|p))),s<65536)h+=String.fromCharCode(s);else{var E=s-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,s){if(!(s>0))return 0;for(var a=r,n=r+s-1,c=0;c=55296&&f<=57343&&(f=65536+((f&1023)<<10)|t.charCodeAt(++c)&1023),f<=127){if(r>=n)break;e[r++]=f}else if(f<=2047){if(r+1>=n)break;e[r++]=192|f>>6,e[r++]=128|f&63}else if(f<=65535){if(r+2>=n)break;e[r++]=224|f>>12,e[r++]=128|f>>6&63,e[r++]=128|f&63}else if(f<=2097151){if(r+3>=n)break;e[r++]=240|f>>18,e[r++]=128|f>>12&63,e[r++]=128|f>>6&63,e[r++]=128|f&63}else if(f<=67108863){if(r+4>=n)break;e[r++]=248|f>>24,e[r++]=128|f>>18&63,e[r++]=128|f>>12&63,e[r++]=128|f>>6&63,e[r++]=128|f&63}else{if(r+5>=n)break;e[r++]=252|f>>30,e[r++]=128|f>>24&63,e[r++]=128|f>>18&63,e[r++]=128|f>>12&63,e[r++]=128|f>>6&63,e[r++]=128|f&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&&s<=57343&&(s=65536+((s&1023)<<10)|t.charCodeAt(++r)&1023),s<=127?++e:s<=2047?e+=2:s<=65535?e+=3:s<=2097151?e+=4:s<=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),s=lengthBytesUTF8(r)+1,a=_malloc(s);stringToUTF8(r,a,s);var n=_malloc(4),c=e(a,0,0,n);if(getValue(n,"i32")===0&&c)return Pointer_stringify(c)}catch{}finally{a&&_free(a),n&&_free(n),c&&_free(c)}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 s=demangle(r);return r===s?r:r+" ["+s+"]"})}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 s=r>0?r:lengthBytesUTF8(t)+1,a=new Array(s),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&&(s&=255),e.push(String.fromCharCode(s))}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 s,a;r&&(a=e+lengthBytesUTF8(t),s=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=s)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var s=0;s>0]=t.charCodeAt(s);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var s=e>>>16,a=e&65535,n=r>>>16,c=r&65535;return a*c+(s*c+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,s,a,n,c,f){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,s,a,n,c,f){return ASM_CONSTS[t](e,r,s,a,n,c,f)}function _emscripten_asm_const_iiiii(t,e,r,s,a){return ASM_CONSTS[t](e,r,s,a)}function _emscripten_asm_const_iiidddddd(t,e,r,s,a,n,c,f,p){return ASM_CONSTS[t](e,r,s,a,n,c,f,p)}function _emscripten_asm_const_iiididi(t,e,r,s,a,n,c){return ASM_CONSTS[t](e,r,s,a,n,c)}function _emscripten_asm_const_iiii(t,e,r,s){return ASM_CONSTS[t](e,r,s)}function _emscripten_asm_const_iiiid(t,e,r,s,a){return ASM_CONSTS[t](e,r,s,a)}function _emscripten_asm_const_iiiiii(t,e,r,s,a,n){return ASM_CONSTS[t](e,r,s,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,s){var a=arguments.length,n=a<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,r):s,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,s);else for(var f=t.length-1;f>=0;f--)(c=t[f])&&(n=(a<3?c(n):a>3?c(e,r,n):c(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,s){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=s/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 c=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,c)},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(c){c.source===window&&c.data===s&&(c.stopPropagation(),r.shift()())};var a=n,r=[],s="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(f){r.push(f),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(f),window.postMessage({target:s})):window.postMessage(s,"*")}}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,s,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=s;var n;typeof s<"u"?n=function(){Module.dynCall_vi(t,s)}:n=function(){Module.dynCall_v(t)};var c=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,C=E%1==0?E-1:Math.floor(E);h.counted?Browser.mainLoop.remainingBlockers=C:(C=C+.5,Browser.mainLoop.remainingBlockers=(8*E+C)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),c1&&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),!(c0?_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,c,f,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(c)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(c)}))}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 C=Browser.URLObject.createObjectURL(h),S=new Image;S.onload=function(){assert(S.complete,"Image "+c+" could not be decoded");var I=document.createElement("canvas");I.width=S.width,I.height=S.height;var T=I.getContext("2d");T.drawImage(S,0,0),Module.preloadedImages[c]=I,Browser.URLObject.revokeObjectURL(C),f&&f(n)},S.onerror=function(I){console.log("Image "+C+" could not be decoded"),p&&p()},S.src=C},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,c,f,p){var h=!1;function E(T){h||(h=!0,Module.preloadedAudios[c]=T,f&&f(n))}function C(){h||(h=!0,Module.preloadedAudios[c]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var S=new Blob([n],{type:Browser.getMimetype(c)})}catch{return C()}var b=Browser.URLObject.createObjectURL(S),I=new Audio;I.addEventListener("canplaythrough",function(){E(I)},!1),I.onerror=function(N){if(h)return;console.log("warning: browser could not fully decode audio "+c+", trying slower base64 approach");function U(W){for(var ee="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ie="=",ue="",le=0,me=0,pe=0;pe=6;){var Be=le>>me-6&63;me-=6,ue+=ee[Be]}return me==2?(ue+=ee[(le&3)<<4],ue+=ie+ie):me==4&&(ue+=ee[(le&15)<<2],ue+=ie),ue}I.src="data:audio/x-"+c.substr(-3)+";base64,"+U(n),E(I)},I.src=b,Browser.safeSetTimeout(function(){E(I)},1e4)}else return C()},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 s=Module.canvas;s&&(s.requestPointerLock=s.requestPointerLock||s.mozRequestPointerLock||s.webkitRequestPointerLock||s.msRequestPointerLock||function(){},s.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},s.exitPointerLock=s.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&&s.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,s){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var c={antialias:!1,alpha:!1};if(s)for(var f in s)c[f]=s[f];n=GL.createContext(t,c),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 s=Module.canvas;function a(){Browser.isFullscreen=!1;var c=s.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===c?(s.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},s.exitFullscreen=s.exitFullscreen.bind(document),Browser.lockPointer&&s.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(c.parentNode.insertBefore(s,c),c.parentNode.removeChild(c),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(s)}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");s.parentNode.insertBefore(n,s),n.appendChild(s),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(s,a,n){return Browser.requestFullscreen(s,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,s=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 c=t.touch;if(c===void 0)return;var f=c.pageX-(a+e.left),p=c.pageY-(n+e.top);f=f*(r/e.width),p=p*(s/e.height);var h={x:f,y:p};if(t.type==="touchstart")Browser.lastTouches[c.identifier]=h,Browser.touches[c.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var E=Browser.touches[c.identifier];E||(E=h),Browser.lastTouches[c.identifier]=E,Browser.touches[c.identifier]=h}return}var C=t.pageX-(a+e.left),S=t.pageY-(n+e.top);C=C*(r/e.width),S=S*(s/e.height),Browser.mouseMovementX=C-Browser.mouseX,Browser.mouseMovementY=S-Browser.mouseY,Browser.mouseX=C,Browser.mouseY=S}},asyncLoad:function(t,e,r,s){var a=s?"":"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 s=Module.canvas;Browser.updateCanvasDimensions(s,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 s=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(s/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(s){return(typeof FS>"u"||!(s instanceof FS.ErrnoError))&&abort(s),-s.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,C,S,b){if(h==1){var I=C&896;(I==128||I==256||I==384)&&(p="X const")}var T;return b?T=E.replace("X",p).replace("Y",S):T=p.replace("X",E).replace("Y",S),T.replace(/([*&]) (?=[*&])/g,"$1")}function s(p,h,E,C,S){throw new Error(p+" type "+E.replace("X",h+"?")+(C?" with flag "+C:"")+" in "+S)}function a(p,h,E,C,S,b,I,T){b===void 0&&(b="X"),T===void 0&&(T=1);var N=E(p);if(N)return N;var U=C(p),W=U.placeholderFlag,ee=e[W];I&&ee&&(b=r(I[2],I[0],b,ee[0],"?",!0));var ie;W==0&&(ie="Unbound"),W>=10&&(ie="Corrupt"),T>20&&(ie="Deeply nested"),ie&&s(ie,p,b,W,S||"?");var ue=U.paramList[0],le=a(ue,h,E,C,S,b,ee,T+1),me,pe={flags:ee[0],id:p,name:"",paramList:[le]},Be=[],Ce="?";switch(U.placeholderFlag){case 1:me=le.spec;break;case 2:if((le.flags&15360)==1024&&le.spec.ptrSize==1){pe.flags=7168;break}case 3:case 6:case 5:me=le.spec,le.flags&15360;break;case 8:Ce=""+U.paramList[1],pe.paramList.push(U.paramList[1]);break;case 9:for(var g=0,we=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(),s=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),c=SYSCALLS.get(),f=a;return FS.llseek(r,f,c),HEAP32[n>>2]=r.position,r.getdents&&f===0&&c===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(),s=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(E,C){var S=___syscall146.buffers[E];assert(S),C===0||C===10?((E===1?Module.print:Module.printErr)(UTF8ArrayToString(S,0)),S.length=0):S.push(C)});for(var c=0;c>2],p=HEAP32[s+(c*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 s=_nbind.typeNameTbl.NBind.proto;return s.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var s=HEAPU32[t.pagePtr];if(s){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],s=new r(e);return typeIdTbl[e.id]=s,_nbind.typeNameTbl[e.name]=s,s}_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 s=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(s=[s[0],s.slice(1)]),{paramList:s,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"},s=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+s];if(!a)throw new Error("dynCall_"+s+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,s){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,s)):(r.arity=s,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 s=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 s.heap=a[r.ptrSize*8],s.ptrSize=r.ptrSize,s}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,s){return s&&s.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,s=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,s,r),s}_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,s){return function(a){return pushCString(a,s)}},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(s){return!!s},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,s){return s&&s.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(s){__extends(a,s);function a(n,c,f,p){var h=s.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var E=c,C=f,S=p;if(n!==_nbind.ptrMarker){var b=h.__nbindConstructor.apply(h,arguments);E=4608,S=HEAPU32[b/4],C=HEAPU32[b/4+1]}var I={configurable:!0,enumerable:!1,value:null,writable:!1},T={__nbindFlags:E,__nbindPtr:C};S&&(T.__nbindShared=S,_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?c=Buffer.from(n):c=new Buffer(n),c.copy(s)}else getBuffer(s).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,s,a,n){try{Module.dynCall_viiiii(t,e,r,s,a,n)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(s){if(typeof s!="number"&&s!=="longjmp")throw s;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(s){if(typeof s!="number"&&s!=="longjmp")throw s;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,s){try{return Module.dynCall_fiff(t,e,r,s)}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(s){if(typeof s!="number"&&s!=="longjmp")throw s;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,s,a){try{Module.dynCall_viddi(t,e,r,s,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,s){try{Module.dynCall_vidd(t,e,r,s)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,s){try{return Module.dynCall_iiii(t,e,r,s)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,s){try{return Module.dynCall_diii(t,e,r,s)}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(s){if(typeof s!="number"&&s!=="longjmp")throw s;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(s){if(typeof s!="number"&&s!=="longjmp")throw s;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,s,a,n){try{Module.dynCall_viiddi(t,e,r,s,a,n)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,s,a,n,c){try{Module.dynCall_viiiiii(t,e,r,s,a,n,c)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(s){if(typeof s!="number"&&s!=="longjmp")throw s;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,s,a,n){try{return Module.dynCall_iiiiii(t,e,r,s,a,n)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,s,a){try{Module.dynCall_viiid(t,e,r,s,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,s,a,n,c){try{Module.dynCall_viififi(t,e,r,s,a,n,c)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_viii(t,e,r,s){try{Module.dynCall_viii(t,e,r,s)}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,s){try{Module.dynCall_viid(t,e,r,s)}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(s){if(typeof s!="number"&&s!=="longjmp")throw s;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,s,a){try{Module.dynCall_viiii(t,e,r,s,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 s=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),c=new t.Uint8Array(r),f=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),E=new t.Float64Array(r),C=e.DYNAMICTOP_PTR|0,S=e.tempDoublePtr|0,b=e.ABORT|0,I=e.STACKTOP|0,T=e.STACK_MAX|0,N=e.cttz_i8|0,U=e.___dso_handle|0,W=0,ee=0,ie=0,ue=0,le=t.NaN,me=t.Infinity,pe=0,Be=0,Ce=0,g=0,we=0,ye=0,Ae=t.Math.floor,se=t.Math.abs,X=t.Math.sqrt,De=t.Math.pow,Te=t.Math.cos,mt=t.Math.sin,j=t.Math.tan,rt=t.Math.acos,Fe=t.Math.asin,Ne=t.Math.atan,be=t.Math.atan2,Ve=t.Math.exp,ke=t.Math.log,it=t.Math.ceil,Ue=t.Math.imul,x=t.Math.min,w=t.Math.max,P=t.Math.clz32,y=t.Math.fround,F=e.abort,z=e.assert,Z=e.enlargeMemory,$=e.getTotalMemory,oe=e.abortOnCannotGrowMemory,xe=e.invoke_viiiii,Re=e.invoke_vif,lt=e.invoke_vid,Ct=e.invoke_fiff,qt=e.invoke_vi,ir=e.invoke_vii,bt=e.invoke_ii,gn=e.invoke_viddi,br=e.invoke_vidd,Ir=e.invoke_iiii,Or=e.invoke_diii,nn=e.invoke_di,ai=e.invoke_iid,Io=e.invoke_iii,ts=e.invoke_viiddi,$s=e.invoke_viiiiii,Co=e.invoke_dii,Hi=e.invoke_i,eo=e.invoke_iiiiii,wo=e.invoke_viiid,QA=e.invoke_viififi,Af=e.invoke_viii,dh=e.invoke_v,mh=e.invoke_viid,to=e.invoke_idd,jn=e.invoke_viiii,Rs=e._emscripten_asm_const_iiiii,ro=e._emscripten_asm_const_iiidddddd,ou=e._emscripten_asm_const_iiiid,au=e.__nbind_reference_external,lu=e._emscripten_asm_const_iiiiiiii,RA=e._removeAccessorPrefix,TA=e._typeModule,oa=e.__nbind_register_pool,aa=e.__decorate,FA=e._llvm_stackrestore,gr=e.___cxa_atexit,Bo=e.__extends,Me=e.__nbind_get_value_object,cu=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,Cr=e._emscripten_set_main_loop_timing,pf=e.__nbind_register_primitive,NA=e.__nbind_register_type,OA=e._emscripten_memcpy_big,uu=e.__nbind_register_function,fu=e.___setErrNo,oc=e.__nbind_register_class,ve=e.__nbind_finish,Nt=e._abort,ac=e._nbind_value,Oi=e._llvm_stacksave,no=e.___syscall54,Tt=e._defineHidden,xn=e._emscripten_set_main_loop,la=e._emscripten_get_now,ji=e.__nbind_register_callback_signature,Li=e._emscripten_asm_const_iiiiii,Na=e.__nbind_free_external,dn=e._emscripten_asm_const_iiii,Kn=e._emscripten_asm_const_iiididi,Au=e.___syscall6,yh=e._atexit,Oa=e.___syscall140,La=e.___syscall146,Ma=y(0);let $e=y(0);function Ua(o){o=o|0;var l=0;return l=I,I=I+o|0,I=I+15&-16,l|0}function hf(){return I|0}function lc(o){o=o|0,I=o}function wn(o,l){o=o|0,l=l|0,I=o,T=l}function ca(o,l){o=o|0,l=l|0,W||(W=o,ee=l)}function LA(o){o=o|0,ye=o}function MA(){return ye|0}function ua(){var o=0,l=0;Qr(8104,8,400)|0,Qr(8504,408,540)|0,o=9044,l=o+44|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));s[9088]=0,s[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,gr(17,8104,U|0)|0}function Bl(o){o=o|0,dt(o+948|0)}function Mt(o){return o=y(o),((fb(o)|0)&2147483647)>>>0>2139095040|0}function kn(o,l,u){o=o|0,l=l|0,u=u|0;e:do if(n[o+(l<<3)+4>>2]|0)o=o+(l<<3)|0;else{if((l|2|0)==3&&n[o+60>>2]|0){o=o+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[o+52>>2]|0){o=o+48|0;break e}break}default:}if(n[o+68>>2]|0){o=o+64|0;break}else{o=(l|1|0)==5?948:u;break}}while(!1);return o|0}function fa(o){o=o|0;var l=0;return l=_b(1e3)|0,Ha(o,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,Qr(l|0,8104,1e3)|0,s[o+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=o,l|0}function Ha(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;d=I,I=I+16|0,A=d,l||(n[A>>2]=u,Wg(o,5,3197,A)),I=d}function rs(){return fa(956)|0}function cc(o){o=o|0;var l=0;return l=Kt(1e3)|0,pu(l,o),Ha(n[o+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function pu(o,l){o=o|0,l=l|0;var u=0;Qr(o|0,l|0,948)|0,Dy(o+948|0,l+948|0),u=o+960|0,o=l+960|0,l=u+40|0;do n[u>>2]=n[o>>2],u=u+4|0,o=o+4|0;while((u|0)<(l|0))}function uc(o){o=o|0;var l=0,u=0,A=0,d=0;if(l=o+944|0,u=n[l>>2]|0,u|0&&(ja(u+948|0,o)|0,n[l>>2]=0),u=Mi(o)|0,u|0){l=0;do n[(Is(o,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(u|0))}u=o+948|0,A=n[u>>2]|0,d=o+952|0,l=n[d>>2]|0,(l|0)!=(A|0)&&(n[d>>2]=l+(~((l+-4-A|0)>>>2)<<2)),vl(u),Hb(o),n[2276]=(n[2276]|0)+-1}function ja(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0;A=n[o>>2]|0,k=o+4|0,u=n[k>>2]|0,m=u;e:do if((A|0)==(u|0))d=A,B=4;else for(o=A;;){if((n[o>>2]|0)==(l|0)){d=o,B=4;break e}if(o=o+4|0,(o|0)==(u|0)){o=0;break}}while(!1);return(B|0)==4&&((d|0)!=(u|0)?(A=d+4|0,o=m-A|0,l=o>>2,l&&(Q2(d|0,A|0,o|0)|0,u=n[k>>2]|0),o=d+(l<<2)|0,(u|0)==(o|0)||(n[k>>2]=u+(~((u+-4-o|0)>>>2)<<2)),o=1):o=0),o|0}function Mi(o){return o=o|0,(n[o+952>>2]|0)-(n[o+948>>2]|0)>>2|0}function Is(o,l){o=o|0,l=l|0;var u=0;return u=n[o+948>>2]|0,(n[o+952>>2]|0)-u>>2>>>0>l>>>0?o=n[u+(l<<2)>>2]|0:o=0,o|0}function vl(o){o=o|0;var l=0,u=0,A=0,d=0;A=I,I=I+32|0,l=A,d=n[o>>2]|0,u=(n[o+4>>2]|0)-d|0,((n[o+8>>2]|0)-d|0)>>>0>u>>>0&&(d=u>>2,ky(l,d,d,o+8|0),Ab(o,l),Qy(l)),I=A}function gf(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0;M=Mi(o)|0;do if(M|0){if((n[(Is(o,0)|0)+944>>2]|0)==(o|0)){if(!(ja(o+948|0,l)|0))break;Qr(l+400|0,8504,540)|0,n[l+944>>2]=0,Oe(o);break}B=n[(n[o+976>>2]|0)+12>>2]|0,k=o+948|0,R=(B|0)==0,u=0,m=0;do A=n[(n[k>>2]|0)+(m<<2)>>2]|0,(A|0)==(l|0)?Oe(o):(d=cc(A)|0,n[(n[k>>2]|0)+(u<<2)>>2]=d,n[d+944>>2]=o,R||gU[B&15](A,d,o,u),u=u+1|0),m=m+1|0;while((m|0)!=(M|0));if(u>>>0>>0){R=o+948|0,k=o+952|0,B=u,u=n[k>>2]|0;do m=(n[R>>2]|0)+(B<<2)|0,A=m+4|0,d=u-A|0,l=d>>2,l&&(Q2(m|0,A|0,d|0)|0,u=n[k>>2]|0),d=u,A=m+(l<<2)|0,(d|0)!=(A|0)&&(u=d+(~((d+-4-A|0)>>>2)<<2)|0,n[k>>2]=u),B=B+1|0;while((B|0)!=(M|0))}}while(!1)}function fc(o){o=o|0;var l=0,u=0,A=0,d=0;wi(o,(Mi(o)|0)==0,2491),wi(o,(n[o+944>>2]|0)==0,2545),l=o+948|0,u=n[l>>2]|0,A=o+952|0,d=n[A>>2]|0,(d|0)!=(u|0)&&(n[A>>2]=d+(~((d+-4-u|0)>>>2)<<2)),vl(l),l=o+976|0,u=n[l>>2]|0,Qr(o|0,8104,1e3)|0,s[u+2>>0]|0&&(n[o+4>>2]=2,n[o+12>>2]=4),n[l>>2]=u}function wi(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;d=I,I=I+16|0,A=d,l||(n[A>>2]=u,xo(o,5,3197,A)),I=d}function Qn(){return n[2276]|0}function Ac(){var o=0;return o=_b(20)|0,Ke((o|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[o>>2]=n[239],n[o+4>>2]=n[240],n[o+8>>2]=n[241],n[o+12>>2]=n[242],n[o+16>>2]=n[243],o|0}function Ke(o,l){o=o|0,l=l|0;var u=0,A=0;A=I,I=I+16|0,u=A,o||(n[u>>2]=l,xo(0,5,3197,u)),I=A}function st(o){o=o|0,Hb(o),n[2277]=(n[2277]|0)+-1}function St(o,l){o=o|0,l=l|0;var u=0;l?(wi(o,(Mi(o)|0)==0,2629),u=1):(u=0,l=0),n[o+964>>2]=l,n[o+988>>2]=u}function lr(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,m=A+8|0,d=A+4|0,B=A,n[d>>2]=l,wi(o,(n[l+944>>2]|0)==0,2709),wi(o,(n[o+964>>2]|0)==0,2763),te(o),l=o+948|0,n[B>>2]=(n[l>>2]|0)+(u<<2),n[m>>2]=n[B>>2],Ee(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=o,Oe(o),I=A}function te(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0;if(u=Mi(o)|0,u|0&&(n[(Is(o,0)|0)+944>>2]|0)!=(o|0)){A=n[(n[o+976>>2]|0)+12>>2]|0,d=o+948|0,m=(A|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=cc(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=o,m||gU[A&15](B,k,o,l),l=l+1|0;while((l|0)!=(u|0))}}function Ee(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0,Ye=0,Le=0,Qe=0,tt=0,Xe=0;tt=I,I=I+64|0,q=tt+52|0,k=tt+48|0,ae=tt+28|0,Ye=tt+24|0,Le=tt+20|0,Qe=tt,A=n[o>>2]|0,m=A,l=A+((n[l>>2]|0)-m>>2<<2)|0,A=o+4|0,d=n[A>>2]|0,B=o+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[u>>2],n[A>>2]=(n[A>>2]|0)+4;break}pb(o,l,d,l+4|0),l>>>0<=u>>>0&&(u=(n[A>>2]|0)>>>0>u>>>0?u+4|0:u),n[l>>2]=n[u>>2]}else{A=(d-m>>2)+1|0,d=O(o)|0,d>>>0>>0&&sn(o),L=n[o>>2]|0,M=(n[B>>2]|0)-L|0,m=M>>1,ky(Qe,M>>2>>>0>>1>>>0?m>>>0>>0?A:m:d,l-L>>2,o+8|0),L=Qe+8|0,A=n[L>>2]|0,m=Qe+12|0,M=n[m>>2]|0,B=M,R=A;do if((A|0)==(M|0)){if(M=Qe+4|0,A=n[M>>2]|0,Xe=n[Qe>>2]|0,d=Xe,A>>>0<=Xe>>>0){A=B-d>>1,A=A|0?A:1,ky(ae,A,A>>>2,n[Qe+16>>2]|0),n[Ye>>2]=n[M>>2],n[Le>>2]=n[L>>2],n[k>>2]=n[Ye>>2],n[q>>2]=n[Le>>2],o2(ae,k,q),A=n[Qe>>2]|0,n[Qe>>2]=n[ae>>2],n[ae>>2]=A,A=ae+4|0,Xe=n[M>>2]|0,n[M>>2]=n[A>>2],n[A>>2]=Xe,A=ae+8|0,Xe=n[L>>2]|0,n[L>>2]=n[A>>2],n[A>>2]=Xe,A=ae+12|0,Xe=n[m>>2]|0,n[m>>2]=n[A>>2],n[A>>2]=Xe,Qy(ae),A=n[L>>2]|0;break}m=A,B=((m-d>>2)+1|0)/-2|0,k=A+(B<<2)|0,d=R-m|0,m=d>>2,m&&(Q2(k|0,A|0,d|0)|0,A=n[M>>2]|0),Xe=k+(m<<2)|0,n[L>>2]=Xe,n[M>>2]=A+(B<<2),A=Xe}while(!1);n[A>>2]=n[u>>2],n[L>>2]=(n[L>>2]|0)+4,l=hb(o,Qe,l)|0,Qy(Qe)}while(!1);return I=tt,l|0}function Oe(o){o=o|0;var l=0;do{if(l=o+984|0,s[l>>0]|0)break;s[l>>0]=1,h[o+504>>2]=y(le),o=n[o+944>>2]|0}while(o|0)}function dt(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-4-A|0)>>>2)<<2)),It(u))}function Et(o){return o=o|0,n[o+944>>2]|0}function Pt(o){o=o|0,wi(o,(n[o+964>>2]|0)!=0,2832),Oe(o)}function tr(o){return o=o|0,(s[o+984>>0]|0)!=0|0}function An(o,l){o=o|0,l=l|0,s6e(o,l,400)|0&&(Qr(o|0,l|0,400)|0,Oe(o))}function li(o){o=o|0;var l=$e;return l=y(h[o+44>>2]),o=Mt(l)|0,y(o?y(0):l)}function Gi(o){o=o|0;var l=$e;return l=y(h[o+48>>2]),Mt(l)|0&&(l=s[(n[o+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function Rn(o,l){o=o|0,l=l|0,n[o+980>>2]=l}function Ga(o){return o=o|0,n[o+980>>2]|0}function my(o,l){o=o|0,l=l|0;var u=0;u=o+4|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function X1(o){return o=o|0,n[o+4>>2]|0}function vo(o,l){o=o|0,l=l|0;var u=0;u=o+8|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function yy(o){return o=o|0,n[o+8>>2]|0}function Eh(o,l){o=o|0,l=l|0;var u=0;u=o+12|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function $1(o){return o=o|0,n[o+12>>2]|0}function So(o,l){o=o|0,l=l|0;var u=0;u=o+16|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function Ih(o){return o=o|0,n[o+16>>2]|0}function Ch(o,l){o=o|0,l=l|0;var u=0;u=o+20|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function hu(o){return o=o|0,n[o+20>>2]|0}function wh(o,l){o=o|0,l=l|0;var u=0;u=o+24|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function Fg(o){return o=o|0,n[o+24>>2]|0}function Ng(o,l){o=o|0,l=l|0;var u=0;u=o+28|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function Og(o){return o=o|0,n[o+28>>2]|0}function Ey(o,l){o=o|0,l=l|0;var u=0;u=o+32|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function df(o){return o=o|0,n[o+32>>2]|0}function Do(o,l){o=o|0,l=l|0;var u=0;u=o+36|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function Sl(o){return o=o|0,n[o+36>>2]|0}function Bh(o,l){o=o|0,l=y(l);var u=0;u=o+40|0,y(h[u>>2])!=l&&(h[u>>2]=l,Oe(o))}function Lg(o,l){o=o|0,l=y(l);var u=0;u=o+44|0,y(h[u>>2])!=l&&(h[u>>2]=l,Oe(o))}function Dl(o,l){o=o|0,l=y(l);var u=0;u=o+48|0,y(h[u>>2])!=l&&(h[u>>2]=l,Oe(o))}function Pl(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+52|0,d=o+56|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function Iy(o,l){o=o|0,l=y(l);var u=0,A=0;A=o+52|0,u=o+56|0,y(h[A>>2])==l&&(n[u>>2]|0)==2||(h[A>>2]=l,A=Mt(l)|0,n[u>>2]=A?3:2,Oe(o))}function UA(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+52|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function Cy(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=(m^1)&1,d=o+132+(l<<3)|0,l=o+132+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function wy(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=m?0:2,d=o+132+(l<<3)|0,l=o+132+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function _A(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=l+132+(u<<3)|0,l=n[A+4>>2]|0,u=o,n[u>>2]=n[A>>2],n[u+4>>2]=l}function HA(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=(m^1)&1,d=o+60+(l<<3)|0,l=o+60+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function Y(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=m?0:2,d=o+60+(l<<3)|0,l=o+60+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function xt(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=l+60+(u<<3)|0,l=n[A+4>>2]|0,u=o,n[u>>2]=n[A>>2],n[u+4>>2]=l}function jA(o,l){o=o|0,l=l|0;var u=0;u=o+60+(l<<3)+4|0,(n[u>>2]|0)!=3&&(h[o+60+(l<<3)>>2]=y(le),n[u>>2]=3,Oe(o))}function Po(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=(m^1)&1,d=o+204+(l<<3)|0,l=o+204+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function mf(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=m?0:2,d=o+204+(l<<3)|0,l=o+204+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function yt(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=l+204+(u<<3)|0,l=n[A+4>>2]|0,u=o,n[u>>2]=n[A>>2],n[u+4>>2]=l}function gu(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=(m^1)&1,d=o+276+(l<<3)|0,l=o+276+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function By(o,l){return o=o|0,l=l|0,y(h[o+276+(l<<3)>>2])}function Mg(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+348|0,d=o+352|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function e2(o,l){o=o|0,l=y(l);var u=0,A=0;A=o+348|0,u=o+352|0,y(h[A>>2])==l&&(n[u>>2]|0)==2||(h[A>>2]=l,A=Mt(l)|0,n[u>>2]=A?3:2,Oe(o))}function vh(o){o=o|0;var l=0;l=o+352|0,(n[l>>2]|0)!=3&&(h[o+348>>2]=y(le),n[l>>2]=3,Oe(o))}function ur(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+348|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function Ki(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+356|0,d=o+360|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function yf(o,l){o=o|0,l=y(l);var u=0,A=0;A=o+356|0,u=o+360|0,y(h[A>>2])==l&&(n[u>>2]|0)==2||(h[A>>2]=l,A=Mt(l)|0,n[u>>2]=A?3:2,Oe(o))}function qa(o){o=o|0;var l=0;l=o+360|0,(n[l>>2]|0)!=3&&(h[o+356>>2]=y(le),n[l>>2]=3,Oe(o))}function Ug(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+356|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function du(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+364|0,d=o+368|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function Ef(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=m?0:2,A=o+364|0,d=o+368|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function wt(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+364|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function di(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+372|0,d=o+376|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function GA(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=m?0:2,A=o+372|0,d=o+376|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function Wa(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+372|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function Aa(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+380|0,d=o+384|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function Ya(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=m?0:2,A=o+380|0,d=o+384|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function _g(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+380|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function Sh(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+388|0,d=o+392|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function Hg(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=m?0:2,A=o+388|0,d=o+392|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function vy(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+388|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function qA(o,l){o=o|0,l=y(l);var u=0;u=o+396|0,y(h[u>>2])!=l&&(h[u>>2]=l,Oe(o))}function jg(o){return o=o|0,y(h[o+396>>2])}function mu(o){return o=o|0,y(h[o+400>>2])}function yu(o){return o=o|0,y(h[o+404>>2])}function If(o){return o=o|0,y(h[o+408>>2])}function Ts(o){return o=o|0,y(h[o+412>>2])}function Eu(o){return o=o|0,y(h[o+416>>2])}function Gn(o){return o=o|0,y(h[o+420>>2])}function ns(o,l){switch(o=o|0,l=l|0,wi(o,(l|0)<6,2918),l|0){case 0:{l=(n[o+496>>2]|0)==2?5:4;break}case 2:{l=(n[o+496>>2]|0)==2?4:5;break}default:}return y(h[o+424+(l<<2)>>2])}function bi(o,l){switch(o=o|0,l=l|0,wi(o,(l|0)<6,2918),l|0){case 0:{l=(n[o+496>>2]|0)==2?5:4;break}case 2:{l=(n[o+496>>2]|0)==2?4:5;break}default:}return y(h[o+448+(l<<2)>>2])}function WA(o,l){switch(o=o|0,l=l|0,wi(o,(l|0)<6,2918),l|0){case 0:{l=(n[o+496>>2]|0)==2?5:4;break}case 2:{l=(n[o+496>>2]|0)==2?4:5;break}default:}return y(h[o+472+(l<<2)>>2])}function Cf(o,l){o=o|0,l=l|0;var u=0,A=$e;return u=n[o+4>>2]|0,(u|0)==(n[l+4>>2]|0)?u?(A=y(h[o>>2]),o=y(se(y(A-y(h[l>>2]))))>2]=0,n[A+4>>2]=0,n[A+8>>2]=0,cu(A|0,o|0,l|0,0),xo(o,3,(s[A+11>>0]|0)<0?n[A>>2]|0:A,u),b6e(A),I=u}function is(o,l,u,A){o=y(o),l=y(l),u=u|0,A=A|0;var d=$e;o=y(o*l),d=y(cU(o,y(1)));do if(mn(d,y(0))|0)o=y(o-d);else{if(o=y(o-d),mn(d,y(1))|0){o=y(o+y(1));break}if(u){o=y(o+y(1));break}A||(d>y(.5)?d=y(1):(A=mn(d,y(.5))|0,d=y(A?1:0)),o=y(o+d))}while(!1);return y(o/l)}function bl(o,l,u,A,d,m,B,k,R,M,L,q,ae){o=o|0,l=y(l),u=u|0,A=y(A),d=d|0,m=y(m),B=B|0,k=y(k),R=y(R),M=y(M),L=y(L),q=y(q),ae=ae|0;var Ye=0,Le=$e,Qe=$e,tt=$e,Xe=$e,ct=$e,He=$e;return R>2]),Le!=y(0))?(tt=y(is(l,Le,0,0)),Xe=y(is(A,Le,0,0)),Qe=y(is(m,Le,0,0)),Le=y(is(k,Le,0,0))):(Qe=m,tt=l,Le=k,Xe=A),(d|0)==(o|0)?Ye=mn(Qe,tt)|0:Ye=0,(B|0)==(u|0)?ae=mn(Le,Xe)|0:ae=0,!Ye&&(ct=y(l-L),!(bo(o,ct,R)|0))&&!(wf(o,ct,d,R)|0)?Ye=Bf(o,ct,d,m,R)|0:Ye=1,!ae&&(He=y(A-q),!(bo(u,He,M)|0))&&!(wf(u,He,B,M)|0)?ae=Bf(u,He,B,k,M)|0:ae=1,ae=Ye&ae),ae|0}function bo(o,l,u){return o=o|0,l=y(l),u=y(u),(o|0)==1?o=mn(l,u)|0:o=0,o|0}function wf(o,l,u,A){return o=o|0,l=y(l),u=u|0,A=y(A),(o|0)==2&(u|0)==0?l>=A?o=1:o=mn(l,A)|0:o=0,o|0}function Bf(o,l,u,A,d){return o=o|0,l=y(l),u=u|0,A=y(A),d=y(d),(o|0)==2&(u|0)==2&A>l?d<=l?o=1:o=mn(l,d)|0:o=0,o|0}function xl(o,l,u,A,d,m,B,k,R,M,L){o=o|0,l=y(l),u=y(u),A=A|0,d=d|0,m=m|0,B=y(B),k=y(k),R=R|0,M=M|0,L=L|0;var q=0,ae=0,Ye=0,Le=0,Qe=$e,tt=$e,Xe=0,ct=0,He=0,We=0,Lt=0,Gr=0,fr=0,$t=0,Rr=0,Hr=0,cr=0,Hn=$e,Ro=$e,To=$e,Fo=0,Xa=0;cr=I,I=I+160|0,$t=cr+152|0,fr=cr+120|0,Gr=cr+104|0,He=cr+72|0,Le=cr+56|0,Lt=cr+8|0,ct=cr,We=(n[2279]|0)+1|0,n[2279]=We,Rr=o+984|0,s[Rr>>0]|0&&(n[o+512>>2]|0)!=(n[2278]|0)?Xe=4:(n[o+516>>2]|0)==(A|0)?Hr=0:Xe=4,(Xe|0)==4&&(n[o+520>>2]=0,n[o+924>>2]=-1,n[o+928>>2]=-1,h[o+932>>2]=y(-1),h[o+936>>2]=y(-1),Hr=1);e:do if(n[o+964>>2]|0)if(Qe=y(yn(o,2,B)),tt=y(yn(o,0,B)),q=o+916|0,To=y(h[q>>2]),Ro=y(h[o+920>>2]),Hn=y(h[o+932>>2]),bl(d,l,m,u,n[o+924>>2]|0,To,n[o+928>>2]|0,Ro,Hn,y(h[o+936>>2]),Qe,tt,L)|0)Xe=22;else if(Ye=n[o+520>>2]|0,!Ye)Xe=21;else for(ae=0;;){if(q=o+524+(ae*24|0)|0,Hn=y(h[q>>2]),Ro=y(h[o+524+(ae*24|0)+4>>2]),To=y(h[o+524+(ae*24|0)+16>>2]),bl(d,l,m,u,n[o+524+(ae*24|0)+8>>2]|0,Hn,n[o+524+(ae*24|0)+12>>2]|0,Ro,To,y(h[o+524+(ae*24|0)+20>>2]),Qe,tt,L)|0){Xe=22;break e}if(ae=ae+1|0,ae>>>0>=Ye>>>0){Xe=21;break}}else{if(R){if(q=o+916|0,!(mn(y(h[q>>2]),l)|0)){Xe=21;break}if(!(mn(y(h[o+920>>2]),u)|0)){Xe=21;break}if((n[o+924>>2]|0)!=(d|0)){Xe=21;break}q=(n[o+928>>2]|0)==(m|0)?q:0,Xe=22;break}if(Ye=n[o+520>>2]|0,!Ye)Xe=21;else for(ae=0;;){if(q=o+524+(ae*24|0)|0,mn(y(h[q>>2]),l)|0&&mn(y(h[o+524+(ae*24|0)+4>>2]),u)|0&&(n[o+524+(ae*24|0)+8>>2]|0)==(d|0)&&(n[o+524+(ae*24|0)+12>>2]|0)==(m|0)){Xe=22;break e}if(ae=ae+1|0,ae>>>0>=Ye>>>0){Xe=21;break}}}while(!1);do if((Xe|0)==21)s[11697]|0?(q=0,Xe=28):(q=0,Xe=31);else if((Xe|0)==22){if(ae=(s[11697]|0)!=0,!((q|0)!=0&(Hr^1)))if(ae){Xe=28;break}else{Xe=31;break}Le=q+16|0,n[o+908>>2]=n[Le>>2],Ye=q+20|0,n[o+912>>2]=n[Ye>>2],(s[11698]|0)==0|ae^1||(n[ct>>2]=Iu(We)|0,n[ct+4>>2]=We,xo(o,4,2972,ct),ae=n[o+972>>2]|0,ae|0&&ip[ae&127](o),d=pa(d,R)|0,m=pa(m,R)|0,Xa=+y(h[Le>>2]),Fo=+y(h[Ye>>2]),n[Lt>>2]=d,n[Lt+4>>2]=m,E[Lt+8>>3]=+l,E[Lt+16>>3]=+u,E[Lt+24>>3]=Xa,E[Lt+32>>3]=Fo,n[Lt+40>>2]=M,xo(o,4,2989,Lt))}while(!1);return(Xe|0)==28&&(ae=Iu(We)|0,n[Le>>2]=ae,n[Le+4>>2]=We,n[Le+8>>2]=Hr?3047:11699,xo(o,4,3038,Le),ae=n[o+972>>2]|0,ae|0&&ip[ae&127](o),Lt=pa(d,R)|0,Xe=pa(m,R)|0,n[He>>2]=Lt,n[He+4>>2]=Xe,E[He+8>>3]=+l,E[He+16>>3]=+u,n[He+24>>2]=M,xo(o,4,3049,He),Xe=31),(Xe|0)==31&&(Fs(o,l,u,A,d,m,B,k,R,L),s[11697]|0&&(ae=n[2279]|0,Lt=Iu(ae)|0,n[Gr>>2]=Lt,n[Gr+4>>2]=ae,n[Gr+8>>2]=Hr?3047:11699,xo(o,4,3083,Gr),ae=n[o+972>>2]|0,ae|0&&ip[ae&127](o),Lt=pa(d,R)|0,Gr=pa(m,R)|0,Fo=+y(h[o+908>>2]),Xa=+y(h[o+912>>2]),n[fr>>2]=Lt,n[fr+4>>2]=Gr,E[fr+8>>3]=Fo,E[fr+16>>3]=Xa,n[fr+24>>2]=M,xo(o,4,3092,fr)),n[o+516>>2]=A,q||(ae=o+520|0,q=n[ae>>2]|0,(q|0)==16&&(s[11697]|0&&xo(o,4,3124,$t),n[ae>>2]=0,q=0),R?q=o+916|0:(n[ae>>2]=q+1,q=o+524+(q*24|0)|0),h[q>>2]=l,h[q+4>>2]=u,n[q+8>>2]=d,n[q+12>>2]=m,n[q+16>>2]=n[o+908>>2],n[q+20>>2]=n[o+912>>2],q=0)),R&&(n[o+416>>2]=n[o+908>>2],n[o+420>>2]=n[o+912>>2],s[o+985>>0]=1,s[Rr>>0]=0),n[2279]=(n[2279]|0)+-1,n[o+512>>2]=n[2278],I=cr,Hr|(q|0)==0|0}function yn(o,l,u){o=o|0,l=l|0,u=y(u);var A=$e;return A=y(K(o,l,u)),y(A+y(re(o,l,u)))}function xo(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=I,I=I+16|0,d=m,n[d>>2]=A,o?A=n[o+976>>2]|0:A=0,bh(A,o,l,u,d),I=m}function Iu(o){return o=o|0,(o>>>0>60?3201:3201+(60-o)|0)|0}function pa(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;return d=I,I=I+32|0,u=d+12|0,A=d,n[u>>2]=n[254],n[u+4>>2]=n[255],n[u+8>>2]=n[256],n[A>>2]=n[257],n[A+4>>2]=n[258],n[A+8>>2]=n[259],(o|0)>2?o=11699:o=n[(l?A:u)+(o<<2)>>2]|0,I=d,o|0}function Fs(o,l,u,A,d,m,B,k,R,M){o=o|0,l=y(l),u=y(u),A=A|0,d=d|0,m=m|0,B=y(B),k=y(k),R=R|0,M=M|0;var L=0,q=0,ae=0,Ye=0,Le=$e,Qe=$e,tt=$e,Xe=$e,ct=$e,He=$e,We=$e,Lt=0,Gr=0,fr=0,$t=$e,Rr=$e,Hr=0,cr=$e,Hn=0,Ro=0,To=0,Fo=0,Xa=0,Wh=0,Yh=0,gc=0,Vh=0,Tf=0,Ff=0,Jh=0,Kh=0,zh=0,on=0,dc=0,Zh=0,bu=0,Xh=$e,$h=$e,Nf=$e,Of=$e,xu=$e,oo=0,Ll=0,ma=0,mc=0,op=0,ap=$e,Lf=$e,lp=$e,cp=$e,ao=$e,Ms=$e,yc=0,Wn=$e,up=$e,No=$e,ku=$e,Oo=$e,Qu=$e,fp=0,Ap=0,Ru=$e,lo=$e,Ec=0,pp=0,hp=0,gp=0,Nr=$e,ui=0,Us=0,Lo=0,co=0,Mr=0,Ar=0,Ic=0,zt=$e,dp=0,Bi=0;Ic=I,I=I+16|0,oo=Ic+12|0,Ll=Ic+8|0,ma=Ic+4|0,mc=Ic,wi(o,(d|0)==0|(Mt(l)|0)^1,3326),wi(o,(m|0)==0|(Mt(u)|0)^1,3406),Us=At(o,A)|0,n[o+496>>2]=Us,Mr=dr(2,Us)|0,Ar=dr(0,Us)|0,h[o+440>>2]=y(K(o,Mr,B)),h[o+444>>2]=y(re(o,Mr,B)),h[o+428>>2]=y(K(o,Ar,B)),h[o+436>>2]=y(re(o,Ar,B)),h[o+464>>2]=y(vr(o,Mr)),h[o+468>>2]=y(Un(o,Mr)),h[o+452>>2]=y(vr(o,Ar)),h[o+460>>2]=y(Un(o,Ar)),h[o+488>>2]=y(mi(o,Mr,B)),h[o+492>>2]=y(Cs(o,Mr,B)),h[o+476>>2]=y(mi(o,Ar,B)),h[o+484>>2]=y(Cs(o,Ar,B));do if(n[o+964>>2]|0)JA(o,l,u,d,m,B,k);else{if(Lo=o+948|0,co=(n[o+952>>2]|0)-(n[Lo>>2]|0)>>2,!co){ab(o,l,u,d,m,B,k);break}if(!R&&t2(o,l,u,d,m,B,k)|0)break;te(o),dc=o+508|0,s[dc>>0]=0,Mr=dr(n[o+4>>2]|0,Us)|0,Ar=Py(Mr,Us)|0,ui=de(Mr)|0,Zh=n[o+8>>2]|0,pp=o+28|0,bu=(n[pp>>2]|0)!=0,Oo=ui?B:k,Ru=ui?k:B,Xh=y(kh(o,Mr,B)),$h=y(r2(o,Mr,B)),Le=y(kh(o,Ar,B)),Qu=y(Va(o,Mr,B)),lo=y(Va(o,Ar,B)),fr=ui?d:m,Ec=ui?m:d,Nr=ui?Qu:lo,ct=ui?lo:Qu,ku=y(yn(o,2,B)),Xe=y(yn(o,0,B)),Qe=y(y(Xr(o+364|0,B))-Nr),tt=y(y(Xr(o+380|0,B))-Nr),He=y(y(Xr(o+372|0,k))-ct),We=y(y(Xr(o+388|0,k))-ct),Nf=ui?Qe:He,Of=ui?tt:We,ku=y(l-ku),l=y(ku-Nr),Mt(l)|0?Nr=l:Nr=y($n(y(pd(l,tt)),Qe)),up=y(u-Xe),l=y(up-ct),Mt(l)|0?No=l:No=y($n(y(pd(l,We)),He)),Qe=ui?Nr:No,Wn=ui?No:Nr;e:do if((fr|0)==1)for(A=0,q=0;;){if(L=Is(o,q)|0,!A)y(KA(L))>y(0)&&y(Qh(L))>y(0)?A=L:A=0;else if(n2(L)|0){Ye=0;break e}if(q=q+1|0,q>>>0>=co>>>0){Ye=A;break}}else Ye=0;while(!1);Lt=Ye+500|0,Gr=Ye+504|0,A=0,L=0,l=y(0),ae=0;do{if(q=n[(n[Lo>>2]|0)+(ae<<2)>>2]|0,(n[q+36>>2]|0)==1)by(q),s[q+985>>0]=1,s[q+984>>0]=0;else{vf(q),R&&Ph(q,At(q,Us)|0,Qe,Wn,Nr);do if((n[q+24>>2]|0)!=1)if((q|0)==(Ye|0)){n[Lt>>2]=n[2278],h[Gr>>2]=y(0);break}else{lb(o,q,Nr,d,No,Nr,No,m,Us,M);break}else L|0&&(n[L+960>>2]=q),n[q+960>>2]=0,L=q,A=A|0?A:q;while(!1);Ms=y(h[q+504>>2]),l=y(l+y(Ms+y(yn(q,Mr,Nr))))}ae=ae+1|0}while((ae|0)!=(co|0));for(To=l>Qe,yc=bu&((fr|0)==2&To)?1:fr,Hn=(Ec|0)==1,Xa=Hn&(R^1),Wh=(yc|0)==1,Yh=(yc|0)==2,gc=976+(Mr<<2)|0,Vh=(Ec|2|0)==2,zh=Hn&(bu^1),Tf=1040+(Ar<<2)|0,Ff=1040+(Mr<<2)|0,Jh=976+(Ar<<2)|0,Kh=(Ec|0)!=1,To=bu&((fr|0)!=0&To),Ro=o+976|0,Hn=Hn^1,l=Qe,Hr=0,Fo=0,Ms=y(0),xu=y(0);;){e:do if(Hr>>>0>>0)for(Gr=n[Lo>>2]|0,ae=0,We=y(0),He=y(0),tt=y(0),Qe=y(0),q=0,L=0,Ye=Hr;;){if(Lt=n[Gr+(Ye<<2)>>2]|0,(n[Lt+36>>2]|0)!=1&&(n[Lt+940>>2]=Fo,(n[Lt+24>>2]|0)!=1)){if(Xe=y(yn(Lt,Mr,Nr)),on=n[gc>>2]|0,u=y(Xr(Lt+380+(on<<3)|0,Oo)),ct=y(h[Lt+504>>2]),u=y(pd(u,ct)),u=y($n(y(Xr(Lt+364+(on<<3)|0,Oo)),u)),bu&(ae|0)!=0&y(Xe+y(He+u))>l){m=ae,Xe=We,fr=Ye;break e}Xe=y(Xe+u),u=y(He+Xe),Xe=y(We+Xe),n2(Lt)|0&&(tt=y(tt+y(KA(Lt))),Qe=y(Qe-y(ct*y(Qh(Lt))))),L|0&&(n[L+960>>2]=Lt),n[Lt+960>>2]=0,ae=ae+1|0,L=Lt,q=q|0?q:Lt}else Xe=We,u=He;if(Ye=Ye+1|0,Ye>>>0>>0)We=Xe,He=u;else{m=ae,fr=Ye;break}}else m=0,Xe=y(0),tt=y(0),Qe=y(0),q=0,fr=Hr;while(!1);on=tt>y(0)&tty(0)&QeOf&((Mt(Of)|0)^1))l=Of,on=51;else if(s[(n[Ro>>2]|0)+3>>0]|0)on=51;else{if($t!=y(0)&&y(KA(o))!=y(0)){on=53;break}l=Xe,on=53}while(!1);if((on|0)==51&&(on=0,Mt(l)|0?on=53:(Rr=y(l-Xe),cr=l)),(on|0)==53&&(on=0,Xe>2]|0,Ye=Rry(0),He=y(Rr/$t),tt=y(0),Xe=y(0),l=y(0),L=q;do u=y(Xr(L+380+(ae<<3)|0,Oo)),Qe=y(Xr(L+364+(ae<<3)|0,Oo)),Qe=y(pd(u,y($n(Qe,y(h[L+504>>2]))))),Ye?(u=y(Qe*y(Qh(L))),u!=y(-0)&&(zt=y(Qe-y(ct*u)),ap=y(qn(L,Mr,zt,cr,Nr)),zt!=ap)&&(tt=y(tt-y(ap-Qe)),l=y(l+u))):Lt&&(Lf=y(KA(L)),Lf!=y(0))&&(zt=y(Qe+y(He*Lf)),lp=y(qn(L,Mr,zt,cr,Nr)),zt!=lp)&&(tt=y(tt-y(lp-Qe)),Xe=y(Xe-Lf)),L=n[L+960>>2]|0;while(L|0);if(l=y(We+l),Qe=y(Rr+tt),op)l=y(0);else{ct=y($t+Xe),Ye=n[gc>>2]|0,Lt=Qey(0),ct=y(Qe/ct),l=y(0);do{zt=y(Xr(q+380+(Ye<<3)|0,Oo)),tt=y(Xr(q+364+(Ye<<3)|0,Oo)),tt=y(pd(zt,y($n(tt,y(h[q+504>>2]))))),Lt?(zt=y(tt*y(Qh(q))),Qe=y(-zt),zt!=y(-0)?(zt=y(He*Qe),Qe=y(qn(q,Mr,y(tt+(Gr?Qe:zt)),cr,Nr))):Qe=tt):ae&&(cp=y(KA(q)),cp!=y(0))?Qe=y(qn(q,Mr,y(tt+y(ct*cp)),cr,Nr)):Qe=tt,l=y(l-y(Qe-tt)),Xe=y(yn(q,Mr,Nr)),u=y(yn(q,Ar,Nr)),Qe=y(Qe+Xe),h[Ll>>2]=Qe,n[mc>>2]=1,tt=y(h[q+396>>2]);e:do if(Mt(tt)|0){L=Mt(Wn)|0;do if(!L){if(To|(io(q,Ar,Wn)|0|Hn)||(ss(o,q)|0)!=4||(n[(kl(q,Ar)|0)+4>>2]|0)==3||(n[(Ql(q,Ar)|0)+4>>2]|0)==3)break;h[oo>>2]=Wn,n[ma>>2]=1;break e}while(!1);if(io(q,Ar,Wn)|0){L=n[q+992+(n[Jh>>2]<<2)>>2]|0,zt=y(u+y(Xr(L,Wn))),h[oo>>2]=zt,L=Kh&(n[L+4>>2]|0)==2,n[ma>>2]=((Mt(zt)|0|L)^1)&1;break}else{h[oo>>2]=Wn,n[ma>>2]=L?0:2;break}}else zt=y(Qe-Xe),$t=y(zt/tt),zt=y(tt*zt),n[ma>>2]=1,h[oo>>2]=y(u+(ui?$t:zt));while(!1);Cu(q,Mr,cr,Nr,mc,Ll),Cu(q,Ar,Wn,Nr,ma,oo);do if(!(io(q,Ar,Wn)|0)&&(ss(o,q)|0)==4){if((n[(kl(q,Ar)|0)+4>>2]|0)==3){L=0;break}L=(n[(Ql(q,Ar)|0)+4>>2]|0)!=3}else L=0;while(!1);zt=y(h[Ll>>2]),$t=y(h[oo>>2]),dp=n[mc>>2]|0,Bi=n[ma>>2]|0,xl(q,ui?zt:$t,ui?$t:zt,Us,ui?dp:Bi,ui?Bi:dp,Nr,No,R&(L^1),3488,M)|0,s[dc>>0]=s[dc>>0]|s[q+508>>0],q=n[q+960>>2]|0}while(q|0)}}else l=y(0);if(l=y(Rr+l),Bi=l>0]=Bi|c[dc>>0],Yh&l>y(0)?(L=n[gc>>2]|0,n[o+364+(L<<3)+4>>2]|0&&(ao=y(Xr(o+364+(L<<3)|0,Oo)),ao>=y(0))?Qe=y($n(y(0),y(ao-y(cr-l)))):Qe=y(0)):Qe=l,Lt=Hr>>>0>>0,Lt){Ye=n[Lo>>2]|0,ae=Hr,L=0;do q=n[Ye+(ae<<2)>>2]|0,n[q+24>>2]|0||(L=((n[(kl(q,Mr)|0)+4>>2]|0)==3&1)+L|0,L=L+((n[(Ql(q,Mr)|0)+4>>2]|0)==3&1)|0),ae=ae+1|0;while((ae|0)!=(fr|0));L?(Xe=y(0),u=y(0)):on=101}else on=101;e:do if((on|0)==101)switch(on=0,Zh|0){case 1:{L=0,Xe=y(Qe*y(.5)),u=y(0);break e}case 2:{L=0,Xe=Qe,u=y(0);break e}case 3:{if(m>>>0<=1){L=0,Xe=y(0),u=y(0);break e}u=y((m+-1|0)>>>0),L=0,Xe=y(0),u=y(y($n(Qe,y(0)))/u);break e}case 5:{u=y(Qe/y((m+1|0)>>>0)),L=0,Xe=u;break e}case 4:{u=y(Qe/y(m>>>0)),L=0,Xe=y(u*y(.5));break e}default:{L=0,Xe=y(0),u=y(0);break e}}while(!1);if(l=y(Xh+Xe),Lt){tt=y(Qe/y(L|0)),ae=n[Lo>>2]|0,q=Hr,Qe=y(0);do{L=n[ae+(q<<2)>>2]|0;e:do if((n[L+36>>2]|0)!=1){switch(n[L+24>>2]|0){case 1:{if(ha(L,Mr)|0){if(!R)break e;zt=y(zA(L,Mr,cr)),zt=y(zt+y(vr(o,Mr))),zt=y(zt+y(K(L,Mr,Nr))),h[L+400+(n[Ff>>2]<<2)>>2]=zt;break e}break}case 0:if(Bi=(n[(kl(L,Mr)|0)+4>>2]|0)==3,zt=y(tt+l),l=Bi?zt:l,R&&(Bi=L+400+(n[Ff>>2]<<2)|0,h[Bi>>2]=y(l+y(h[Bi>>2]))),Bi=(n[(Ql(L,Mr)|0)+4>>2]|0)==3,zt=y(tt+l),l=Bi?zt:l,Xa){zt=y(u+y(yn(L,Mr,Nr))),Qe=Wn,l=y(l+y(zt+y(h[L+504>>2])));break e}else{l=y(l+y(u+y(ZA(L,Mr,Nr)))),Qe=y($n(Qe,y(ZA(L,Ar,Nr))));break e}default:}R&&(zt=y(Xe+y(vr(o,Mr))),Bi=L+400+(n[Ff>>2]<<2)|0,h[Bi>>2]=y(zt+y(h[Bi>>2])))}while(!1);q=q+1|0}while((q|0)!=(fr|0))}else Qe=y(0);if(u=y($h+l),Vh?Xe=y(y(qn(o,Ar,y(lo+Qe),Ru,B))-lo):Xe=Wn,tt=y(y(qn(o,Ar,y(lo+(zh?Wn:Qe)),Ru,B))-lo),Lt&R){q=Hr;do{ae=n[(n[Lo>>2]|0)+(q<<2)>>2]|0;do if((n[ae+36>>2]|0)!=1){if((n[ae+24>>2]|0)==1){if(ha(ae,Ar)|0){if(zt=y(zA(ae,Ar,Wn)),zt=y(zt+y(vr(o,Ar))),zt=y(zt+y(K(ae,Ar,Nr))),L=n[Tf>>2]|0,h[ae+400+(L<<2)>>2]=zt,!(Mt(zt)|0))break}else L=n[Tf>>2]|0;zt=y(vr(o,Ar)),h[ae+400+(L<<2)>>2]=y(zt+y(K(ae,Ar,Nr)));break}L=ss(o,ae)|0;do if((L|0)==4){if((n[(kl(ae,Ar)|0)+4>>2]|0)==3){on=139;break}if((n[(Ql(ae,Ar)|0)+4>>2]|0)==3){on=139;break}if(io(ae,Ar,Wn)|0){l=Le;break}dp=n[ae+908+(n[gc>>2]<<2)>>2]|0,n[oo>>2]=dp,l=y(h[ae+396>>2]),Bi=Mt(l)|0,Qe=(n[S>>2]=dp,y(h[S>>2])),Bi?l=tt:(Rr=y(yn(ae,Ar,Nr)),zt=y(Qe/l),l=y(l*Qe),l=y(Rr+(ui?zt:l))),h[Ll>>2]=l,h[oo>>2]=y(y(yn(ae,Mr,Nr))+Qe),n[ma>>2]=1,n[mc>>2]=1,Cu(ae,Mr,cr,Nr,ma,oo),Cu(ae,Ar,Wn,Nr,mc,Ll),l=y(h[oo>>2]),Rr=y(h[Ll>>2]),zt=ui?l:Rr,l=ui?Rr:l,Bi=((Mt(zt)|0)^1)&1,xl(ae,zt,l,Us,Bi,((Mt(l)|0)^1)&1,Nr,No,1,3493,M)|0,l=Le}else on=139;while(!1);e:do if((on|0)==139){on=0,l=y(Xe-y(ZA(ae,Ar,Nr)));do if((n[(kl(ae,Ar)|0)+4>>2]|0)==3){if((n[(Ql(ae,Ar)|0)+4>>2]|0)!=3)break;l=y(Le+y($n(y(0),y(l*y(.5)))));break e}while(!1);if((n[(Ql(ae,Ar)|0)+4>>2]|0)==3){l=Le;break}if((n[(kl(ae,Ar)|0)+4>>2]|0)==3){l=y(Le+y($n(y(0),l)));break}switch(L|0){case 1:{l=Le;break e}case 2:{l=y(Le+y(l*y(.5)));break e}default:{l=y(Le+l);break e}}}while(!1);zt=y(Ms+l),Bi=ae+400+(n[Tf>>2]<<2)|0,h[Bi>>2]=y(zt+y(h[Bi>>2]))}while(!1);q=q+1|0}while((q|0)!=(fr|0))}if(Ms=y(Ms+tt),xu=y($n(xu,u)),m=Fo+1|0,fr>>>0>=co>>>0)break;l=cr,Hr=fr,Fo=m}do if(R){if(L=m>>>0>1,!L&&!(HL(o)|0))break;if(!(Mt(Wn)|0)){l=y(Wn-Ms);e:do switch(n[o+12>>2]|0){case 3:{Le=y(Le+l),He=y(0);break}case 2:{Le=y(Le+y(l*y(.5))),He=y(0);break}case 4:{Wn>Ms?He=y(l/y(m>>>0)):He=y(0);break}case 7:if(Wn>Ms){Le=y(Le+y(l/y(m<<1>>>0))),He=y(l/y(m>>>0)),He=L?He:y(0);break e}else{Le=y(Le+y(l*y(.5))),He=y(0);break e}case 6:{He=y(l/y(Fo>>>0)),He=Wn>Ms&L?He:y(0);break}default:He=y(0)}while(!1);if(m|0)for(Lt=1040+(Ar<<2)|0,Gr=976+(Ar<<2)|0,Ye=0,q=0;;){e:do if(q>>>0>>0)for(Qe=y(0),tt=y(0),l=y(0),ae=q;;){L=n[(n[Lo>>2]|0)+(ae<<2)>>2]|0;do if((n[L+36>>2]|0)!=1&&!(n[L+24>>2]|0)){if((n[L+940>>2]|0)!=(Ye|0))break e;if(jL(L,Ar)|0&&(zt=y(h[L+908+(n[Gr>>2]<<2)>>2]),l=y($n(l,y(zt+y(yn(L,Ar,Nr)))))),(ss(o,L)|0)!=5)break;ao=y(Yg(L)),ao=y(ao+y(K(L,0,Nr))),zt=y(h[L+912>>2]),zt=y(y(zt+y(yn(L,0,Nr)))-ao),ao=y($n(tt,ao)),zt=y($n(Qe,zt)),Qe=zt,tt=ao,l=y($n(l,y(ao+zt)))}while(!1);if(L=ae+1|0,L>>>0>>0)ae=L;else{ae=L;break}}else tt=y(0),l=y(0),ae=q;while(!1);if(ct=y(He+l),u=Le,Le=y(Le+ct),q>>>0>>0){Xe=y(u+tt),L=q;do{q=n[(n[Lo>>2]|0)+(L<<2)>>2]|0;e:do if((n[q+36>>2]|0)!=1&&!(n[q+24>>2]|0))switch(ss(o,q)|0){case 1:{zt=y(u+y(K(q,Ar,Nr))),h[q+400+(n[Lt>>2]<<2)>>2]=zt;break e}case 3:{zt=y(y(Le-y(re(q,Ar,Nr)))-y(h[q+908+(n[Gr>>2]<<2)>>2])),h[q+400+(n[Lt>>2]<<2)>>2]=zt;break e}case 2:{zt=y(u+y(y(ct-y(h[q+908+(n[Gr>>2]<<2)>>2]))*y(.5))),h[q+400+(n[Lt>>2]<<2)>>2]=zt;break e}case 4:{if(zt=y(u+y(K(q,Ar,Nr))),h[q+400+(n[Lt>>2]<<2)>>2]=zt,io(q,Ar,Wn)|0||(ui?(Qe=y(h[q+908>>2]),l=y(Qe+y(yn(q,Mr,Nr))),tt=ct):(tt=y(h[q+912>>2]),tt=y(tt+y(yn(q,Ar,Nr))),l=ct,Qe=y(h[q+908>>2])),mn(l,Qe)|0&&mn(tt,y(h[q+912>>2]))|0))break e;xl(q,l,tt,Us,1,1,Nr,No,1,3501,M)|0;break e}case 5:{h[q+404>>2]=y(y(Xe-y(Yg(q)))+y(zA(q,0,Wn)));break e}default:break e}while(!1);L=L+1|0}while((L|0)!=(ae|0))}if(Ye=Ye+1|0,(Ye|0)==(m|0))break;q=ae}}}while(!1);if(h[o+908>>2]=y(qn(o,2,ku,B,B)),h[o+912>>2]=y(qn(o,0,up,k,B)),yc|0&&(fp=n[o+32>>2]|0,Ap=(yc|0)==2,!(Ap&(fp|0)!=2))?Ap&(fp|0)==2&&(l=y(Qu+cr),l=y($n(y(pd(l,y(Vg(o,Mr,xu,Oo)))),Qu)),on=198):(l=y(qn(o,Mr,xu,Oo,B)),on=198),(on|0)==198&&(h[o+908+(n[976+(Mr<<2)>>2]<<2)>>2]=l),Ec|0&&(hp=n[o+32>>2]|0,gp=(Ec|0)==2,!(gp&(hp|0)!=2))?gp&(hp|0)==2&&(l=y(lo+Wn),l=y($n(y(pd(l,y(Vg(o,Ar,y(lo+Ms),Ru)))),lo)),on=204):(l=y(qn(o,Ar,y(lo+Ms),Ru,B)),on=204),(on|0)==204&&(h[o+908+(n[976+(Ar<<2)>>2]<<2)>>2]=l),R){if((n[pp>>2]|0)==2){q=976+(Ar<<2)|0,ae=1040+(Ar<<2)|0,L=0;do Ye=Is(o,L)|0,n[Ye+24>>2]|0||(dp=n[q>>2]|0,zt=y(h[o+908+(dp<<2)>>2]),Bi=Ye+400+(n[ae>>2]<<2)|0,zt=y(zt-y(h[Bi>>2])),h[Bi>>2]=y(zt-y(h[Ye+908+(dp<<2)>>2]))),L=L+1|0;while((L|0)!=(co|0))}if(A|0){L=ui?yc:d;do qL(o,A,Nr,L,No,Us,M),A=n[A+960>>2]|0;while(A|0)}if(L=(Mr|2|0)==3,q=(Ar|2|0)==3,L|q){A=0;do ae=n[(n[Lo>>2]|0)+(A<<2)>>2]|0,(n[ae+36>>2]|0)!=1&&(L&&i2(o,ae,Mr),q&&i2(o,ae,Ar)),A=A+1|0;while((A|0)!=(co|0))}}}while(!1);I=Ic}function Dh(o,l){o=o|0,l=y(l);var u=0;Ha(o,l>=y(0),3147),u=l==y(0),h[o+4>>2]=u?y(0):l}function YA(o,l,u,A){o=o|0,l=y(l),u=y(u),A=A|0;var d=$e,m=$e,B=0,k=0,R=0;n[2278]=(n[2278]|0)+1,vf(o),io(o,2,l)|0?(d=y(Xr(n[o+992>>2]|0,l)),R=1,d=y(d+y(yn(o,2,l)))):(d=y(Xr(o+380|0,l)),d>=y(0)?R=2:(R=((Mt(l)|0)^1)&1,d=l)),io(o,0,u)|0?(m=y(Xr(n[o+996>>2]|0,u)),k=1,m=y(m+y(yn(o,0,l)))):(m=y(Xr(o+388|0,u)),m>=y(0)?k=2:(k=((Mt(u)|0)^1)&1,m=u)),B=o+976|0,xl(o,d,m,A,R,k,l,u,1,3189,n[B>>2]|0)|0&&(Ph(o,n[o+496>>2]|0,l,u,l),VA(o,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),s[11696]|0)&&Gg(o,7)}function vf(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0;k=I,I=I+32|0,B=k+24|0,m=k+16|0,A=k+8|0,d=k,u=0;do l=o+380+(u<<3)|0,n[o+380+(u<<3)+4>>2]|0&&(R=l,M=n[R+4>>2]|0,L=A,n[L>>2]=n[R>>2],n[L+4>>2]=M,L=o+364+(u<<3)|0,M=n[L+4>>2]|0,R=d,n[R>>2]=n[L>>2],n[R+4>>2]=M,n[m>>2]=n[A>>2],n[m+4>>2]=n[A+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],Cf(m,B)|0)||(l=o+348+(u<<3)|0),n[o+992+(u<<2)>>2]=l,u=u+1|0;while((u|0)!=2);I=k}function io(o,l,u){o=o|0,l=l|0,u=y(u);var A=0;switch(o=n[o+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[o+4>>2]|0){case 0:case 3:{o=0;break}case 1:{y(h[o>>2])>2])>2]|0){case 2:{l=y(y(y(h[o>>2])*l)/y(100));break}case 1:{l=y(h[o>>2]);break}default:l=y(le)}return y(l)}function Ph(o,l,u,A,d){o=o|0,l=l|0,u=y(u),A=y(A),d=y(d);var m=0,B=$e;l=n[o+944>>2]|0?l:1,m=dr(n[o+4>>2]|0,l)|0,l=Py(m,l)|0,u=y(ub(o,m,u)),A=y(ub(o,l,A)),B=y(u+y(K(o,m,d))),h[o+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,u=y(u+y(re(o,m,d))),h[o+400+(n[1e3+(m<<2)>>2]<<2)>>2]=u,u=y(A+y(K(o,l,d))),h[o+400+(n[1040+(l<<2)>>2]<<2)>>2]=u,d=y(A+y(re(o,l,d))),h[o+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function VA(o,l,u,A){o=o|0,l=y(l),u=y(u),A=y(A);var d=0,m=0,B=$e,k=$e,R=0,M=0,L=$e,q=0,ae=$e,Ye=$e,Le=$e,Qe=$e;if(l!=y(0)&&(d=o+400|0,Qe=y(h[d>>2]),m=o+404|0,Le=y(h[m>>2]),q=o+416|0,Ye=y(h[q>>2]),M=o+420|0,B=y(h[M>>2]),ae=y(Qe+u),L=y(Le+A),A=y(ae+Ye),k=y(L+B),R=(n[o+988>>2]|0)==1,h[d>>2]=y(is(Qe,l,0,R)),h[m>>2]=y(is(Le,l,0,R)),u=y(cU(y(Ye*l),y(1))),mn(u,y(0))|0?m=0:m=(mn(u,y(1))|0)^1,u=y(cU(y(B*l),y(1))),mn(u,y(0))|0?d=0:d=(mn(u,y(1))|0)^1,Qe=y(is(A,l,R&m,R&(m^1))),h[q>>2]=y(Qe-y(is(ae,l,0,R))),Qe=y(is(k,l,R&d,R&(d^1))),h[M>>2]=y(Qe-y(is(L,l,0,R))),m=(n[o+952>>2]|0)-(n[o+948>>2]|0)>>2,m|0)){d=0;do VA(Is(o,d)|0,l,ae,L),d=d+1|0;while((d|0)!=(m|0))}}function Sy(o,l,u,A,d){switch(o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,u|0){case 5:case 0:{o=dX(n[489]|0,A,d)|0;break}default:o=v6e(A,d)|0}return o|0}function Wg(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;d=I,I=I+16|0,m=d,n[m>>2]=A,bh(o,0,l,u,m),I=d}function bh(o,l,u,A,d){if(o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,o=o|0?o:956,LX[n[o+8>>2]&1](o,l,u,A,d)|0,(u|0)==5)Nt();else return}function pc(o,l,u){o=o|0,l=l|0,u=u|0,s[o+l>>0]=u&1}function Dy(o,l){o=o|0,l=l|0;var u=0,A=0;n[o>>2]=0,n[o+4>>2]=0,n[o+8>>2]=0,u=l+4|0,A=(n[u>>2]|0)-(n[l>>2]|0)>>2,A|0&&(xh(o,A),kt(o,n[l>>2]|0,n[u>>2]|0,A))}function xh(o,l){o=o|0,l=l|0;var u=0;if((O(o)|0)>>>0>>0&&sn(o),l>>>0>1073741823)Nt();else{u=Kt(l<<2)|0,n[o+4>>2]=u,n[o>>2]=u,n[o+8>>2]=u+(l<<2);return}}function kt(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,A=o+4|0,o=u-l|0,(o|0)>0&&(Qr(n[A>>2]|0,l|0,o|0)|0,n[A>>2]=(n[A>>2]|0)+(o>>>2<<2))}function O(o){return o=o|0,1073741823}function K(o,l,u){return o=o|0,l=l|0,u=y(u),de(l)|0&&n[o+96>>2]|0?o=o+92|0:o=kn(o+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(Je(o,u))}function re(o,l,u){return o=o|0,l=l|0,u=y(u),de(l)|0&&n[o+104>>2]|0?o=o+100|0:o=kn(o+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(Je(o,u))}function de(o){return o=o|0,(o|1|0)==3|0}function Je(o,l){return o=o|0,l=y(l),(n[o+4>>2]|0)==3?l=y(0):l=y(Xr(o,l)),y(l)}function At(o,l){return o=o|0,l=l|0,o=n[o>>2]|0,(o|0?o:(l|0)>1?l:1)|0}function dr(o,l){o=o|0,l=l|0;var u=0;e:do if((l|0)==2){switch(o|0){case 2:{o=3;break e}case 3:break;default:{u=4;break e}}o=2}else u=4;while(!1);return o|0}function vr(o,l){o=o|0,l=l|0;var u=$e;return de(l)|0&&n[o+312>>2]|0&&(u=y(h[o+308>>2]),u>=y(0))||(u=y($n(y(h[(kn(o+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(u)}function Un(o,l){o=o|0,l=l|0;var u=$e;return de(l)|0&&n[o+320>>2]|0&&(u=y(h[o+316>>2]),u>=y(0))||(u=y($n(y(h[(kn(o+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(u)}function mi(o,l,u){o=o|0,l=l|0,u=y(u);var A=$e;return de(l)|0&&n[o+240>>2]|0&&(A=y(Xr(o+236|0,u)),A>=y(0))||(A=y($n(y(Xr(kn(o+204|0,n[1040+(l<<2)>>2]|0,992)|0,u)),y(0)))),y(A)}function Cs(o,l,u){o=o|0,l=l|0,u=y(u);var A=$e;return de(l)|0&&n[o+248>>2]|0&&(A=y(Xr(o+244|0,u)),A>=y(0))||(A=y($n(y(Xr(kn(o+204|0,n[1e3+(l<<2)>>2]|0,992)|0,u)),y(0)))),y(A)}function JA(o,l,u,A,d,m,B){o=o|0,l=y(l),u=y(u),A=A|0,d=d|0,m=y(m),B=y(B);var k=$e,R=$e,M=$e,L=$e,q=$e,ae=$e,Ye=0,Le=0,Qe=0;Qe=I,I=I+16|0,Ye=Qe,Le=o+964|0,wi(o,(n[Le>>2]|0)!=0,3519),k=y(Va(o,2,l)),R=y(Va(o,0,l)),M=y(yn(o,2,l)),L=y(yn(o,0,l)),Mt(l)|0?q=l:q=y($n(y(0),y(y(l-M)-k))),Mt(u)|0?ae=u:ae=y($n(y(0),y(y(u-L)-R))),(A|0)==1&(d|0)==1?(h[o+908>>2]=y(qn(o,2,y(l-M),m,m)),l=y(qn(o,0,y(u-L),B,m))):(MX[n[Le>>2]&1](Ye,o,q,A,ae,d),q=y(k+y(h[Ye>>2])),ae=y(l-M),h[o+908>>2]=y(qn(o,2,(A|2|0)==2?q:ae,m,m)),ae=y(R+y(h[Ye+4>>2])),l=y(u-L),l=y(qn(o,0,(d|2|0)==2?ae:l,B,m))),h[o+912>>2]=l,I=Qe}function ab(o,l,u,A,d,m,B){o=o|0,l=y(l),u=y(u),A=A|0,d=d|0,m=y(m),B=y(B);var k=$e,R=$e,M=$e,L=$e;M=y(Va(o,2,m)),k=y(Va(o,0,m)),L=y(yn(o,2,m)),R=y(yn(o,0,m)),l=y(l-L),h[o+908>>2]=y(qn(o,2,(A|2|0)==2?M:l,m,m)),u=y(u-R),h[o+912>>2]=y(qn(o,0,(d|2|0)==2?k:u,B,m))}function t2(o,l,u,A,d,m,B){o=o|0,l=y(l),u=y(u),A=A|0,d=d|0,m=y(m),B=y(B);var k=0,R=$e,M=$e;return k=(A|0)==2,!(l<=y(0)&k)&&!(u<=y(0)&(d|0)==2)&&!((A|0)==1&(d|0)==1)?o=0:(R=y(yn(o,0,m)),M=y(yn(o,2,m)),k=l>2]=y(qn(o,2,k?y(0):l,m,m)),l=y(u-R),k=u>2]=y(qn(o,0,k?y(0):l,B,m)),o=1),o|0}function Py(o,l){return o=o|0,l=l|0,Jg(o)|0?o=dr(2,l)|0:o=0,o|0}function kh(o,l,u){return o=o|0,l=l|0,u=y(u),u=y(mi(o,l,u)),y(u+y(vr(o,l)))}function r2(o,l,u){return o=o|0,l=l|0,u=y(u),u=y(Cs(o,l,u)),y(u+y(Un(o,l)))}function Va(o,l,u){o=o|0,l=l|0,u=y(u);var A=$e;return A=y(kh(o,l,u)),y(A+y(r2(o,l,u)))}function n2(o){return o=o|0,n[o+24>>2]|0?o=0:y(KA(o))!=y(0)?o=1:o=y(Qh(o))!=y(0),o|0}function KA(o){o=o|0;var l=$e;if(n[o+944>>2]|0){if(l=y(h[o+44>>2]),Mt(l)|0)return l=y(h[o+40>>2]),o=l>y(0)&((Mt(l)|0)^1),y(o?l:y(0))}else l=y(0);return y(l)}function Qh(o){o=o|0;var l=$e,u=0,A=$e;do if(n[o+944>>2]|0){if(l=y(h[o+48>>2]),Mt(l)|0){if(u=s[(n[o+976>>2]|0)+2>>0]|0,!(u<<24>>24)&&(A=y(h[o+40>>2]),A>24?y(1):y(0)}}else l=y(0);while(!1);return y(l)}function by(o){o=o|0;var l=0,u=0;if(eE(o+400|0,0,540)|0,s[o+985>>0]=1,te(o),u=Mi(o)|0,u|0){l=o+948|0,o=0;do by(n[(n[l>>2]|0)+(o<<2)>>2]|0),o=o+1|0;while((o|0)!=(u|0))}}function lb(o,l,u,A,d,m,B,k,R,M){o=o|0,l=l|0,u=y(u),A=A|0,d=y(d),m=y(m),B=y(B),k=k|0,R=R|0,M=M|0;var L=0,q=$e,ae=0,Ye=0,Le=$e,Qe=$e,tt=0,Xe=$e,ct=0,He=$e,We=0,Lt=0,Gr=0,fr=0,$t=0,Rr=0,Hr=0,cr=0,Hn=0,Ro=0;Hn=I,I=I+16|0,Gr=Hn+12|0,fr=Hn+8|0,$t=Hn+4|0,Rr=Hn,cr=dr(n[o+4>>2]|0,R)|0,We=de(cr)|0,q=y(Xr(WL(l)|0,We?m:B)),Lt=io(l,2,m)|0,Hr=io(l,0,B)|0;do if(!(Mt(q)|0)&&!(Mt(We?u:d)|0)){if(L=l+504|0,!(Mt(y(h[L>>2]))|0)&&(!(s2(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[L>>2]=y($n(q,y(Va(l,cr,m))))}else ae=7;while(!1);do if((ae|0)==7){if(ct=We^1,!(ct|Lt^1)){B=y(Xr(n[l+992>>2]|0,m)),h[l+504>>2]=y($n(B,y(Va(l,2,m))));break}if(!(We|Hr^1)){B=y(Xr(n[l+996>>2]|0,B)),h[l+504>>2]=y($n(B,y(Va(l,0,m))));break}h[Gr>>2]=y(le),h[fr>>2]=y(le),n[$t>>2]=0,n[Rr>>2]=0,Xe=y(yn(l,2,m)),He=y(yn(l,0,m)),Lt?(Le=y(Xe+y(Xr(n[l+992>>2]|0,m))),h[Gr>>2]=Le,n[$t>>2]=1,Ye=1):(Ye=0,Le=y(le)),Hr?(q=y(He+y(Xr(n[l+996>>2]|0,B))),h[fr>>2]=q,n[Rr>>2]=1,L=1):(L=0,q=y(le)),ae=n[o+32>>2]|0,We&(ae|0)==2?ae=2:Mt(Le)|0&&!(Mt(u)|0)&&(h[Gr>>2]=u,n[$t>>2]=2,Ye=2,Le=u),!((ae|0)==2&ct)&&Mt(q)|0&&!(Mt(d)|0)&&(h[fr>>2]=d,n[Rr>>2]=2,L=2,q=d),Qe=y(h[l+396>>2]),tt=Mt(Qe)|0;do if(tt)ae=Ye;else{if((Ye|0)==1&ct){h[fr>>2]=y(y(Le-Xe)/Qe),n[Rr>>2]=1,L=1,ae=1;break}We&(L|0)==1?(h[Gr>>2]=y(Qe*y(q-He)),n[$t>>2]=1,L=1,ae=1):ae=Ye}while(!1);Ro=Mt(u)|0,Ye=(ss(o,l)|0)!=4,!(We|Lt|((A|0)!=1|Ro)|(Ye|(ae|0)==1))&&(h[Gr>>2]=u,n[$t>>2]=1,!tt)&&(h[fr>>2]=y(y(u-Xe)/Qe),n[Rr>>2]=1,L=1),!(Hr|ct|((k|0)!=1|(Mt(d)|0))|(Ye|(L|0)==1))&&(h[fr>>2]=d,n[Rr>>2]=1,!tt)&&(h[Gr>>2]=y(Qe*y(d-He)),n[$t>>2]=1),Cu(l,2,m,m,$t,Gr),Cu(l,0,B,m,Rr,fr),u=y(h[Gr>>2]),d=y(h[fr>>2]),xl(l,u,d,R,n[$t>>2]|0,n[Rr>>2]|0,m,B,0,3565,M)|0,B=y(h[l+908+(n[976+(cr<<2)>>2]<<2)>>2]),h[l+504>>2]=y($n(B,y(Va(l,cr,m))))}while(!1);n[l+500>>2]=n[2278],I=Hn}function qn(o,l,u,A,d){return o=o|0,l=l|0,u=y(u),A=y(A),d=y(d),A=y(Vg(o,l,u,A)),y($n(A,y(Va(o,l,d))))}function ss(o,l){return o=o|0,l=l|0,l=l+20|0,l=n[(n[l>>2]|0?l:o+16|0)>>2]|0,(l|0)==5&&Jg(n[o+4>>2]|0)|0&&(l=1),l|0}function kl(o,l){return o=o|0,l=l|0,de(l)|0&&n[o+96>>2]|0?l=4:l=n[1040+(l<<2)>>2]|0,o+60+(l<<3)|0}function Ql(o,l){return o=o|0,l=l|0,de(l)|0&&n[o+104>>2]|0?l=5:l=n[1e3+(l<<2)>>2]|0,o+60+(l<<3)|0}function Cu(o,l,u,A,d,m){switch(o=o|0,l=l|0,u=y(u),A=y(A),d=d|0,m=m|0,u=y(Xr(o+380+(n[976+(l<<2)>>2]<<3)|0,u)),u=y(u+y(yn(o,l,A))),n[d>>2]|0){case 2:case 1:{d=Mt(u)|0,A=y(h[m>>2]),h[m>>2]=d|A>2]=2,h[m>>2]=u);break}default:}}function ha(o,l){return o=o|0,l=l|0,o=o+132|0,de(l)|0&&n[(kn(o,4,948)|0)+4>>2]|0?o=1:o=(n[(kn(o,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,o|0}function zA(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0;return o=o+132|0,de(l)|0&&(A=kn(o,4,948)|0,(n[A+4>>2]|0)!=0)?d=4:(A=kn(o,n[1040+(l<<2)>>2]|0,948)|0,n[A+4>>2]|0?d=4:u=y(0)),(d|0)==4&&(u=y(Xr(A,u))),y(u)}function ZA(o,l,u){o=o|0,l=l|0,u=y(u);var A=$e;return A=y(h[o+908+(n[976+(l<<2)>>2]<<2)>>2]),A=y(A+y(K(o,l,u))),y(A+y(re(o,l,u)))}function HL(o){o=o|0;var l=0,u=0,A=0;e:do if(Jg(n[o+4>>2]|0)|0)l=0;else if((n[o+16>>2]|0)!=5)if(u=Mi(o)|0,!u)l=0;else for(l=0;;){if(A=Is(o,l)|0,!(n[A+24>>2]|0)&&(n[A+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=u>>>0){l=0;break}}else l=1;while(!1);return l|0}function jL(o,l){o=o|0,l=l|0;var u=$e;return u=y(h[o+908+(n[976+(l<<2)>>2]<<2)>>2]),u>=y(0)&((Mt(u)|0)^1)|0}function Yg(o){o=o|0;var l=$e,u=0,A=0,d=0,m=0,B=0,k=0,R=$e;if(u=n[o+968>>2]|0,u)R=y(h[o+908>>2]),l=y(h[o+912>>2]),l=y(TX[u&0](o,R,l)),wi(o,(Mt(l)|0)^1,3573);else{m=Mi(o)|0;do if(m|0){for(u=0,d=0;;){if(A=Is(o,d)|0,n[A+940>>2]|0){B=8;break}if((n[A+24>>2]|0)!=1)if(k=(ss(o,A)|0)==5,k){u=A;break}else u=u|0?u:A;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!u)break;return l=y(Yg(u)),y(l+y(h[u+404>>2]))}while(!1);l=y(h[o+912>>2])}return y(l)}function Vg(o,l,u,A){o=o|0,l=l|0,u=y(u),A=y(A);var d=$e,m=0;return Jg(l)|0?(l=1,m=3):de(l)|0?(l=0,m=3):(A=y(le),d=y(le)),(m|0)==3&&(d=y(Xr(o+364+(l<<3)|0,A)),A=y(Xr(o+380+(l<<3)|0,A))),m=A=y(0)&((Mt(A)|0)^1)),u=m?A:u,m=d>=y(0)&((Mt(d)|0)^1)&u>2]|0,m)|0,Le=Py(tt,m)|0,Qe=de(tt)|0,q=y(yn(l,2,u)),ae=y(yn(l,0,u)),io(l,2,u)|0?k=y(q+y(Xr(n[l+992>>2]|0,u))):ha(l,2)|0&&xy(l,2)|0?(k=y(h[o+908>>2]),R=y(vr(o,2)),R=y(k-y(R+y(Un(o,2)))),k=y(zA(l,2,u)),k=y(qn(l,2,y(R-y(k+y(Rh(l,2,u)))),u,u))):k=y(le),io(l,0,d)|0?R=y(ae+y(Xr(n[l+996>>2]|0,d))):ha(l,0)|0&&xy(l,0)|0?(R=y(h[o+912>>2]),ct=y(vr(o,0)),ct=y(R-y(ct+y(Un(o,0)))),R=y(zA(l,0,d)),R=y(qn(l,0,y(ct-y(R+y(Rh(l,0,d)))),d,u))):R=y(le),M=Mt(k)|0,L=Mt(R)|0;do if(M^L&&(Ye=y(h[l+396>>2]),!(Mt(Ye)|0)))if(M){k=y(q+y(y(R-ae)*Ye));break}else{ct=y(ae+y(y(k-q)/Ye)),R=L?ct:R;break}while(!1);L=Mt(k)|0,M=Mt(R)|0,L|M&&(He=(L^1)&1,A=u>y(0)&((A|0)!=0&L),k=Qe?k:A?u:k,xl(l,k,R,m,Qe?He:A?2:He,L&(M^1)&1,k,R,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(yn(l,2,u))),R=y(h[l+912>>2]),R=y(R+y(yn(l,0,u)))),xl(l,k,R,m,1,1,k,R,1,3635,B)|0,xy(l,tt)|0&&!(ha(l,tt)|0)?(He=n[976+(tt<<2)>>2]|0,ct=y(h[o+908+(He<<2)>>2]),ct=y(ct-y(h[l+908+(He<<2)>>2])),ct=y(ct-y(Un(o,tt))),ct=y(ct-y(re(l,tt,u))),ct=y(ct-y(Rh(l,tt,Qe?u:d))),h[l+400+(n[1040+(tt<<2)>>2]<<2)>>2]=ct):Xe=21;do if((Xe|0)==21){if(!(ha(l,tt)|0)&&(n[o+8>>2]|0)==1){He=n[976+(tt<<2)>>2]|0,ct=y(h[o+908+(He<<2)>>2]),ct=y(y(ct-y(h[l+908+(He<<2)>>2]))*y(.5)),h[l+400+(n[1040+(tt<<2)>>2]<<2)>>2]=ct;break}!(ha(l,tt)|0)&&(n[o+8>>2]|0)==2&&(He=n[976+(tt<<2)>>2]|0,ct=y(h[o+908+(He<<2)>>2]),ct=y(ct-y(h[l+908+(He<<2)>>2])),h[l+400+(n[1040+(tt<<2)>>2]<<2)>>2]=ct)}while(!1);xy(l,Le)|0&&!(ha(l,Le)|0)?(He=n[976+(Le<<2)>>2]|0,ct=y(h[o+908+(He<<2)>>2]),ct=y(ct-y(h[l+908+(He<<2)>>2])),ct=y(ct-y(Un(o,Le))),ct=y(ct-y(re(l,Le,u))),ct=y(ct-y(Rh(l,Le,Qe?d:u))),h[l+400+(n[1040+(Le<<2)>>2]<<2)>>2]=ct):Xe=30;do if((Xe|0)==30&&!(ha(l,Le)|0)){if((ss(o,l)|0)==2){He=n[976+(Le<<2)>>2]|0,ct=y(h[o+908+(He<<2)>>2]),ct=y(y(ct-y(h[l+908+(He<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Le<<2)>>2]<<2)>>2]=ct;break}He=(ss(o,l)|0)==3,He^(n[o+28>>2]|0)==2&&(He=n[976+(Le<<2)>>2]|0,ct=y(h[o+908+(He<<2)>>2]),ct=y(ct-y(h[l+908+(He<<2)>>2])),h[l+400+(n[1040+(Le<<2)>>2]<<2)>>2]=ct)}while(!1)}function i2(o,l,u){o=o|0,l=l|0,u=u|0;var A=$e,d=0;d=n[976+(u<<2)>>2]|0,A=y(h[l+908+(d<<2)>>2]),A=y(y(h[o+908+(d<<2)>>2])-A),A=y(A-y(h[l+400+(n[1040+(u<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(u<<2)>>2]<<2)>>2]=A}function Jg(o){return o=o|0,(o|1|0)==1|0}function WL(o){o=o|0;var l=$e;switch(n[o+56>>2]|0){case 0:case 3:{l=y(h[o+40>>2]),l>y(0)&((Mt(l)|0)^1)?o=s[(n[o+976>>2]|0)+2>>0]|0?1056:992:o=1056;break}default:o=o+52|0}return o|0}function s2(o,l){return o=o|0,l=l|0,(s[o+l>>0]|0)!=0|0}function xy(o,l){return o=o|0,l=l|0,o=o+132|0,de(l)|0&&n[(kn(o,5,948)|0)+4>>2]|0?o=1:o=(n[(kn(o,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,o|0}function Rh(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0;return o=o+132|0,de(l)|0&&(A=kn(o,5,948)|0,(n[A+4>>2]|0)!=0)?d=4:(A=kn(o,n[1e3+(l<<2)>>2]|0,948)|0,n[A+4>>2]|0?d=4:u=y(0)),(d|0)==4&&(u=y(Xr(A,u))),y(u)}function ub(o,l,u){return o=o|0,l=l|0,u=y(u),ha(o,l)|0?u=y(zA(o,l,u)):u=y(-y(Rh(o,l,u))),y(u)}function fb(o){return o=y(o),h[S>>2]=o,n[S>>2]|0|0}function ky(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>1073741823)Nt();else{d=Kt(l<<2)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<2)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<2)}function Ab(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function Qy(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-4-l|0)>>>2)<<2)),o=n[o>>2]|0,o|0&&It(o)}function pb(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;if(B=o+4|0,k=n[B>>2]|0,d=k-A|0,m=d>>2,o=l+(m<<2)|0,o>>>0>>0){A=k;do n[A>>2]=n[o>>2],o=o+4|0,A=(n[B>>2]|0)+4|0,n[B>>2]=A;while(o>>>0>>0)}m|0&&Q2(k+(0-m<<2)|0,l|0,d|0)|0}function hb(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0;return k=l+4|0,R=n[k>>2]|0,d=n[o>>2]|0,B=u,m=B-d|0,A=R+(0-(m>>2)<<2)|0,n[k>>2]=A,(m|0)>0&&Qr(A|0,d|0,m|0)|0,d=o+4|0,m=l+8|0,A=(n[d>>2]|0)-B|0,(A|0)>0&&(Qr(n[m>>2]|0,u|0,A|0)|0,n[m>>2]=(n[m>>2]|0)+(A>>>2<<2)),B=n[o>>2]|0,n[o>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=o+8|0,u=l+12|0,o=n[B>>2]|0,n[B>>2]=n[u>>2],n[u>>2]=o,n[l>>2]=n[k>>2],R|0}function o2(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[u>>2]|0,(B|0)!=(m|0)){d=o+8|0,u=((m+-4-B|0)>>>2)+1|0,o=B,A=n[d>>2]|0;do n[A>>2]=n[o>>2],A=(n[d>>2]|0)+4|0,n[d>>2]=A,o=o+4|0;while((o|0)!=(m|0));n[l>>2]=B+(u<<2)}}function a2(){ua()}function gb(){var o=0;return o=Kt(4)|0,l2(o),o|0}function l2(o){o=o|0,n[o>>2]=Ac()|0}function db(o){o=o|0,o|0&&(Kg(o),It(o))}function Kg(o){o=o|0,st(n[o>>2]|0)}function YL(o,l,u){o=o|0,l=l|0,u=u|0,pc(n[o>>2]|0,l,u)}function Ry(o,l){o=o|0,l=y(l),Dh(n[o>>2]|0,l)}function Ty(o,l){return o=o|0,l=l|0,s2(n[o>>2]|0,l)|0}function Fy(){var o=0;return o=Kt(8)|0,zg(o,0),o|0}function zg(o,l){o=o|0,l=l|0,l?l=fa(n[l>>2]|0)|0:l=rs()|0,n[o>>2]=l,n[o+4>>2]=0,Rn(l,o)}function Ny(o){o=o|0;var l=0;return l=Kt(8)|0,zg(l,o),l|0}function Zg(o){o=o|0,o|0&&(Oy(o),It(o))}function Oy(o){o=o|0;var l=0;uc(n[o>>2]|0),l=o+4|0,o=n[l>>2]|0,n[l>>2]=0,o|0&&(Sf(o),It(o))}function Sf(o){o=o|0,Df(o)}function Df(o){o=o|0,o=n[o>>2]|0,o|0&&Na(o|0)}function c2(o){return o=o|0,Ga(o)|0}function u2(o){o=o|0;var l=0,u=0;u=o+4|0,l=n[u>>2]|0,n[u>>2]=0,l|0&&(Sf(l),It(l)),fc(n[o>>2]|0)}function Ly(o,l){o=o|0,l=l|0,An(n[o>>2]|0,n[l>>2]|0)}function VL(o,l){o=o|0,l=l|0,wh(n[o>>2]|0,l)}function JL(o,l,u){o=o|0,l=l|0,u=+u,Cy(n[o>>2]|0,l,y(u))}function My(o,l,u){o=o|0,l=l|0,u=+u,wy(n[o>>2]|0,l,y(u))}function f2(o,l){o=o|0,l=l|0,Eh(n[o>>2]|0,l)}function A2(o,l){o=o|0,l=l|0,So(n[o>>2]|0,l)}function xr(o,l){o=o|0,l=l|0,Ch(n[o>>2]|0,l)}function so(o,l){o=o|0,l=l|0,my(n[o>>2]|0,l)}function zi(o,l){o=o|0,l=l|0,Ng(n[o>>2]|0,l)}function Ns(o,l){o=o|0,l=l|0,vo(n[o>>2]|0,l)}function XA(o,l,u){o=o|0,l=l|0,u=+u,HA(n[o>>2]|0,l,y(u))}function p2(o,l,u){o=o|0,l=l|0,u=+u,Y(n[o>>2]|0,l,y(u))}function ws(o,l){o=o|0,l=l|0,jA(n[o>>2]|0,l)}function Uy(o,l){o=o|0,l=l|0,Ey(n[o>>2]|0,l)}function Th(o,l){o=o|0,l=l|0,Do(n[o>>2]|0,l)}function Xg(o,l){o=o|0,l=+l,Bh(n[o>>2]|0,y(l))}function Fh(o,l){o=o|0,l=+l,Pl(n[o>>2]|0,y(l))}function h2(o,l){o=o|0,l=+l,Iy(n[o>>2]|0,y(l))}function g2(o,l){o=o|0,l=+l,Lg(n[o>>2]|0,y(l))}function d2(o,l){o=o|0,l=+l,Dl(n[o>>2]|0,y(l))}function m2(o,l){o=o|0,l=+l,Mg(n[o>>2]|0,y(l))}function Pf(o,l){o=o|0,l=+l,e2(n[o>>2]|0,y(l))}function sr(o){o=o|0,vh(n[o>>2]|0)}function _y(o,l){o=o|0,l=+l,Ki(n[o>>2]|0,y(l))}function y2(o,l){o=o|0,l=+l,yf(n[o>>2]|0,y(l))}function hc(o){o=o|0,qa(n[o>>2]|0)}function bf(o,l){o=o|0,l=+l,du(n[o>>2]|0,y(l))}function $g(o,l){o=o|0,l=+l,Ef(n[o>>2]|0,y(l))}function ed(o,l){o=o|0,l=+l,di(n[o>>2]|0,y(l))}function E2(o,l){o=o|0,l=+l,GA(n[o>>2]|0,y(l))}function I2(o,l){o=o|0,l=+l,Aa(n[o>>2]|0,y(l))}function wu(o,l){o=o|0,l=+l,Ya(n[o>>2]|0,y(l))}function td(o,l){o=o|0,l=+l,Sh(n[o>>2]|0,y(l))}function C2(o,l){o=o|0,l=+l,Hg(n[o>>2]|0,y(l))}function Hy(o,l){o=o|0,l=+l,qA(n[o>>2]|0,y(l))}function Bu(o,l,u){o=o|0,l=l|0,u=+u,gu(n[o>>2]|0,l,y(u))}function jy(o,l,u){o=o|0,l=l|0,u=+u,Po(n[o>>2]|0,l,y(u))}function rd(o,l,u){o=o|0,l=l|0,u=+u,mf(n[o>>2]|0,l,y(u))}function nd(o){return o=o|0,Fg(n[o>>2]|0)|0}function ko(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;A=I,I=I+16|0,d=A,_A(d,n[l>>2]|0,u),Bs(o,d),I=A}function Bs(o,l){o=o|0,l=l|0,Rl(o,n[l+4>>2]|0,+y(h[l>>2]))}function Rl(o,l,u){o=o|0,l=l|0,u=+u,n[o>>2]=l,E[o+8>>3]=u}function Gy(o){return o=o|0,$1(n[o>>2]|0)|0}function ga(o){return o=o|0,Ih(n[o>>2]|0)|0}function mb(o){return o=o|0,hu(n[o>>2]|0)|0}function Nh(o){return o=o|0,X1(n[o>>2]|0)|0}function w2(o){return o=o|0,Og(n[o>>2]|0)|0}function KL(o){return o=o|0,yy(n[o>>2]|0)|0}function yb(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;A=I,I=I+16|0,d=A,xt(d,n[l>>2]|0,u),Bs(o,d),I=A}function Eb(o){return o=o|0,df(n[o>>2]|0)|0}function qy(o){return o=o|0,Sl(n[o>>2]|0)|0}function B2(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,UA(A,n[l>>2]|0),Bs(o,A),I=u}function Oh(o){return o=o|0,+ +y(li(n[o>>2]|0))}function Ib(o){return o=o|0,+ +y(Gi(n[o>>2]|0))}function Cb(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,ur(A,n[l>>2]|0),Bs(o,A),I=u}function id(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,Ug(A,n[l>>2]|0),Bs(o,A),I=u}function zL(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,wt(A,n[l>>2]|0),Bs(o,A),I=u}function ZL(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,Wa(A,n[l>>2]|0),Bs(o,A),I=u}function wb(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,_g(A,n[l>>2]|0),Bs(o,A),I=u}function Bb(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,vy(A,n[l>>2]|0),Bs(o,A),I=u}function $A(o){return o=o|0,+ +y(jg(n[o>>2]|0))}function XL(o,l){return o=o|0,l=l|0,+ +y(By(n[o>>2]|0,l))}function $L(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;A=I,I=I+16|0,d=A,yt(d,n[l>>2]|0,u),Bs(o,d),I=A}function vu(o,l,u){o=o|0,l=l|0,u=u|0,lr(n[o>>2]|0,n[l>>2]|0,u)}function eM(o,l){o=o|0,l=l|0,gf(n[o>>2]|0,n[l>>2]|0)}function vb(o){return o=o|0,Mi(n[o>>2]|0)|0}function tM(o){return o=o|0,o=Et(n[o>>2]|0)|0,o?o=c2(o)|0:o=0,o|0}function Sb(o,l){return o=o|0,l=l|0,o=Is(n[o>>2]|0,l)|0,o?o=c2(o)|0:o=0,o|0}function xf(o,l){o=o|0,l=l|0;var u=0,A=0;A=Kt(4)|0,Db(A,l),u=o+4|0,l=n[u>>2]|0,n[u>>2]=A,l|0&&(Sf(l),It(l)),St(n[o>>2]|0,1)}function Db(o,l){o=o|0,l=l|0,sM(o,l)}function rM(o,l,u,A,d,m){o=o|0,l=l|0,u=y(u),A=A|0,d=y(d),m=m|0;var B=0,k=0;B=I,I=I+16|0,k=B,Pb(k,Ga(l)|0,+u,A,+d,m),h[o>>2]=y(+E[k>>3]),h[o+4>>2]=y(+E[k+8>>3]),I=B}function Pb(o,l,u,A,d,m){o=o|0,l=l|0,u=+u,A=A|0,d=+d,m=m|0;var B=0,k=0,R=0,M=0,L=0;B=I,I=I+32|0,L=B+8|0,M=B+20|0,R=B,k=B+16|0,E[L>>3]=u,n[M>>2]=A,E[R>>3]=d,n[k>>2]=m,Wy(o,n[l+4>>2]|0,L,M,R,k),I=B}function Wy(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0;var B=0,k=0;B=I,I=I+16|0,k=B,Fl(k),l=Os(l)|0,bb(o,l,+E[u>>3],n[A>>2]|0,+E[d>>3],n[m>>2]|0),Nl(k),I=B}function Os(o){return o=o|0,n[o>>2]|0}function bb(o,l,u,A,d,m){o=o|0,l=l|0,u=+u,A=A|0,d=+d,m=m|0;var B=0;B=da(v2()|0)|0,u=+Ja(u),A=Yy(A)|0,d=+Ja(d),nM(o,Kn(0,B|0,l|0,+u,A|0,+d,Yy(m)|0)|0)}function v2(){var o=0;return s[7608]|0||(D2(9120),o=7608,n[o>>2]=1,n[o+4>>2]=0),9120}function da(o){return o=o|0,n[o+8>>2]|0}function Ja(o){return o=+o,+ +kf(o)}function Yy(o){return o=o|0,sd(o)|0}function nM(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;d=I,I=I+32|0,u=d,A=l,A&1?(Ka(u,0),Me(A|0,u|0)|0,S2(o,u),iM(u)):(n[o>>2]=n[l>>2],n[o+4>>2]=n[l+4>>2],n[o+8>>2]=n[l+8>>2],n[o+12>>2]=n[l+12>>2]),I=d}function Ka(o,l){o=o|0,l=l|0,Su(o,l),n[o+8>>2]=0,s[o+24>>0]=0}function S2(o,l){o=o|0,l=l|0,l=l+8|0,n[o>>2]=n[l>>2],n[o+4>>2]=n[l+4>>2],n[o+8>>2]=n[l+8>>2],n[o+12>>2]=n[l+12>>2]}function iM(o){o=o|0,s[o+24>>0]=0}function Su(o,l){o=o|0,l=l|0,n[o>>2]=l}function sd(o){return o=o|0,o|0}function kf(o){return o=+o,+o}function D2(o){o=o|0,Qo(o,P2()|0,4)}function P2(){return 1064}function Qo(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u,n[o+8>>2]=ji(l|0,u+1|0)|0}function sM(o,l){o=o|0,l=l|0,l=n[l>>2]|0,n[o>>2]=l,au(l|0)}function xb(o){o=o|0;var l=0,u=0;u=o+4|0,l=n[u>>2]|0,n[u>>2]=0,l|0&&(Sf(l),It(l)),St(n[o>>2]|0,0)}function kb(o){o=o|0,Pt(n[o>>2]|0)}function Vy(o){return o=o|0,tr(n[o>>2]|0)|0}function oM(o,l,u,A){o=o|0,l=+l,u=+u,A=A|0,YA(n[o>>2]|0,y(l),y(u),A)}function aM(o){return o=o|0,+ +y(mu(n[o>>2]|0))}function v(o){return o=o|0,+ +y(If(n[o>>2]|0))}function D(o){return o=o|0,+ +y(yu(n[o>>2]|0))}function Q(o){return o=o|0,+ +y(Ts(n[o>>2]|0))}function H(o){return o=o|0,+ +y(Eu(n[o>>2]|0))}function V(o){return o=o|0,+ +y(Gn(n[o>>2]|0))}function ne(o,l){o=o|0,l=l|0,E[o>>3]=+y(mu(n[l>>2]|0)),E[o+8>>3]=+y(If(n[l>>2]|0)),E[o+16>>3]=+y(yu(n[l>>2]|0)),E[o+24>>3]=+y(Ts(n[l>>2]|0)),E[o+32>>3]=+y(Eu(n[l>>2]|0)),E[o+40>>3]=+y(Gn(n[l>>2]|0))}function Se(o,l){return o=o|0,l=l|0,+ +y(ns(n[o>>2]|0,l))}function _e(o,l){return o=o|0,l=l|0,+ +y(bi(n[o>>2]|0,l))}function pt(o,l){return o=o|0,l=l|0,+ +y(WA(n[o>>2]|0,l))}function Wt(){return Qn()|0}function Sr(){Lr(),Xt(),zn(),yi(),za(),et()}function Lr(){u4e(11713,4938,1)}function Xt(){x_e(10448)}function zn(){u_e(10408)}function yi(){TUe(10324)}function za(){HLe(10096)}function et(){qe(9132)}function qe(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0,Ye=0,Le=0,Qe=0,tt=0,Xe=0,ct=0,He=0,We=0,Lt=0,Gr=0,fr=0,$t=0,Rr=0,Hr=0,cr=0,Hn=0,Ro=0,To=0,Fo=0,Xa=0,Wh=0,Yh=0,gc=0,Vh=0,Tf=0,Ff=0,Jh=0,Kh=0,zh=0,on=0,dc=0,Zh=0,bu=0,Xh=0,$h=0,Nf=0,Of=0,xu=0,oo=0,Ll=0,ma=0,mc=0,op=0,ap=0,Lf=0,lp=0,cp=0,ao=0,Ms=0,yc=0,Wn=0,up=0,No=0,ku=0,Oo=0,Qu=0,fp=0,Ap=0,Ru=0,lo=0,Ec=0,pp=0,hp=0,gp=0,Nr=0,ui=0,Us=0,Lo=0,co=0,Mr=0,Ar=0,Ic=0;l=I,I=I+672|0,u=l+656|0,Ic=l+648|0,Ar=l+640|0,Mr=l+632|0,co=l+624|0,Lo=l+616|0,Us=l+608|0,ui=l+600|0,Nr=l+592|0,gp=l+584|0,hp=l+576|0,pp=l+568|0,Ec=l+560|0,lo=l+552|0,Ru=l+544|0,Ap=l+536|0,fp=l+528|0,Qu=l+520|0,Oo=l+512|0,ku=l+504|0,No=l+496|0,up=l+488|0,Wn=l+480|0,yc=l+472|0,Ms=l+464|0,ao=l+456|0,cp=l+448|0,lp=l+440|0,Lf=l+432|0,ap=l+424|0,op=l+416|0,mc=l+408|0,ma=l+400|0,Ll=l+392|0,oo=l+384|0,xu=l+376|0,Of=l+368|0,Nf=l+360|0,$h=l+352|0,Xh=l+344|0,bu=l+336|0,Zh=l+328|0,dc=l+320|0,on=l+312|0,zh=l+304|0,Kh=l+296|0,Jh=l+288|0,Ff=l+280|0,Tf=l+272|0,Vh=l+264|0,gc=l+256|0,Yh=l+248|0,Wh=l+240|0,Xa=l+232|0,Fo=l+224|0,To=l+216|0,Ro=l+208|0,Hn=l+200|0,cr=l+192|0,Hr=l+184|0,Rr=l+176|0,$t=l+168|0,fr=l+160|0,Gr=l+152|0,Lt=l+144|0,We=l+136|0,He=l+128|0,ct=l+120|0,Xe=l+112|0,tt=l+104|0,Qe=l+96|0,Le=l+88|0,Ye=l+80|0,ae=l+72|0,q=l+64|0,L=l+56|0,M=l+48|0,R=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,A=l,gt(o,3646),Zt(o,3651,2)|0,Dr(o,3665,2)|0,Xn(o,3682,18)|0,n[Ic>>2]=19,n[Ic+4>>2]=0,n[u>>2]=n[Ic>>2],n[u+4>>2]=n[Ic+4>>2],kr(o,3690,u)|0,n[Ar>>2]=1,n[Ar+4>>2]=0,n[u>>2]=n[Ar>>2],n[u+4>>2]=n[Ar+4>>2],Tn(o,3696,u)|0,n[Mr>>2]=2,n[Mr+4>>2]=0,n[u>>2]=n[Mr>>2],n[u+4>>2]=n[Mr+4>>2],_n(o,3706,u)|0,n[co>>2]=1,n[co+4>>2]=0,n[u>>2]=n[co>>2],n[u+4>>2]=n[co+4>>2],zr(o,3722,u)|0,n[Lo>>2]=2,n[Lo+4>>2]=0,n[u>>2]=n[Lo>>2],n[u+4>>2]=n[Lo+4>>2],zr(o,3734,u)|0,n[Us>>2]=3,n[Us+4>>2]=0,n[u>>2]=n[Us>>2],n[u+4>>2]=n[Us+4>>2],_n(o,3753,u)|0,n[ui>>2]=4,n[ui+4>>2]=0,n[u>>2]=n[ui>>2],n[u+4>>2]=n[ui+4>>2],_n(o,3769,u)|0,n[Nr>>2]=5,n[Nr+4>>2]=0,n[u>>2]=n[Nr>>2],n[u+4>>2]=n[Nr+4>>2],_n(o,3783,u)|0,n[gp>>2]=6,n[gp+4>>2]=0,n[u>>2]=n[gp>>2],n[u+4>>2]=n[gp+4>>2],_n(o,3796,u)|0,n[hp>>2]=7,n[hp+4>>2]=0,n[u>>2]=n[hp>>2],n[u+4>>2]=n[hp+4>>2],_n(o,3813,u)|0,n[pp>>2]=8,n[pp+4>>2]=0,n[u>>2]=n[pp>>2],n[u+4>>2]=n[pp+4>>2],_n(o,3825,u)|0,n[Ec>>2]=3,n[Ec+4>>2]=0,n[u>>2]=n[Ec>>2],n[u+4>>2]=n[Ec+4>>2],zr(o,3843,u)|0,n[lo>>2]=4,n[lo+4>>2]=0,n[u>>2]=n[lo>>2],n[u+4>>2]=n[lo+4>>2],zr(o,3853,u)|0,n[Ru>>2]=9,n[Ru+4>>2]=0,n[u>>2]=n[Ru>>2],n[u+4>>2]=n[Ru+4>>2],_n(o,3870,u)|0,n[Ap>>2]=10,n[Ap+4>>2]=0,n[u>>2]=n[Ap>>2],n[u+4>>2]=n[Ap+4>>2],_n(o,3884,u)|0,n[fp>>2]=11,n[fp+4>>2]=0,n[u>>2]=n[fp>>2],n[u+4>>2]=n[fp+4>>2],_n(o,3896,u)|0,n[Qu>>2]=1,n[Qu+4>>2]=0,n[u>>2]=n[Qu>>2],n[u+4>>2]=n[Qu+4>>2],ci(o,3907,u)|0,n[Oo>>2]=2,n[Oo+4>>2]=0,n[u>>2]=n[Oo>>2],n[u+4>>2]=n[Oo+4>>2],ci(o,3915,u)|0,n[ku>>2]=3,n[ku+4>>2]=0,n[u>>2]=n[ku>>2],n[u+4>>2]=n[ku+4>>2],ci(o,3928,u)|0,n[No>>2]=4,n[No+4>>2]=0,n[u>>2]=n[No>>2],n[u+4>>2]=n[No+4>>2],ci(o,3948,u)|0,n[up>>2]=5,n[up+4>>2]=0,n[u>>2]=n[up>>2],n[u+4>>2]=n[up+4>>2],ci(o,3960,u)|0,n[Wn>>2]=6,n[Wn+4>>2]=0,n[u>>2]=n[Wn>>2],n[u+4>>2]=n[Wn+4>>2],ci(o,3974,u)|0,n[yc>>2]=7,n[yc+4>>2]=0,n[u>>2]=n[yc>>2],n[u+4>>2]=n[yc+4>>2],ci(o,3983,u)|0,n[Ms>>2]=20,n[Ms+4>>2]=0,n[u>>2]=n[Ms>>2],n[u+4>>2]=n[Ms+4>>2],kr(o,3999,u)|0,n[ao>>2]=8,n[ao+4>>2]=0,n[u>>2]=n[ao>>2],n[u+4>>2]=n[ao+4>>2],ci(o,4012,u)|0,n[cp>>2]=9,n[cp+4>>2]=0,n[u>>2]=n[cp>>2],n[u+4>>2]=n[cp+4>>2],ci(o,4022,u)|0,n[lp>>2]=21,n[lp+4>>2]=0,n[u>>2]=n[lp>>2],n[u+4>>2]=n[lp+4>>2],kr(o,4039,u)|0,n[Lf>>2]=10,n[Lf+4>>2]=0,n[u>>2]=n[Lf>>2],n[u+4>>2]=n[Lf+4>>2],ci(o,4053,u)|0,n[ap>>2]=11,n[ap+4>>2]=0,n[u>>2]=n[ap>>2],n[u+4>>2]=n[ap+4>>2],ci(o,4065,u)|0,n[op>>2]=12,n[op+4>>2]=0,n[u>>2]=n[op>>2],n[u+4>>2]=n[op+4>>2],ci(o,4084,u)|0,n[mc>>2]=13,n[mc+4>>2]=0,n[u>>2]=n[mc>>2],n[u+4>>2]=n[mc+4>>2],ci(o,4097,u)|0,n[ma>>2]=14,n[ma+4>>2]=0,n[u>>2]=n[ma>>2],n[u+4>>2]=n[ma+4>>2],ci(o,4117,u)|0,n[Ll>>2]=15,n[Ll+4>>2]=0,n[u>>2]=n[Ll>>2],n[u+4>>2]=n[Ll+4>>2],ci(o,4129,u)|0,n[oo>>2]=16,n[oo+4>>2]=0,n[u>>2]=n[oo>>2],n[u+4>>2]=n[oo+4>>2],ci(o,4148,u)|0,n[xu>>2]=17,n[xu+4>>2]=0,n[u>>2]=n[xu>>2],n[u+4>>2]=n[xu+4>>2],ci(o,4161,u)|0,n[Of>>2]=18,n[Of+4>>2]=0,n[u>>2]=n[Of>>2],n[u+4>>2]=n[Of+4>>2],ci(o,4181,u)|0,n[Nf>>2]=5,n[Nf+4>>2]=0,n[u>>2]=n[Nf>>2],n[u+4>>2]=n[Nf+4>>2],zr(o,4196,u)|0,n[$h>>2]=6,n[$h+4>>2]=0,n[u>>2]=n[$h>>2],n[u+4>>2]=n[$h+4>>2],zr(o,4206,u)|0,n[Xh>>2]=7,n[Xh+4>>2]=0,n[u>>2]=n[Xh>>2],n[u+4>>2]=n[Xh+4>>2],zr(o,4217,u)|0,n[bu>>2]=3,n[bu+4>>2]=0,n[u>>2]=n[bu>>2],n[u+4>>2]=n[bu+4>>2],Du(o,4235,u)|0,n[Zh>>2]=1,n[Zh+4>>2]=0,n[u>>2]=n[Zh>>2],n[u+4>>2]=n[Zh+4>>2],lM(o,4251,u)|0,n[dc>>2]=4,n[dc+4>>2]=0,n[u>>2]=n[dc>>2],n[u+4>>2]=n[dc+4>>2],Du(o,4263,u)|0,n[on>>2]=5,n[on+4>>2]=0,n[u>>2]=n[on>>2],n[u+4>>2]=n[on+4>>2],Du(o,4279,u)|0,n[zh>>2]=6,n[zh+4>>2]=0,n[u>>2]=n[zh>>2],n[u+4>>2]=n[zh+4>>2],Du(o,4293,u)|0,n[Kh>>2]=7,n[Kh+4>>2]=0,n[u>>2]=n[Kh>>2],n[u+4>>2]=n[Kh+4>>2],Du(o,4306,u)|0,n[Jh>>2]=8,n[Jh+4>>2]=0,n[u>>2]=n[Jh>>2],n[u+4>>2]=n[Jh+4>>2],Du(o,4323,u)|0,n[Ff>>2]=9,n[Ff+4>>2]=0,n[u>>2]=n[Ff>>2],n[u+4>>2]=n[Ff+4>>2],Du(o,4335,u)|0,n[Tf>>2]=2,n[Tf+4>>2]=0,n[u>>2]=n[Tf>>2],n[u+4>>2]=n[Tf+4>>2],lM(o,4353,u)|0,n[Vh>>2]=12,n[Vh+4>>2]=0,n[u>>2]=n[Vh>>2],n[u+4>>2]=n[Vh+4>>2],od(o,4363,u)|0,n[gc>>2]=1,n[gc+4>>2]=0,n[u>>2]=n[gc>>2],n[u+4>>2]=n[gc+4>>2],ep(o,4376,u)|0,n[Yh>>2]=2,n[Yh+4>>2]=0,n[u>>2]=n[Yh>>2],n[u+4>>2]=n[Yh+4>>2],ep(o,4388,u)|0,n[Wh>>2]=13,n[Wh+4>>2]=0,n[u>>2]=n[Wh>>2],n[u+4>>2]=n[Wh+4>>2],od(o,4402,u)|0,n[Xa>>2]=14,n[Xa+4>>2]=0,n[u>>2]=n[Xa>>2],n[u+4>>2]=n[Xa+4>>2],od(o,4411,u)|0,n[Fo>>2]=15,n[Fo+4>>2]=0,n[u>>2]=n[Fo>>2],n[u+4>>2]=n[Fo+4>>2],od(o,4421,u)|0,n[To>>2]=16,n[To+4>>2]=0,n[u>>2]=n[To>>2],n[u+4>>2]=n[To+4>>2],od(o,4433,u)|0,n[Ro>>2]=17,n[Ro+4>>2]=0,n[u>>2]=n[Ro>>2],n[u+4>>2]=n[Ro+4>>2],od(o,4446,u)|0,n[Hn>>2]=18,n[Hn+4>>2]=0,n[u>>2]=n[Hn>>2],n[u+4>>2]=n[Hn+4>>2],od(o,4458,u)|0,n[cr>>2]=3,n[cr+4>>2]=0,n[u>>2]=n[cr>>2],n[u+4>>2]=n[cr+4>>2],ep(o,4471,u)|0,n[Hr>>2]=1,n[Hr+4>>2]=0,n[u>>2]=n[Hr>>2],n[u+4>>2]=n[Hr+4>>2],Qb(o,4486,u)|0,n[Rr>>2]=10,n[Rr+4>>2]=0,n[u>>2]=n[Rr>>2],n[u+4>>2]=n[Rr+4>>2],Du(o,4496,u)|0,n[$t>>2]=11,n[$t+4>>2]=0,n[u>>2]=n[$t>>2],n[u+4>>2]=n[$t+4>>2],Du(o,4508,u)|0,n[fr>>2]=3,n[fr+4>>2]=0,n[u>>2]=n[fr>>2],n[u+4>>2]=n[fr+4>>2],lM(o,4519,u)|0,n[Gr>>2]=4,n[Gr+4>>2]=0,n[u>>2]=n[Gr>>2],n[u+4>>2]=n[Gr+4>>2],yke(o,4530,u)|0,n[Lt>>2]=19,n[Lt+4>>2]=0,n[u>>2]=n[Lt>>2],n[u+4>>2]=n[Lt+4>>2],Eke(o,4542,u)|0,n[We>>2]=12,n[We+4>>2]=0,n[u>>2]=n[We>>2],n[u+4>>2]=n[We+4>>2],Ike(o,4554,u)|0,n[He>>2]=13,n[He+4>>2]=0,n[u>>2]=n[He>>2],n[u+4>>2]=n[He+4>>2],Cke(o,4568,u)|0,n[ct>>2]=2,n[ct+4>>2]=0,n[u>>2]=n[ct>>2],n[u+4>>2]=n[ct+4>>2],wke(o,4578,u)|0,n[Xe>>2]=20,n[Xe+4>>2]=0,n[u>>2]=n[Xe>>2],n[u+4>>2]=n[Xe+4>>2],Bke(o,4587,u)|0,n[tt>>2]=22,n[tt+4>>2]=0,n[u>>2]=n[tt>>2],n[u+4>>2]=n[tt+4>>2],kr(o,4602,u)|0,n[Qe>>2]=23,n[Qe+4>>2]=0,n[u>>2]=n[Qe>>2],n[u+4>>2]=n[Qe+4>>2],kr(o,4619,u)|0,n[Le>>2]=14,n[Le+4>>2]=0,n[u>>2]=n[Le>>2],n[u+4>>2]=n[Le+4>>2],vke(o,4629,u)|0,n[Ye>>2]=1,n[Ye+4>>2]=0,n[u>>2]=n[Ye>>2],n[u+4>>2]=n[Ye+4>>2],Ske(o,4637,u)|0,n[ae>>2]=4,n[ae+4>>2]=0,n[u>>2]=n[ae>>2],n[u+4>>2]=n[ae+4>>2],ep(o,4653,u)|0,n[q>>2]=5,n[q+4>>2]=0,n[u>>2]=n[q>>2],n[u+4>>2]=n[q+4>>2],ep(o,4669,u)|0,n[L>>2]=6,n[L+4>>2]=0,n[u>>2]=n[L>>2],n[u+4>>2]=n[L+4>>2],ep(o,4686,u)|0,n[M>>2]=7,n[M+4>>2]=0,n[u>>2]=n[M>>2],n[u+4>>2]=n[M+4>>2],ep(o,4701,u)|0,n[R>>2]=8,n[R+4>>2]=0,n[u>>2]=n[R>>2],n[u+4>>2]=n[R+4>>2],ep(o,4719,u)|0,n[k>>2]=9,n[k+4>>2]=0,n[u>>2]=n[k>>2],n[u+4>>2]=n[k+4>>2],ep(o,4736,u)|0,n[B>>2]=21,n[B+4>>2]=0,n[u>>2]=n[B>>2],n[u+4>>2]=n[B+4>>2],Dke(o,4754,u)|0,n[m>>2]=2,n[m+4>>2]=0,n[u>>2]=n[m>>2],n[u+4>>2]=n[m+4>>2],Qb(o,4772,u)|0,n[d>>2]=3,n[d+4>>2]=0,n[u>>2]=n[d>>2],n[u+4>>2]=n[d+4>>2],Qb(o,4790,u)|0,n[A>>2]=4,n[A+4>>2]=0,n[u>>2]=n[A>>2],n[u+4>>2]=n[A+4>>2],Qb(o,4808,u)|0,I=l}function gt(o,l){o=o|0,l=l|0;var u=0;u=RLe()|0,n[o>>2]=u,TLe(u,l),jh(n[o>>2]|0)}function Zt(o,l,u){return o=o|0,l=l|0,u=u|0,yLe(o,Bn(l)|0,u,0),o|0}function Dr(o,l,u){return o=o|0,l=l|0,u=u|0,rLe(o,Bn(l)|0,u,0),o|0}function Xn(o,l,u){return o=o|0,l=l|0,u=u|0,jOe(o,Bn(l)|0,u,0),o|0}function kr(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],DOe(o,l,d),I=A,o|0}function Tn(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],aOe(o,l,d),I=A,o|0}function _n(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],WNe(o,l,d),I=A,o|0}function zr(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xNe(o,l,d),I=A,o|0}function ci(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pNe(o,l,d),I=A,o|0}function Du(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZFe(o,l,d),I=A,o|0}function lM(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],NFe(o,l,d),I=A,o|0}function od(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],aFe(o,l,d),I=A,o|0}function ep(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],WTe(o,l,d),I=A,o|0}function Qb(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xTe(o,l,d),I=A,o|0}function yke(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pTe(o,l,d),I=A,o|0}function Eke(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZRe(o,l,d),I=A,o|0}function Ike(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ORe(o,l,d),I=A,o|0}function Cke(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],CRe(o,l,d),I=A,o|0}function wke(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],iRe(o,l,d),I=A,o|0}function Bke(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],HQe(o,l,d),I=A,o|0}function vke(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],SQe(o,l,d),I=A,o|0}function Ske(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],aQe(o,l,d),I=A,o|0}function Dke(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Pke(o,l,d),I=A,o|0}function Pke(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],bke(o,u,d,1),I=A}function Bn(o){return o=o|0,o|0}function bke(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=cM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=xke(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,kke(m,A)|0,A),I=d}function cM(){var o=0,l=0;if(s[7616]|0||(pz(9136),gr(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(_r(9136)|0)){o=9136,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));pz(9136)}return 9136}function xke(o){return o=o|0,0}function kke(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=cM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Az(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(Tke(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function vn(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0;var B=0,k=0,R=0,M=0,L=0,q=0,ae=0,Ye=0;B=I,I=I+32|0,ae=B+24|0,q=B+20|0,R=B+16|0,L=B+12|0,M=B+8|0,k=B+4|0,Ye=B,n[q>>2]=l,n[R>>2]=u,n[L>>2]=A,n[M>>2]=d,n[k>>2]=m,m=o+28|0,n[Ye>>2]=n[m>>2],n[ae>>2]=n[Ye>>2],Qke(o+24|0,ae,q,L,M,R,k)|0,n[m>>2]=n[n[m>>2]>>2],I=B}function Qke(o,l,u,A,d,m,B){return o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,B=B|0,o=Rke(l)|0,l=Kt(24)|0,fz(l+4|0,n[u>>2]|0,n[A>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[o>>2],n[o>>2]=l,l|0}function Rke(o){return o=o|0,n[o>>2]|0}function fz(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,n[o>>2]=l,n[o+4>>2]=u,n[o+8>>2]=A,n[o+12>>2]=d,n[o+16>>2]=m}function yr(o,l){return o=o|0,l=l|0,l|o|0}function Az(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function Tke(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=Fke(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,Nke(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Az(m,A,u),n[R>>2]=(n[R>>2]|0)+12,Oke(o,k),Lke(k),I=M;return}}function Fke(o){return o=o|0,357913941}function Nke(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function Oke(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function Lke(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function pz(o){o=o|0,_ke(o)}function Mke(o){o=o|0,Uke(o+24|0)}function _r(o){return o=o|0,n[o>>2]|0}function Uke(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function _ke(o){o=o|0;var l=0;l=en()|0,tn(o,2,3,l,Hke()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function en(){return 9228}function Hke(){return 1140}function jke(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;return u=I,I=I+16|0,A=u+8|0,d=u,m=Gke(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],l=qke(l,A)|0,I=u,l|0}function tn(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,n[o>>2]=l,n[o+4>>2]=u,n[o+8>>2]=A,n[o+12>>2]=d,n[o+16>>2]=m}function Gke(o){return o=o|0,(n[(cM()|0)+24>>2]|0)+(o*12|0)|0}function qke(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;return d=I,I=I+48|0,A=d,u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),sp[u&31](A,o),A=Wke(A)|0,I=d,A|0}function Wke(o){o=o|0;var l=0,u=0,A=0,d=0;return d=I,I=I+32|0,l=d+12|0,u=d,A=uM(hz()|0)|0,A?(fM(l,A),AM(u,l),Yke(o,u),o=pM(l)|0):o=Vke(o)|0,I=d,o|0}function hz(){var o=0;return s[7632]|0||(nQe(9184),gr(25,9184,U|0)|0,o=7632,n[o>>2]=1,n[o+4>>2]=0),9184}function uM(o){return o=o|0,n[o+36>>2]|0}function fM(o,l){o=o|0,l=l|0,n[o>>2]=l,n[o+4>>2]=o,n[o+8>>2]=0}function AM(o,l){o=o|0,l=l|0,n[o>>2]=n[l>>2],n[o+4>>2]=n[l+4>>2],n[o+8>>2]=0}function Yke(o,l){o=o|0,l=l|0,Zke(l,o,o+8|0,o+16|0,o+24|0,o+32|0,o+40|0)|0}function pM(o){return o=o|0,n[(n[o+4>>2]|0)+8>>2]|0}function Vke(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0,R=0;R=I,I=I+16|0,u=R+4|0,A=R,d=Tl(8)|0,m=d,B=Kt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[o>>2],k=k+4|0,o=o+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Kt(8)|0,B=n[l>>2]|0,n[A>>2]=0,n[u>>2]=n[A>>2],gz(k,B,u),n[d>>2]=k,I=R,m|0}function gz(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,u=Kt(16)|0,n[u+4>>2]=0,n[u+8>>2]=0,n[u>>2]=1092,n[u+12>>2]=l,n[o+4>>2]=u}function Jke(o){o=o|0,$y(o),It(o)}function Kke(o){o=o|0,o=n[o+12>>2]|0,o|0&&It(o)}function zke(o){o=o|0,It(o)}function Zke(o,l,u,A,d,m,B){return o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,B=B|0,m=Xke(n[o>>2]|0,l,u,A,d,m,B)|0,B=o+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function Xke(o,l,u,A,d,m,B){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,B=B|0;var k=0,R=0;return k=I,I=I+16|0,R=k,Fl(R),o=Os(o)|0,B=$ke(o,+E[l>>3],+E[u>>3],+E[A>>3],+E[d>>3],+E[m>>3],+E[B>>3])|0,Nl(R),I=k,B|0}function $ke(o,l,u,A,d,m,B){o=o|0,l=+l,u=+u,A=+A,d=+d,m=+m,B=+B;var k=0;return k=da(eQe()|0)|0,l=+Ja(l),u=+Ja(u),A=+Ja(A),d=+Ja(d),m=+Ja(m),ro(0,k|0,o|0,+l,+u,+A,+d,+m,+ +Ja(B))|0}function eQe(){var o=0;return s[7624]|0||(tQe(9172),o=7624,n[o>>2]=1,n[o+4>>2]=0),9172}function tQe(o){o=o|0,Qo(o,rQe()|0,6)}function rQe(){return 1112}function nQe(o){o=o|0,Lh(o)}function iQe(o){o=o|0,dz(o+24|0),mz(o+16|0)}function dz(o){o=o|0,oQe(o)}function mz(o){o=o|0,sQe(o)}function sQe(o){o=o|0;var l=0,u=0;if(l=n[o>>2]|0,l|0)do u=l,l=n[l>>2]|0,It(u);while(l|0);n[o>>2]=0}function oQe(o){o=o|0;var l=0,u=0;if(l=n[o>>2]|0,l|0)do u=l,l=n[l>>2]|0,It(u);while(l|0);n[o>>2]=0}function Lh(o){o=o|0;var l=0;n[o+16>>2]=0,n[o+20>>2]=0,l=o+24|0,n[l>>2]=0,n[o+28>>2]=l,n[o+36>>2]=0,s[o+40>>0]=0,s[o+41>>0]=0}function aQe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],lQe(o,u,d,0),I=A}function lQe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=hM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=cQe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,uQe(m,A)|0,A),I=d}function hM(){var o=0,l=0;if(s[7640]|0||(Ez(9232),gr(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(_r(9232)|0)){o=9232,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));Ez(9232)}return 9232}function cQe(o){return o=o|0,0}function uQe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=hM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],yz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(fQe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function yz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function fQe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=AQe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,pQe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],yz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,hQe(o,k),gQe(k),I=M;return}}function AQe(o){return o=o|0,357913941}function pQe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function hQe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function gQe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function Ez(o){o=o|0,yQe(o)}function dQe(o){o=o|0,mQe(o+24|0)}function mQe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function yQe(o){o=o|0;var l=0;l=en()|0,tn(o,2,1,l,EQe()|0,3),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function EQe(){return 1144}function IQe(o,l,u,A,d){o=o|0,l=l|0,u=+u,A=+A,d=d|0;var m=0,B=0,k=0,R=0;m=I,I=I+16|0,B=m+8|0,k=m,R=CQe(o)|0,o=n[R+4>>2]|0,n[k>>2]=n[R>>2],n[k+4>>2]=o,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],wQe(l,B,u,A,d),I=m}function CQe(o){return o=o|0,(n[(hM()|0)+24>>2]|0)+(o*12|0)|0}function wQe(o,l,u,A,d){o=o|0,l=l|0,u=+u,A=+A,d=d|0;var m=0,B=0,k=0,R=0,M=0;M=I,I=I+16|0,B=M+2|0,k=M+1|0,R=M,m=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(m=n[(n[o>>2]|0)+m>>2]|0),Qf(B,u),u=+Rf(B,u),Qf(k,A),A=+Rf(k,A),tp(R,d),R=rp(R,d)|0,FX[m&1](o,u,A,R),I=M}function Qf(o,l){o=o|0,l=+l}function Rf(o,l){return o=o|0,l=+l,+ +vQe(l)}function tp(o,l){o=o|0,l=l|0}function rp(o,l){return o=o|0,l=l|0,BQe(l)|0}function BQe(o){return o=o|0,o|0}function vQe(o){return o=+o,+o}function SQe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],DQe(o,u,d,1),I=A}function DQe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=gM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=PQe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,bQe(m,A)|0,A),I=d}function gM(){var o=0,l=0;if(s[7648]|0||(Cz(9268),gr(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(_r(9268)|0)){o=9268,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));Cz(9268)}return 9268}function PQe(o){return o=o|0,0}function bQe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=gM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Iz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(xQe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function Iz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function xQe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=kQe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,QQe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Iz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,RQe(o,k),TQe(k),I=M;return}}function kQe(o){return o=o|0,357913941}function QQe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function RQe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function TQe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function Cz(o){o=o|0,OQe(o)}function FQe(o){o=o|0,NQe(o+24|0)}function NQe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function OQe(o){o=o|0;var l=0;l=en()|0,tn(o,2,4,l,LQe()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function LQe(){return 1160}function MQe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;return u=I,I=I+16|0,A=u+8|0,d=u,m=UQe(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],l=_Qe(l,A)|0,I=u,l|0}function UQe(o){return o=o|0,(n[(gM()|0)+24>>2]|0)+(o*12|0)|0}function _Qe(o,l){o=o|0,l=l|0;var u=0;return u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),wz(gd[u&31](o)|0)|0}function wz(o){return o=o|0,o&1|0}function HQe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],jQe(o,u,d,0),I=A}function jQe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=dM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=GQe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,qQe(m,A)|0,A),I=d}function dM(){var o=0,l=0;if(s[7656]|0||(vz(9304),gr(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(_r(9304)|0)){o=9304,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));vz(9304)}return 9304}function GQe(o){return o=o|0,0}function qQe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=dM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Bz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(WQe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function Bz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function WQe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=YQe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,VQe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Bz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,JQe(o,k),KQe(k),I=M;return}}function YQe(o){return o=o|0,357913941}function VQe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function JQe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function KQe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function vz(o){o=o|0,XQe(o)}function zQe(o){o=o|0,ZQe(o+24|0)}function ZQe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function XQe(o){o=o|0;var l=0;l=en()|0,tn(o,2,5,l,$Qe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function $Qe(){return 1164}function eRe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,d=A+8|0,m=A,B=tRe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rRe(l,d,u),I=A}function tRe(o){return o=o|0,(n[(dM()|0)+24>>2]|0)+(o*12|0)|0}function rRe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),Mh(d,u),u=Uh(d,u)|0,sp[A&31](o,u),_h(d),I=m}function Mh(o,l){o=o|0,l=l|0,nRe(o,l)}function Uh(o,l){return o=o|0,l=l|0,o|0}function _h(o){o=o|0,Sf(o)}function nRe(o,l){o=o|0,l=l|0,mM(o,l)}function mM(o,l){o=o|0,l=l|0,n[o>>2]=l}function iRe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],sRe(o,u,d,0),I=A}function sRe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=yM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=oRe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,aRe(m,A)|0,A),I=d}function yM(){var o=0,l=0;if(s[7664]|0||(Dz(9340),gr(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(_r(9340)|0)){o=9340,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));Dz(9340)}return 9340}function oRe(o){return o=o|0,0}function aRe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=yM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Sz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(lRe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function Sz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function lRe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=cRe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,uRe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Sz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,fRe(o,k),ARe(k),I=M;return}}function cRe(o){return o=o|0,357913941}function uRe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function fRe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function ARe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function Dz(o){o=o|0,gRe(o)}function pRe(o){o=o|0,hRe(o+24|0)}function hRe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function gRe(o){o=o|0;var l=0;l=en()|0,tn(o,2,4,l,dRe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function dRe(){return 1180}function mRe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=yRe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],u=ERe(l,d,u)|0,I=A,u|0}function yRe(o){return o=o|0,(n[(yM()|0)+24>>2]|0)+(o*12|0)|0}function ERe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;return m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),ad(d,u),d=ld(d,u)|0,d=Rb(hU[A&15](o,d)|0)|0,I=m,d|0}function ad(o,l){o=o|0,l=l|0}function ld(o,l){return o=o|0,l=l|0,IRe(l)|0}function Rb(o){return o=o|0,o|0}function IRe(o){return o=o|0,o|0}function CRe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],wRe(o,u,d,0),I=A}function wRe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=EM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=BRe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,vRe(m,A)|0,A),I=d}function EM(){var o=0,l=0;if(s[7672]|0||(bz(9376),gr(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(_r(9376)|0)){o=9376,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));bz(9376)}return 9376}function BRe(o){return o=o|0,0}function vRe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=EM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Pz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(SRe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function Pz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function SRe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=DRe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,PRe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Pz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,bRe(o,k),xRe(k),I=M;return}}function DRe(o){return o=o|0,357913941}function PRe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function bRe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function xRe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function bz(o){o=o|0,RRe(o)}function kRe(o){o=o|0,QRe(o+24|0)}function QRe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function RRe(o){o=o|0;var l=0;l=en()|0,tn(o,2,5,l,xz()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function xz(){return 1196}function TRe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;return u=I,I=I+16|0,A=u+8|0,d=u,m=FRe(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],l=NRe(l,A)|0,I=u,l|0}function FRe(o){return o=o|0,(n[(EM()|0)+24>>2]|0)+(o*12|0)|0}function NRe(o,l){o=o|0,l=l|0;var u=0;return u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),Rb(gd[u&31](o)|0)|0}function ORe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],LRe(o,u,d,1),I=A}function LRe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=IM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=MRe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,URe(m,A)|0,A),I=d}function IM(){var o=0,l=0;if(s[7680]|0||(Qz(9412),gr(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(_r(9412)|0)){o=9412,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));Qz(9412)}return 9412}function MRe(o){return o=o|0,0}function URe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=IM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],kz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(_Re(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function kz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function _Re(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=HRe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,jRe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],kz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,GRe(o,k),qRe(k),I=M;return}}function HRe(o){return o=o|0,357913941}function jRe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function GRe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function qRe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function Qz(o){o=o|0,VRe(o)}function WRe(o){o=o|0,YRe(o+24|0)}function YRe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function VRe(o){o=o|0;var l=0;l=en()|0,tn(o,2,6,l,Rz()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function Rz(){return 1200}function JRe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;return u=I,I=I+16|0,A=u+8|0,d=u,m=KRe(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],l=zRe(l,A)|0,I=u,l|0}function KRe(o){return o=o|0,(n[(IM()|0)+24>>2]|0)+(o*12|0)|0}function zRe(o,l){o=o|0,l=l|0;var u=0;return u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),Tb(gd[u&31](o)|0)|0}function Tb(o){return o=o|0,o|0}function ZRe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],XRe(o,u,d,0),I=A}function XRe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=CM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=$Re(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,eTe(m,A)|0,A),I=d}function CM(){var o=0,l=0;if(s[7688]|0||(Fz(9448),gr(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(_r(9448)|0)){o=9448,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));Fz(9448)}return 9448}function $Re(o){return o=o|0,0}function eTe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=CM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Tz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(tTe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function Tz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function tTe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=rTe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,nTe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Tz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,iTe(o,k),sTe(k),I=M;return}}function rTe(o){return o=o|0,357913941}function nTe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function iTe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function sTe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function Fz(o){o=o|0,lTe(o)}function oTe(o){o=o|0,aTe(o+24|0)}function aTe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function lTe(o){o=o|0;var l=0;l=en()|0,tn(o,2,6,l,Nz()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function Nz(){return 1204}function cTe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,d=A+8|0,m=A,B=uTe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],fTe(l,d,u),I=A}function uTe(o){return o=o|0,(n[(CM()|0)+24>>2]|0)+(o*12|0)|0}function fTe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),wM(d,u),d=BM(d,u)|0,sp[A&31](o,d),I=m}function wM(o,l){o=o|0,l=l|0}function BM(o,l){return o=o|0,l=l|0,ATe(l)|0}function ATe(o){return o=o|0,o|0}function pTe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],hTe(o,u,d,0),I=A}function hTe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=vM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=gTe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,dTe(m,A)|0,A),I=d}function vM(){var o=0,l=0;if(s[7696]|0||(Lz(9484),gr(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(_r(9484)|0)){o=9484,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));Lz(9484)}return 9484}function gTe(o){return o=o|0,0}function dTe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=vM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Oz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(mTe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function Oz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function mTe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=yTe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,ETe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Oz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,ITe(o,k),CTe(k),I=M;return}}function yTe(o){return o=o|0,357913941}function ETe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function ITe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function CTe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function Lz(o){o=o|0,vTe(o)}function wTe(o){o=o|0,BTe(o+24|0)}function BTe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function vTe(o){o=o|0;var l=0;l=en()|0,tn(o,2,1,l,STe()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function STe(){return 1212}function DTe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;d=I,I=I+16|0,m=d+8|0,B=d,k=PTe(o)|0,o=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=o,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],bTe(l,m,u,A),I=d}function PTe(o){return o=o|0,(n[(vM()|0)+24>>2]|0)+(o*12|0)|0}function bTe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;k=I,I=I+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(d=n[(n[o>>2]|0)+d>>2]|0),wM(m,u),m=BM(m,u)|0,ad(B,A),B=ld(B,A)|0,F2[d&15](o,m,B),I=k}function xTe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],kTe(o,u,d,1),I=A}function kTe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=SM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=QTe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,RTe(m,A)|0,A),I=d}function SM(){var o=0,l=0;if(s[7704]|0||(Uz(9520),gr(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(_r(9520)|0)){o=9520,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));Uz(9520)}return 9520}function QTe(o){return o=o|0,0}function RTe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=SM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Mz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(TTe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function Mz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function TTe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=FTe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,NTe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Mz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,OTe(o,k),LTe(k),I=M;return}}function FTe(o){return o=o|0,357913941}function NTe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function OTe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function LTe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function Uz(o){o=o|0,_Te(o)}function MTe(o){o=o|0,UTe(o+24|0)}function UTe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function _Te(o){o=o|0;var l=0;l=en()|0,tn(o,2,1,l,HTe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function HTe(){return 1224}function jTe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;return d=I,I=I+16|0,m=d+8|0,B=d,k=GTe(o)|0,o=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=o,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],A=+qTe(l,m,u),I=d,+A}function GTe(o){return o=o|0,(n[(SM()|0)+24>>2]|0)+(o*12|0)|0}function qTe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),tp(d,u),d=rp(d,u)|0,B=+kf(+OX[A&7](o,d)),I=m,+B}function WTe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],YTe(o,u,d,1),I=A}function YTe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=DM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=VTe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,JTe(m,A)|0,A),I=d}function DM(){var o=0,l=0;if(s[7712]|0||(Hz(9556),gr(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(_r(9556)|0)){o=9556,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));Hz(9556)}return 9556}function VTe(o){return o=o|0,0}function JTe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=DM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],_z(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(KTe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function _z(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function KTe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=zTe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,ZTe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],_z(m,A,u),n[R>>2]=(n[R>>2]|0)+12,XTe(o,k),$Te(k),I=M;return}}function zTe(o){return o=o|0,357913941}function ZTe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function XTe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function $Te(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function Hz(o){o=o|0,rFe(o)}function eFe(o){o=o|0,tFe(o+24|0)}function tFe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function rFe(o){o=o|0;var l=0;l=en()|0,tn(o,2,5,l,nFe()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function nFe(){return 1232}function iFe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=sFe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],u=+oFe(l,d),I=A,+u}function sFe(o){return o=o|0,(n[(DM()|0)+24>>2]|0)+(o*12|0)|0}function oFe(o,l){o=o|0,l=l|0;var u=0;return u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),+ +kf(+NX[u&15](o))}function aFe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],lFe(o,u,d,1),I=A}function lFe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=PM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=cFe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,uFe(m,A)|0,A),I=d}function PM(){var o=0,l=0;if(s[7720]|0||(Gz(9592),gr(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(_r(9592)|0)){o=9592,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));Gz(9592)}return 9592}function cFe(o){return o=o|0,0}function uFe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=PM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],jz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(fFe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function jz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function fFe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=AFe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,pFe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],jz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,hFe(o,k),gFe(k),I=M;return}}function AFe(o){return o=o|0,357913941}function pFe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function hFe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function gFe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function Gz(o){o=o|0,yFe(o)}function dFe(o){o=o|0,mFe(o+24|0)}function mFe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function yFe(o){o=o|0;var l=0;l=en()|0,tn(o,2,7,l,EFe()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function EFe(){return 1276}function IFe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;return u=I,I=I+16|0,A=u+8|0,d=u,m=CFe(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],l=wFe(l,A)|0,I=u,l|0}function CFe(o){return o=o|0,(n[(PM()|0)+24>>2]|0)+(o*12|0)|0}function wFe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;return d=I,I=I+16|0,A=d,u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),sp[u&31](A,o),A=qz(A)|0,I=d,A|0}function qz(o){o=o|0;var l=0,u=0,A=0,d=0;return d=I,I=I+32|0,l=d+12|0,u=d,A=uM(Wz()|0)|0,A?(fM(l,A),AM(u,l),BFe(o,u),o=pM(l)|0):o=vFe(o)|0,I=d,o|0}function Wz(){var o=0;return s[7736]|0||(FFe(9640),gr(25,9640,U|0)|0,o=7736,n[o>>2]=1,n[o+4>>2]=0),9640}function BFe(o,l){o=o|0,l=l|0,bFe(l,o,o+8|0)|0}function vFe(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0;return u=I,I=I+16|0,d=u+4|0,B=u,A=Tl(8)|0,l=A,k=Kt(16)|0,n[k>>2]=n[o>>2],n[k+4>>2]=n[o+4>>2],n[k+8>>2]=n[o+8>>2],n[k+12>>2]=n[o+12>>2],m=l+4|0,n[m>>2]=k,o=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],bM(o,m,d),n[A>>2]=o,I=u,l|0}function bM(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,u=Kt(16)|0,n[u+4>>2]=0,n[u+8>>2]=0,n[u>>2]=1244,n[u+12>>2]=l,n[o+4>>2]=u}function SFe(o){o=o|0,$y(o),It(o)}function DFe(o){o=o|0,o=n[o+12>>2]|0,o|0&&It(o)}function PFe(o){o=o|0,It(o)}function bFe(o,l,u){return o=o|0,l=l|0,u=u|0,l=xFe(n[o>>2]|0,l,u)|0,u=o+4|0,n[(n[u>>2]|0)+8>>2]=l,n[(n[u>>2]|0)+8>>2]|0}function xFe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;return A=I,I=I+16|0,d=A,Fl(d),o=Os(o)|0,u=kFe(o,n[l>>2]|0,+E[u>>3])|0,Nl(d),I=A,u|0}function kFe(o,l,u){o=o|0,l=l|0,u=+u;var A=0;return A=da(QFe()|0)|0,l=Yy(l)|0,ou(0,A|0,o|0,l|0,+ +Ja(u))|0}function QFe(){var o=0;return s[7728]|0||(RFe(9628),o=7728,n[o>>2]=1,n[o+4>>2]=0),9628}function RFe(o){o=o|0,Qo(o,TFe()|0,2)}function TFe(){return 1264}function FFe(o){o=o|0,Lh(o)}function NFe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],OFe(o,u,d,1),I=A}function OFe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=xM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=LFe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,MFe(m,A)|0,A),I=d}function xM(){var o=0,l=0;if(s[7744]|0||(Vz(9684),gr(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(_r(9684)|0)){o=9684,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));Vz(9684)}return 9684}function LFe(o){return o=o|0,0}function MFe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=xM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Yz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(UFe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function Yz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function UFe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=_Fe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,HFe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Yz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,jFe(o,k),GFe(k),I=M;return}}function _Fe(o){return o=o|0,357913941}function HFe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function jFe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function GFe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function Vz(o){o=o|0,YFe(o)}function qFe(o){o=o|0,WFe(o+24|0)}function WFe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function YFe(o){o=o|0;var l=0;l=en()|0,tn(o,2,5,l,VFe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function VFe(){return 1280}function JFe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=KFe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],u=zFe(l,d,u)|0,I=A,u|0}function KFe(o){return o=o|0,(n[(xM()|0)+24>>2]|0)+(o*12|0)|0}function zFe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return B=I,I=I+32|0,d=B,m=B+16|0,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),tp(m,u),m=rp(m,u)|0,F2[A&15](d,o,m),m=qz(d)|0,I=B,m|0}function ZFe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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(o,u,d,1),I=A}function XFe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=kM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=$Fe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,eNe(m,A)|0,A),I=d}function kM(){var o=0,l=0;if(s[7752]|0||(Kz(9720),gr(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(_r(9720)|0)){o=9720,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));Kz(9720)}return 9720}function $Fe(o){return o=o|0,0}function eNe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=kM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Jz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(tNe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function Jz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function tNe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=rNe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,nNe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Jz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,iNe(o,k),sNe(k),I=M;return}}function rNe(o){return o=o|0,357913941}function nNe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function iNe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function sNe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function Kz(o){o=o|0,lNe(o)}function oNe(o){o=o|0,aNe(o+24|0)}function aNe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function lNe(o){o=o|0;var l=0;l=en()|0,tn(o,2,8,l,cNe()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function cNe(){return 1288}function uNe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;return u=I,I=I+16|0,A=u+8|0,d=u,m=fNe(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],l=ANe(l,A)|0,I=u,l|0}function fNe(o){return o=o|0,(n[(kM()|0)+24>>2]|0)+(o*12|0)|0}function ANe(o,l){o=o|0,l=l|0;var u=0;return u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),sd(gd[u&31](o)|0)|0}function pNe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],hNe(o,u,d,0),I=A}function hNe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=QM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=gNe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,dNe(m,A)|0,A),I=d}function QM(){var o=0,l=0;if(s[7760]|0||(Zz(9756),gr(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(_r(9756)|0)){o=9756,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));Zz(9756)}return 9756}function gNe(o){return o=o|0,0}function dNe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=QM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],zz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(mNe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function zz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function mNe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=yNe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,ENe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],zz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,INe(o,k),CNe(k),I=M;return}}function yNe(o){return o=o|0,357913941}function ENe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function INe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function CNe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function Zz(o){o=o|0,vNe(o)}function wNe(o){o=o|0,BNe(o+24|0)}function BNe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function vNe(o){o=o|0;var l=0;l=en()|0,tn(o,2,8,l,SNe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function SNe(){return 1292}function DNe(o,l,u){o=o|0,l=l|0,u=+u;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,d=A+8|0,m=A,B=PNe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bNe(l,d,u),I=A}function PNe(o){return o=o|0,(n[(QM()|0)+24>>2]|0)+(o*12|0)|0}function bNe(o,l,u){o=o|0,l=l|0,u=+u;var A=0,d=0,m=0;m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),Qf(d,u),u=+Rf(d,u),RX[A&31](o,u),I=m}function xNe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],kNe(o,u,d,0),I=A}function kNe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=RM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=QNe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,RNe(m,A)|0,A),I=d}function RM(){var o=0,l=0;if(s[7768]|0||($z(9792),gr(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(_r(9792)|0)){o=9792,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));$z(9792)}return 9792}function QNe(o){return o=o|0,0}function RNe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=RM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Xz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(TNe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function Xz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function TNe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=FNe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,NNe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Xz(m,A,u),n[R>>2]=(n[R>>2]|0)+12,ONe(o,k),LNe(k),I=M;return}}function FNe(o){return o=o|0,357913941}function NNe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function ONe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function LNe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function $z(o){o=o|0,_Ne(o)}function MNe(o){o=o|0,UNe(o+24|0)}function UNe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function _Ne(o){o=o|0;var l=0;l=en()|0,tn(o,2,1,l,HNe()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function HNe(){return 1300}function jNe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=+A;var d=0,m=0,B=0,k=0;d=I,I=I+16|0,m=d+8|0,B=d,k=GNe(o)|0,o=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=o,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],qNe(l,m,u,A),I=d}function GNe(o){return o=o|0,(n[(RM()|0)+24>>2]|0)+(o*12|0)|0}function qNe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=+A;var d=0,m=0,B=0,k=0;k=I,I=I+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(d=n[(n[o>>2]|0)+d>>2]|0),tp(m,u),m=rp(m,u)|0,Qf(B,A),A=+Rf(B,A),_X[d&15](o,m,A),I=k}function WNe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],YNe(o,u,d,0),I=A}function YNe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=TM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=VNe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,JNe(m,A)|0,A),I=d}function TM(){var o=0,l=0;if(s[7776]|0||(tZ(9828),gr(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(_r(9828)|0)){o=9828,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));tZ(9828)}return 9828}function VNe(o){return o=o|0,0}function JNe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=TM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],eZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(KNe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function eZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function KNe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=zNe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,ZNe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],eZ(m,A,u),n[R>>2]=(n[R>>2]|0)+12,XNe(o,k),$Ne(k),I=M;return}}function zNe(o){return o=o|0,357913941}function ZNe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function XNe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function $Ne(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function tZ(o){o=o|0,rOe(o)}function eOe(o){o=o|0,tOe(o+24|0)}function tOe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function rOe(o){o=o|0;var l=0;l=en()|0,tn(o,2,7,l,nOe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function nOe(){return 1312}function iOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,d=A+8|0,m=A,B=sOe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oOe(l,d,u),I=A}function sOe(o){return o=o|0,(n[(TM()|0)+24>>2]|0)+(o*12|0)|0}function oOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),tp(d,u),d=rp(d,u)|0,sp[A&31](o,d),I=m}function aOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],lOe(o,u,d,0),I=A}function lOe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=FM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=cOe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,uOe(m,A)|0,A),I=d}function FM(){var o=0,l=0;if(s[7784]|0||(nZ(9864),gr(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(_r(9864)|0)){o=9864,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));nZ(9864)}return 9864}function cOe(o){return o=o|0,0}function uOe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=FM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],rZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(fOe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function rZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function fOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=AOe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,pOe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],rZ(m,A,u),n[R>>2]=(n[R>>2]|0)+12,hOe(o,k),gOe(k),I=M;return}}function AOe(o){return o=o|0,357913941}function pOe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function hOe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function gOe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function nZ(o){o=o|0,yOe(o)}function dOe(o){o=o|0,mOe(o+24|0)}function mOe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function yOe(o){o=o|0;var l=0;l=en()|0,tn(o,2,8,l,EOe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function EOe(){return 1320}function IOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,d=A+8|0,m=A,B=COe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],wOe(l,d,u),I=A}function COe(o){return o=o|0,(n[(FM()|0)+24>>2]|0)+(o*12|0)|0}function wOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),BOe(d,u),d=vOe(d,u)|0,sp[A&31](o,d),I=m}function BOe(o,l){o=o|0,l=l|0}function vOe(o,l){return o=o|0,l=l|0,SOe(l)|0}function SOe(o){return o=o|0,o|0}function DOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],POe(o,u,d,0),I=A}function POe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=NM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=bOe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,xOe(m,A)|0,A),I=d}function NM(){var o=0,l=0;if(s[7792]|0||(sZ(9900),gr(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(_r(9900)|0)){o=9900,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));sZ(9900)}return 9900}function bOe(o){return o=o|0,0}function xOe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=NM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],iZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(kOe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function iZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function kOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=QOe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,ROe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],iZ(m,A,u),n[R>>2]=(n[R>>2]|0)+12,TOe(o,k),FOe(k),I=M;return}}function QOe(o){return o=o|0,357913941}function ROe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function TOe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function FOe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function sZ(o){o=o|0,LOe(o)}function NOe(o){o=o|0,OOe(o+24|0)}function OOe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function LOe(o){o=o|0;var l=0;l=en()|0,tn(o,2,22,l,MOe()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function MOe(){return 1344}function UOe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;u=I,I=I+16|0,A=u+8|0,d=u,m=_Oe(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],HOe(l,A),I=u}function _Oe(o){return o=o|0,(n[(NM()|0)+24>>2]|0)+(o*12|0)|0}function HOe(o,l){o=o|0,l=l|0;var u=0;u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),ip[u&127](o)}function jOe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=OM()|0,o=GOe(u)|0,vn(m,l,d,o,qOe(u,A)|0,A)}function OM(){var o=0,l=0;if(s[7800]|0||(aZ(9936),gr(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(_r(9936)|0)){o=9936,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));aZ(9936)}return 9936}function GOe(o){return o=o|0,o|0}function qOe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,R=OM()|0,B=R+24|0,l=yr(l,4)|0,n[m>>2]=l,u=R+28|0,A=n[u>>2]|0,A>>>0<(n[R+32>>2]|0)>>>0?(oZ(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(WOe(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function oZ(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function WOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=YOe(o)|0,A>>>0>>0)sn(o);else{R=n[o>>2]|0,L=(n[o+8>>2]|0)-R|0,M=L>>2,VOe(d,L>>3>>>0>>1>>>0?M>>>0>>0?B:M:A,(n[m>>2]|0)-R>>3,o+8|0),B=d+8|0,oZ(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,JOe(o,d),KOe(d),I=k;return}}function YOe(o){return o=o|0,536870911}function VOe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Kt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function JOe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function KOe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&It(o)}function aZ(o){o=o|0,XOe(o)}function zOe(o){o=o|0,ZOe(o+24|0)}function ZOe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function XOe(o){o=o|0;var l=0;l=en()|0,tn(o,1,23,l,Nz()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function $Oe(o,l){o=o|0,l=l|0,tLe(n[(eLe(o)|0)>>2]|0,l)}function eLe(o){return o=o|0,(n[(OM()|0)+24>>2]|0)+(o<<3)|0}function tLe(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,wM(A,l),l=BM(A,l)|0,ip[o&127](l),I=u}function rLe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=LM()|0,o=nLe(u)|0,vn(m,l,d,o,iLe(u,A)|0,A)}function LM(){var o=0,l=0;if(s[7808]|0||(cZ(9972),gr(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(_r(9972)|0)){o=9972,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));cZ(9972)}return 9972}function nLe(o){return o=o|0,o|0}function iLe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,R=LM()|0,B=R+24|0,l=yr(l,4)|0,n[m>>2]=l,u=R+28|0,A=n[u>>2]|0,A>>>0<(n[R+32>>2]|0)>>>0?(lZ(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(sLe(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function lZ(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function sLe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=oLe(o)|0,A>>>0>>0)sn(o);else{R=n[o>>2]|0,L=(n[o+8>>2]|0)-R|0,M=L>>2,aLe(d,L>>3>>>0>>1>>>0?M>>>0>>0?B:M:A,(n[m>>2]|0)-R>>3,o+8|0),B=d+8|0,lZ(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,lLe(o,d),cLe(d),I=k;return}}function oLe(o){return o=o|0,536870911}function aLe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Kt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function lLe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function cLe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&It(o)}function cZ(o){o=o|0,ALe(o)}function uLe(o){o=o|0,fLe(o+24|0)}function fLe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function ALe(o){o=o|0;var l=0;l=en()|0,tn(o,1,9,l,pLe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function pLe(){return 1348}function hLe(o,l){return o=o|0,l=l|0,dLe(n[(gLe(o)|0)>>2]|0,l)|0}function gLe(o){return o=o|0,(n[(LM()|0)+24>>2]|0)+(o<<3)|0}function dLe(o,l){o=o|0,l=l|0;var u=0,A=0;return u=I,I=I+16|0,A=u,uZ(A,l),l=fZ(A,l)|0,l=Rb(gd[o&31](l)|0)|0,I=u,l|0}function uZ(o,l){o=o|0,l=l|0}function fZ(o,l){return o=o|0,l=l|0,mLe(l)|0}function mLe(o){return o=o|0,o|0}function yLe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=MM()|0,o=ELe(u)|0,vn(m,l,d,o,ILe(u,A)|0,A)}function MM(){var o=0,l=0;if(s[7816]|0||(pZ(10008),gr(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(_r(10008)|0)){o=10008,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));pZ(10008)}return 10008}function ELe(o){return o=o|0,o|0}function ILe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,R=MM()|0,B=R+24|0,l=yr(l,4)|0,n[m>>2]=l,u=R+28|0,A=n[u>>2]|0,A>>>0<(n[R+32>>2]|0)>>>0?(AZ(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(CLe(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function AZ(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function CLe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=wLe(o)|0,A>>>0>>0)sn(o);else{R=n[o>>2]|0,L=(n[o+8>>2]|0)-R|0,M=L>>2,BLe(d,L>>3>>>0>>1>>>0?M>>>0>>0?B:M:A,(n[m>>2]|0)-R>>3,o+8|0),B=d+8|0,AZ(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,vLe(o,d),SLe(d),I=k;return}}function wLe(o){return o=o|0,536870911}function BLe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Kt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function vLe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function SLe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&It(o)}function pZ(o){o=o|0,bLe(o)}function DLe(o){o=o|0,PLe(o+24|0)}function PLe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function bLe(o){o=o|0;var l=0;l=en()|0,tn(o,1,15,l,xz()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function xLe(o){return o=o|0,QLe(n[(kLe(o)|0)>>2]|0)|0}function kLe(o){return o=o|0,(n[(MM()|0)+24>>2]|0)+(o<<3)|0}function QLe(o){return o=o|0,Rb(Vb[o&7]()|0)|0}function RLe(){var o=0;return s[7832]|0||(_Le(10052),gr(25,10052,U|0)|0,o=7832,n[o>>2]=1,n[o+4>>2]=0),10052}function TLe(o,l){o=o|0,l=l|0,n[o>>2]=FLe()|0,n[o+4>>2]=NLe()|0,n[o+12>>2]=l,n[o+8>>2]=OLe()|0,n[o+32>>2]=2}function FLe(){return 11709}function NLe(){return 1188}function OLe(){return Fb()|0}function LLe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(Hh(A,896)|0)==512?u|0&&(MLe(u),It(u)):l|0&&(Oy(l),It(l))}function Hh(o,l){return o=o|0,l=l|0,l&o|0}function MLe(o){o=o|0,o=n[o+4>>2]|0,o|0&&Gh(o)}function Fb(){var o=0;return s[7824]|0||(n[2511]=ULe()|0,n[2512]=0,o=7824,n[o>>2]=1,n[o+4>>2]=0),10044}function ULe(){return 0}function _Le(o){o=o|0,Lh(o)}function HLe(o){o=o|0;var l=0,u=0,A=0,d=0,m=0;l=I,I=I+32|0,u=l+24|0,m=l+16|0,d=l+8|0,A=l,jLe(o,4827),GLe(o,4834,3)|0,qLe(o,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[u>>2]=n[m>>2],n[u+4>>2]=n[m+4>>2],WLe(o,4841,u)|0,n[d>>2]=1,n[d+4>>2]=0,n[u>>2]=n[d>>2],n[u+4>>2]=n[d+4>>2],YLe(o,4871,u)|0,n[A>>2]=10,n[A+4>>2]=0,n[u>>2]=n[A>>2],n[u+4>>2]=n[A+4>>2],VLe(o,4891,u)|0,I=l}function jLe(o,l){o=o|0,l=l|0;var u=0;u=SUe()|0,n[o>>2]=u,DUe(u,l),jh(n[o>>2]|0)}function GLe(o,l,u){return o=o|0,l=l|0,u=u|0,cUe(o,Bn(l)|0,u,0),o|0}function qLe(o,l,u){return o=o|0,l=l|0,u=u|0,JMe(o,Bn(l)|0,u,0),o|0}function WLe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xMe(o,l,d),I=A,o|0}function YLe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],uMe(o,l,d),I=A,o|0}function VLe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],JLe(o,l,d),I=A,o|0}function JLe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],KLe(o,u,d,1),I=A}function KLe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=UM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=zLe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,ZLe(m,A)|0,A),I=d}function UM(){var o=0,l=0;if(s[7840]|0||(gZ(10100),gr(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(_r(10100)|0)){o=10100,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));gZ(10100)}return 10100}function zLe(o){return o=o|0,0}function ZLe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=UM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],hZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(XLe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function hZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function XLe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=$Le(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,eMe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],hZ(m,A,u),n[R>>2]=(n[R>>2]|0)+12,tMe(o,k),rMe(k),I=M;return}}function $Le(o){return o=o|0,357913941}function eMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function tMe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function rMe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function gZ(o){o=o|0,sMe(o)}function nMe(o){o=o|0,iMe(o+24|0)}function iMe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function sMe(o){o=o|0;var l=0;l=en()|0,tn(o,2,6,l,oMe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function oMe(){return 1364}function aMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=lMe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],u=cMe(l,d,u)|0,I=A,u|0}function lMe(o){return o=o|0,(n[(UM()|0)+24>>2]|0)+(o*12|0)|0}function cMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;return m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),tp(d,u),d=rp(d,u)|0,d=wz(hU[A&15](o,d)|0)|0,I=m,d|0}function uMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],fMe(o,u,d,0),I=A}function fMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=_M()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=AMe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,pMe(m,A)|0,A),I=d}function _M(){var o=0,l=0;if(s[7848]|0||(mZ(10136),gr(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(_r(10136)|0)){o=10136,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));mZ(10136)}return 10136}function AMe(o){return o=o|0,0}function pMe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=_M()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],dZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(hMe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function dZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function hMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=gMe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,dMe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],dZ(m,A,u),n[R>>2]=(n[R>>2]|0)+12,mMe(o,k),yMe(k),I=M;return}}function gMe(o){return o=o|0,357913941}function dMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function mMe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function yMe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function mZ(o){o=o|0,CMe(o)}function EMe(o){o=o|0,IMe(o+24|0)}function IMe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function CMe(o){o=o|0;var l=0;l=en()|0,tn(o,2,9,l,wMe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function wMe(){return 1372}function BMe(o,l,u){o=o|0,l=l|0,u=+u;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,d=A+8|0,m=A,B=vMe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],SMe(l,d,u),I=A}function vMe(o){return o=o|0,(n[(_M()|0)+24>>2]|0)+(o*12|0)|0}function SMe(o,l,u){o=o|0,l=l|0,u=+u;var A=0,d=0,m=0,B=$e;m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),DMe(d,u),B=y(PMe(d,u)),QX[A&1](o,B),I=m}function DMe(o,l){o=o|0,l=+l}function PMe(o,l){return o=o|0,l=+l,y(bMe(l))}function bMe(o){return o=+o,y(o)}function xMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(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],kMe(o,u,d,0),I=A}function kMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,R=0,M=0,L=0;d=I,I=I+32|0,m=d+16|0,L=d+8|0,k=d,M=n[u>>2]|0,R=n[u+4>>2]|0,B=n[o>>2]|0,o=HM()|0,n[L>>2]=M,n[L+4>>2]=R,n[m>>2]=n[L>>2],n[m+4>>2]=n[L+4>>2],u=QMe(m)|0,n[k>>2]=M,n[k+4>>2]=R,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,RMe(m,A)|0,A),I=d}function HM(){var o=0,l=0;if(s[7856]|0||(EZ(10172),gr(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(_r(10172)|0)){o=10172,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));EZ(10172)}return 10172}function QMe(o){return o=o|0,0}function RMe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0;return L=I,I=I+32|0,d=L+24|0,B=L+16|0,k=L,R=L+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,q=HM()|0,M=q+24|0,o=yr(l,4)|0,n[R>>2]=o,l=q+28|0,u=n[l>>2]|0,u>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],yZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(TMe(M,k,R),o=n[l>>2]|0),I=L,((o-(n[M>>2]|0)|0)/12|0)+-1|0}function yZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function TMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;if(M=I,I=I+48|0,A=M+32|0,B=M+24|0,k=M,R=o+4|0,d=(((n[R>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=FMe(o)|0,m>>>0>>0)sn(o);else{L=n[o>>2]|0,ae=((n[o+8>>2]|0)-L|0)/12|0,q=ae<<1,NMe(k,ae>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[R>>2]|0)-L|0)/12|0,o+8|0),R=k+8|0,m=n[R>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],yZ(m,A,u),n[R>>2]=(n[R>>2]|0)+12,OMe(o,k),LMe(k),I=M;return}}function FMe(o){return o=o|0,357913941}function NMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Kt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function OMe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function LMe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&It(o)}function EZ(o){o=o|0,_Me(o)}function MMe(o){o=o|0,UMe(o+24|0)}function UMe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),It(u))}function _Me(o){o=o|0;var l=0;l=en()|0,tn(o,2,3,l,HMe()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function HMe(){return 1380}function jMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;d=I,I=I+16|0,m=d+8|0,B=d,k=GMe(o)|0,o=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=o,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],qMe(l,m,u,A),I=d}function GMe(o){return o=o|0,(n[(HM()|0)+24>>2]|0)+(o*12|0)|0}function qMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;k=I,I=I+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(d=n[(n[o>>2]|0)+d>>2]|0),tp(m,u),m=rp(m,u)|0,WMe(B,A),B=YMe(B,A)|0,F2[d&15](o,m,B),I=k}function WMe(o,l){o=o|0,l=l|0}function YMe(o,l){return o=o|0,l=l|0,VMe(l)|0}function VMe(o){return o=o|0,(o|0)!=0|0}function JMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=jM()|0,o=KMe(u)|0,vn(m,l,d,o,zMe(u,A)|0,A)}function jM(){var o=0,l=0;if(s[7864]|0||(CZ(10208),gr(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(_r(10208)|0)){o=10208,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));CZ(10208)}return 10208}function KMe(o){return o=o|0,o|0}function zMe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,R=jM()|0,B=R+24|0,l=yr(l,4)|0,n[m>>2]=l,u=R+28|0,A=n[u>>2]|0,A>>>0<(n[R+32>>2]|0)>>>0?(IZ(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(ZMe(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function IZ(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function ZMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=XMe(o)|0,A>>>0>>0)sn(o);else{R=n[o>>2]|0,L=(n[o+8>>2]|0)-R|0,M=L>>2,$Me(d,L>>3>>>0>>1>>>0?M>>>0>>0?B:M:A,(n[m>>2]|0)-R>>3,o+8|0),B=d+8|0,IZ(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,eUe(o,d),tUe(d),I=k;return}}function XMe(o){return o=o|0,536870911}function $Me(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Kt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function eUe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function tUe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&It(o)}function CZ(o){o=o|0,iUe(o)}function rUe(o){o=o|0,nUe(o+24|0)}function nUe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function iUe(o){o=o|0;var l=0;l=en()|0,tn(o,1,24,l,sUe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function sUe(){return 1392}function oUe(o,l){o=o|0,l=l|0,lUe(n[(aUe(o)|0)>>2]|0,l)}function aUe(o){return o=o|0,(n[(jM()|0)+24>>2]|0)+(o<<3)|0}function lUe(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,uZ(A,l),l=fZ(A,l)|0,ip[o&127](l),I=u}function cUe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=GM()|0,o=uUe(u)|0,vn(m,l,d,o,fUe(u,A)|0,A)}function GM(){var o=0,l=0;if(s[7872]|0||(BZ(10244),gr(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(_r(10244)|0)){o=10244,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));BZ(10244)}return 10244}function uUe(o){return o=o|0,o|0}function fUe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,R=GM()|0,B=R+24|0,l=yr(l,4)|0,n[m>>2]=l,u=R+28|0,A=n[u>>2]|0,A>>>0<(n[R+32>>2]|0)>>>0?(wZ(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(AUe(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function wZ(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function AUe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=pUe(o)|0,A>>>0>>0)sn(o);else{R=n[o>>2]|0,L=(n[o+8>>2]|0)-R|0,M=L>>2,hUe(d,L>>3>>>0>>1>>>0?M>>>0>>0?B:M:A,(n[m>>2]|0)-R>>3,o+8|0),B=d+8|0,wZ(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,gUe(o,d),dUe(d),I=k;return}}function pUe(o){return o=o|0,536870911}function hUe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Kt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function gUe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function dUe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&It(o)}function BZ(o){o=o|0,EUe(o)}function mUe(o){o=o|0,yUe(o+24|0)}function yUe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function EUe(o){o=o|0;var l=0;l=en()|0,tn(o,1,16,l,IUe()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function IUe(){return 1400}function CUe(o){return o=o|0,BUe(n[(wUe(o)|0)>>2]|0)|0}function wUe(o){return o=o|0,(n[(GM()|0)+24>>2]|0)+(o<<3)|0}function BUe(o){return o=o|0,vUe(Vb[o&7]()|0)|0}function vUe(o){return o=o|0,o|0}function SUe(){var o=0;return s[7880]|0||(RUe(10280),gr(25,10280,U|0)|0,o=7880,n[o>>2]=1,n[o+4>>2]=0),10280}function DUe(o,l){o=o|0,l=l|0,n[o>>2]=PUe()|0,n[o+4>>2]=bUe()|0,n[o+12>>2]=l,n[o+8>>2]=xUe()|0,n[o+32>>2]=4}function PUe(){return 11711}function bUe(){return 1356}function xUe(){return Fb()|0}function kUe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(Hh(A,896)|0)==512?u|0&&(QUe(u),It(u)):l|0&&(Kg(l),It(l))}function QUe(o){o=o|0,o=n[o+4>>2]|0,o|0&&Gh(o)}function RUe(o){o=o|0,Lh(o)}function TUe(o){o=o|0,FUe(o,4920),NUe(o)|0,OUe(o)|0}function FUe(o,l){o=o|0,l=l|0;var u=0;u=Wz()|0,n[o>>2]=u,n_e(u,l),jh(n[o>>2]|0)}function NUe(o){o=o|0;var l=0;return l=n[o>>2]|0,cd(l,VUe()|0),o|0}function OUe(o){o=o|0;var l=0;return l=n[o>>2]|0,cd(l,LUe()|0),o|0}function LUe(){var o=0;return s[7888]|0||(vZ(10328),gr(53,10328,U|0)|0,o=7888,n[o>>2]=1,n[o+4>>2]=0),_r(10328)|0||vZ(10328),10328}function cd(o,l){o=o|0,l=l|0,vn(o,0,l,0,0,0)}function vZ(o){o=o|0,_Ue(o),ud(o,10)}function MUe(o){o=o|0,UUe(o+24|0)}function UUe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function _Ue(o){o=o|0;var l=0;l=en()|0,tn(o,5,1,l,qUe()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function HUe(o,l,u){o=o|0,l=l|0,u=+u,jUe(o,l,u)}function ud(o,l){o=o|0,l=l|0,n[o+20>>2]=l}function jUe(o,l,u){o=o|0,l=l|0,u=+u;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,m=A+8|0,k=A+13|0,d=A,B=A+12|0,tp(k,l),n[m>>2]=rp(k,l)|0,Qf(B,u),E[d>>3]=+Rf(B,u),GUe(o,m,d),I=A}function GUe(o,l,u){o=o|0,l=l|0,u=u|0,Rl(o+8|0,n[l>>2]|0,+E[u>>3]),s[o+24>>0]=1}function qUe(){return 1404}function WUe(o,l){return o=o|0,l=+l,YUe(o,l)|0}function YUe(o,l){o=o|0,l=+l;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;return A=I,I=I+16|0,m=A+4|0,B=A+8|0,k=A,d=Tl(8)|0,u=d,R=Kt(16)|0,tp(m,o),o=rp(m,o)|0,Qf(B,l),Rl(R,o,+Rf(B,l)),B=u+4|0,n[B>>2]=R,o=Kt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],bM(o,B,m),n[d>>2]=o,I=A,u|0}function VUe(){var o=0;return s[7896]|0||(SZ(10364),gr(54,10364,U|0)|0,o=7896,n[o>>2]=1,n[o+4>>2]=0),_r(10364)|0||SZ(10364),10364}function SZ(o){o=o|0,zUe(o),ud(o,55)}function JUe(o){o=o|0,KUe(o+24|0)}function KUe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function zUe(o){o=o|0;var l=0;l=en()|0,tn(o,5,4,l,e_e()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function ZUe(o){o=o|0,XUe(o)}function XUe(o){o=o|0,$Ue(o)}function $Ue(o){o=o|0,DZ(o+8|0),s[o+24>>0]=1}function DZ(o){o=o|0,n[o>>2]=0,E[o+8>>3]=0}function e_e(){return 1424}function t_e(){return r_e()|0}function r_e(){var o=0,l=0,u=0,A=0,d=0,m=0,B=0;return l=I,I=I+16|0,d=l+4|0,B=l,u=Tl(8)|0,o=u,A=Kt(16)|0,DZ(A),m=o+4|0,n[m>>2]=A,A=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],bM(A,m,d),n[u>>2]=A,I=l,o|0}function n_e(o,l){o=o|0,l=l|0,n[o>>2]=i_e()|0,n[o+4>>2]=s_e()|0,n[o+12>>2]=l,n[o+8>>2]=o_e()|0,n[o+32>>2]=5}function i_e(){return 11710}function s_e(){return 1416}function o_e(){return Nb()|0}function a_e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(Hh(A,896)|0)==512?u|0&&(l_e(u),It(u)):l|0&&It(l)}function l_e(o){o=o|0,o=n[o+4>>2]|0,o|0&&Gh(o)}function Nb(){var o=0;return s[7904]|0||(n[2600]=c_e()|0,n[2601]=0,o=7904,n[o>>2]=1,n[o+4>>2]=0),10400}function c_e(){return n[357]|0}function u_e(o){o=o|0,f_e(o,4926),A_e(o)|0}function f_e(o,l){o=o|0,l=l|0;var u=0;u=hz()|0,n[o>>2]=u,B_e(u,l),jh(n[o>>2]|0)}function A_e(o){o=o|0;var l=0;return l=n[o>>2]|0,cd(l,p_e()|0),o|0}function p_e(){var o=0;return s[7912]|0||(PZ(10412),gr(56,10412,U|0)|0,o=7912,n[o>>2]=1,n[o+4>>2]=0),_r(10412)|0||PZ(10412),10412}function PZ(o){o=o|0,d_e(o),ud(o,57)}function h_e(o){o=o|0,g_e(o+24|0)}function g_e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function d_e(o){o=o|0;var l=0;l=en()|0,tn(o,5,5,l,I_e()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function m_e(o){o=o|0,y_e(o)}function y_e(o){o=o|0,E_e(o)}function E_e(o){o=o|0;var l=0,u=0;l=o+8|0,u=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(u|0));s[o+56>>0]=1}function I_e(){return 1432}function C_e(){return w_e()|0}function w_e(){var o=0,l=0,u=0,A=0,d=0,m=0,B=0,k=0;B=I,I=I+16|0,o=B+4|0,l=B,u=Tl(8)|0,A=u,d=Kt(48)|0,m=d,k=m+48|0;do n[m>>2]=0,m=m+4|0;while((m|0)<(k|0));return m=A+4|0,n[m>>2]=d,k=Kt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[o>>2]=n[l>>2],gz(k,m,o),n[u>>2]=k,I=B,A|0}function B_e(o,l){o=o|0,l=l|0,n[o>>2]=v_e()|0,n[o+4>>2]=S_e()|0,n[o+12>>2]=l,n[o+8>>2]=D_e()|0,n[o+32>>2]=6}function v_e(){return 11704}function S_e(){return 1436}function D_e(){return Nb()|0}function P_e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(Hh(A,896)|0)==512?u|0&&(b_e(u),It(u)):l|0&&It(l)}function b_e(o){o=o|0,o=n[o+4>>2]|0,o|0&&Gh(o)}function x_e(o){o=o|0,k_e(o,4933),Q_e(o)|0,R_e(o)|0}function k_e(o,l){o=o|0,l=l|0;var u=0;u=r4e()|0,n[o>>2]=u,n4e(u,l),jh(n[o>>2]|0)}function Q_e(o){o=o|0;var l=0;return l=n[o>>2]|0,cd(l,Y_e()|0),o|0}function R_e(o){o=o|0;var l=0;return l=n[o>>2]|0,cd(l,T_e()|0),o|0}function T_e(){var o=0;return s[7920]|0||(bZ(10452),gr(58,10452,U|0)|0,o=7920,n[o>>2]=1,n[o+4>>2]=0),_r(10452)|0||bZ(10452),10452}function bZ(o){o=o|0,O_e(o),ud(o,1)}function F_e(o){o=o|0,N_e(o+24|0)}function N_e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function O_e(o){o=o|0;var l=0;l=en()|0,tn(o,5,1,l,__e()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function L_e(o,l,u){o=o|0,l=+l,u=+u,M_e(o,l,u)}function M_e(o,l,u){o=o|0,l=+l,u=+u;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+32|0,m=A+8|0,k=A+17|0,d=A,B=A+16|0,Qf(k,l),E[m>>3]=+Rf(k,l),Qf(B,u),E[d>>3]=+Rf(B,u),U_e(o,m,d),I=A}function U_e(o,l,u){o=o|0,l=l|0,u=u|0,xZ(o+8|0,+E[l>>3],+E[u>>3]),s[o+24>>0]=1}function xZ(o,l,u){o=o|0,l=+l,u=+u,E[o>>3]=l,E[o+8>>3]=u}function __e(){return 1472}function H_e(o,l){return o=+o,l=+l,j_e(o,l)|0}function j_e(o,l){o=+o,l=+l;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;return A=I,I=I+16|0,B=A+4|0,k=A+8|0,R=A,d=Tl(8)|0,u=d,m=Kt(16)|0,Qf(B,o),o=+Rf(B,o),Qf(k,l),xZ(m,o,+Rf(k,l)),k=u+4|0,n[k>>2]=m,m=Kt(8)|0,k=n[k>>2]|0,n[R>>2]=0,n[B>>2]=n[R>>2],kZ(m,k,B),n[d>>2]=m,I=A,u|0}function kZ(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,u=Kt(16)|0,n[u+4>>2]=0,n[u+8>>2]=0,n[u>>2]=1452,n[u+12>>2]=l,n[o+4>>2]=u}function G_e(o){o=o|0,$y(o),It(o)}function q_e(o){o=o|0,o=n[o+12>>2]|0,o|0&&It(o)}function W_e(o){o=o|0,It(o)}function Y_e(){var o=0;return s[7928]|0||(QZ(10488),gr(59,10488,U|0)|0,o=7928,n[o>>2]=1,n[o+4>>2]=0),_r(10488)|0||QZ(10488),10488}function QZ(o){o=o|0,K_e(o),ud(o,60)}function V_e(o){o=o|0,J_e(o+24|0)}function J_e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function K_e(o){o=o|0;var l=0;l=en()|0,tn(o,5,6,l,$_e()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function z_e(o){o=o|0,Z_e(o)}function Z_e(o){o=o|0,X_e(o)}function X_e(o){o=o|0,RZ(o+8|0),s[o+24>>0]=1}function RZ(o){o=o|0,n[o>>2]=0,n[o+4>>2]=0,n[o+8>>2]=0,n[o+12>>2]=0}function $_e(){return 1492}function e4e(){return t4e()|0}function t4e(){var o=0,l=0,u=0,A=0,d=0,m=0,B=0;return l=I,I=I+16|0,d=l+4|0,B=l,u=Tl(8)|0,o=u,A=Kt(16)|0,RZ(A),m=o+4|0,n[m>>2]=A,A=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],kZ(A,m,d),n[u>>2]=A,I=l,o|0}function r4e(){var o=0;return s[7936]|0||(c4e(10524),gr(25,10524,U|0)|0,o=7936,n[o>>2]=1,n[o+4>>2]=0),10524}function n4e(o,l){o=o|0,l=l|0,n[o>>2]=i4e()|0,n[o+4>>2]=s4e()|0,n[o+12>>2]=l,n[o+8>>2]=o4e()|0,n[o+32>>2]=7}function i4e(){return 11700}function s4e(){return 1484}function o4e(){return Nb()|0}function a4e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(Hh(A,896)|0)==512?u|0&&(l4e(u),It(u)):l|0&&It(l)}function l4e(o){o=o|0,o=n[o+4>>2]|0,o|0&&Gh(o)}function c4e(o){o=o|0,Lh(o)}function u4e(o,l,u){o=o|0,l=l|0,u=u|0,o=Bn(l)|0,l=f4e(u)|0,u=A4e(u,0)|0,j4e(o,l,u,qM()|0,0)}function f4e(o){return o=o|0,o|0}function A4e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,R=qM()|0,B=R+24|0,l=yr(l,4)|0,n[m>>2]=l,u=R+28|0,A=n[u>>2]|0,A>>>0<(n[R+32>>2]|0)>>>0?(FZ(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(E4e(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function qM(){var o=0,l=0;if(s[7944]|0||(TZ(10568),gr(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(_r(10568)|0)){o=10568,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));TZ(10568)}return 10568}function TZ(o){o=o|0,g4e(o)}function p4e(o){o=o|0,h4e(o+24|0)}function h4e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function g4e(o){o=o|0;var l=0;l=en()|0,tn(o,1,17,l,Rz()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function d4e(o){return o=o|0,y4e(n[(m4e(o)|0)>>2]|0)|0}function m4e(o){return o=o|0,(n[(qM()|0)+24>>2]|0)+(o<<3)|0}function y4e(o){return o=o|0,Tb(Vb[o&7]()|0)|0}function FZ(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function E4e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=I4e(o)|0,A>>>0>>0)sn(o);else{R=n[o>>2]|0,L=(n[o+8>>2]|0)-R|0,M=L>>2,C4e(d,L>>3>>>0>>1>>>0?M>>>0>>0?B:M:A,(n[m>>2]|0)-R>>3,o+8|0),B=d+8|0,FZ(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,w4e(o,d),B4e(d),I=k;return}}function I4e(o){return o=o|0,536870911}function C4e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Kt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function w4e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function B4e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&It(o)}function v4e(){S4e()}function S4e(){D4e(10604)}function D4e(o){o=o|0,P4e(o,4955)}function P4e(o,l){o=o|0,l=l|0;var u=0;u=b4e()|0,n[o>>2]=u,x4e(u,l),jh(n[o>>2]|0)}function b4e(){var o=0;return s[7952]|0||(M4e(10612),gr(25,10612,U|0)|0,o=7952,n[o>>2]=1,n[o+4>>2]=0),10612}function x4e(o,l){o=o|0,l=l|0,n[o>>2]=T4e()|0,n[o+4>>2]=F4e()|0,n[o+12>>2]=l,n[o+8>>2]=N4e()|0,n[o+32>>2]=8}function jh(o){o=o|0;var l=0,u=0;l=I,I=I+16|0,u=l,Jy()|0,n[u>>2]=o,k4e(10608,u),I=l}function Jy(){return s[11714]|0||(n[2652]=0,gr(62,10608,U|0)|0,s[11714]=1),10608}function k4e(o,l){o=o|0,l=l|0;var u=0;u=Kt(8)|0,n[u+4>>2]=n[l>>2],n[u>>2]=n[o>>2],n[o>>2]=u}function Q4e(o){o=o|0,R4e(o)}function R4e(o){o=o|0;var l=0,u=0;if(l=n[o>>2]|0,l|0)do u=l,l=n[l>>2]|0,It(u);while(l|0);n[o>>2]=0}function T4e(){return 11715}function F4e(){return 1496}function N4e(){return Fb()|0}function O4e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(Hh(A,896)|0)==512?u|0&&(L4e(u),It(u)):l|0&&It(l)}function L4e(o){o=o|0,o=n[o+4>>2]|0,o|0&&Gh(o)}function M4e(o){o=o|0,Lh(o)}function U4e(o,l){o=o|0,l=l|0;var u=0,A=0;Jy()|0,u=n[2652]|0;e:do if(u|0){for(;A=n[u+4>>2]|0,!(A|0&&!(gX(WM(A)|0,o)|0));)if(u=n[u>>2]|0,!u)break e;_4e(A,l)}while(!1)}function WM(o){return o=o|0,n[o+12>>2]|0}function _4e(o,l){o=o|0,l=l|0;var u=0;o=o+36|0,u=n[o>>2]|0,u|0&&(Sf(u),It(u)),u=Kt(4)|0,Db(u,l),n[o>>2]=u}function YM(){return s[11716]|0||(n[2664]=0,gr(63,10656,U|0)|0,s[11716]=1),10656}function NZ(){var o=0;return s[11717]|0?o=n[2665]|0:(H4e(),n[2665]=1504,s[11717]=1,o=1504),o|0}function H4e(){s[11740]|0||(s[11718]=yr(yr(8,0)|0,0)|0,s[11719]=yr(yr(0,0)|0,0)|0,s[11720]=yr(yr(0,16)|0,0)|0,s[11721]=yr(yr(8,0)|0,0)|0,s[11722]=yr(yr(0,0)|0,0)|0,s[11723]=yr(yr(8,0)|0,0)|0,s[11724]=yr(yr(0,0)|0,0)|0,s[11725]=yr(yr(8,0)|0,0)|0,s[11726]=yr(yr(0,0)|0,0)|0,s[11727]=yr(yr(8,0)|0,0)|0,s[11728]=yr(yr(0,0)|0,0)|0,s[11729]=yr(yr(0,0)|0,32)|0,s[11730]=yr(yr(0,0)|0,32)|0,s[11740]=1)}function OZ(){return 1572}function j4e(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,R=0,M=0,L=0;m=I,I=I+32|0,L=m+16|0,M=m+12|0,R=m+8|0,k=m+4|0,B=m,n[L>>2]=o,n[M>>2]=l,n[R>>2]=u,n[k>>2]=A,n[B>>2]=d,YM()|0,G4e(10656,L,M,R,k,B),I=m}function G4e(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0;var B=0;B=Kt(24)|0,fz(B+4|0,n[l>>2]|0,n[u>>2]|0,n[A>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[o>>2],n[o>>2]=B}function LZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0,Ye=0,Le=0,Qe=0,tt=0,Xe=0,ct=0;if(ct=I,I=I+32|0,Le=ct+20|0,Qe=ct+8|0,tt=ct+4|0,Xe=ct,l=n[l>>2]|0,l|0){Ye=Le+4|0,R=Le+8|0,M=Qe+4|0,L=Qe+8|0,q=Qe+8|0,ae=Le+8|0;do{if(B=l+4|0,k=VM(B)|0,k|0){if(d=b2(k)|0,n[Le>>2]=0,n[Ye>>2]=0,n[R>>2]=0,A=(x2(k)|0)+1|0,q4e(Le,A),A|0)for(;A=A+-1|0,Pu(Qe,n[d>>2]|0),m=n[Ye>>2]|0,m>>>0<(n[ae>>2]|0)>>>0?(n[m>>2]=n[Qe>>2],n[Ye>>2]=(n[Ye>>2]|0)+4):JM(Le,Qe),A;)d=d+4|0;A=k2(k)|0,n[Qe>>2]=0,n[M>>2]=0,n[L>>2]=0;e:do if(n[A>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?W4e(Qe,A):(n[d>>2]=n[A>>2],n[M>>2]=(n[M>>2]|0)+4),A=A+4|0,!(n[A>>2]|0))break e;d=n[M>>2]|0,m=n[q>>2]|0}while(!1);n[tt>>2]=Ob(B)|0,n[Xe>>2]=_r(k)|0,Y4e(u,o,tt,Xe,Le,Qe),KM(Qe),np(Le)}l=n[l>>2]|0}while(l|0)}I=ct}function VM(o){return o=o|0,n[o+12>>2]|0}function b2(o){return o=o|0,n[o+12>>2]|0}function x2(o){return o=o|0,n[o+16>>2]|0}function q4e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;d=I,I=I+32|0,u=d,A=n[o>>2]|0,(n[o+8>>2]|0)-A>>2>>>0>>0&&(WZ(u,l,(n[o+4>>2]|0)-A>>2,o+8|0),YZ(o,u),VZ(u)),I=d}function JM(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0;if(B=I,I=I+32|0,u=B,A=o+4|0,d=((n[A>>2]|0)-(n[o>>2]|0)>>2)+1|0,m=qZ(o)|0,m>>>0>>0)sn(o);else{k=n[o>>2]|0,M=(n[o+8>>2]|0)-k|0,R=M>>1,WZ(u,M>>2>>>0>>1>>>0?R>>>0>>0?d:R:m,(n[A>>2]|0)-k>>2,o+8|0),m=u+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,YZ(o,u),VZ(u),I=B;return}}function k2(o){return o=o|0,n[o+8>>2]|0}function W4e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0;if(B=I,I=I+32|0,u=B,A=o+4|0,d=((n[A>>2]|0)-(n[o>>2]|0)>>2)+1|0,m=GZ(o)|0,m>>>0>>0)sn(o);else{k=n[o>>2]|0,M=(n[o+8>>2]|0)-k|0,R=M>>1,f3e(u,M>>2>>>0>>1>>>0?R>>>0>>0?d:R:m,(n[A>>2]|0)-k>>2,o+8|0),m=u+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,A3e(o,u),p3e(u),I=B;return}}function Ob(o){return o=o|0,n[o>>2]|0}function Y4e(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,V4e(o,l,u,A,d,m)}function KM(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-4-A|0)>>>2)<<2)),It(u))}function np(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-4-A|0)>>>2)<<2)),It(u))}function V4e(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0;var B=0,k=0,R=0,M=0,L=0,q=0;B=I,I=I+48|0,L=B+40|0,k=B+32|0,q=B+24|0,R=B+12|0,M=B,Fl(k),o=Os(o)|0,n[q>>2]=n[l>>2],u=n[u>>2]|0,A=n[A>>2]|0,zM(R,d),J4e(M,m),n[L>>2]=n[q>>2],K4e(o,L,u,A,R,M),KM(M),np(R),Nl(k),I=B}function zM(o,l){o=o|0,l=l|0;var u=0,A=0;n[o>>2]=0,n[o+4>>2]=0,n[o+8>>2]=0,u=l+4|0,A=(n[u>>2]|0)-(n[l>>2]|0)>>2,A|0&&(c3e(o,A),u3e(o,n[l>>2]|0,n[u>>2]|0,A))}function J4e(o,l){o=o|0,l=l|0;var u=0,A=0;n[o>>2]=0,n[o+4>>2]=0,n[o+8>>2]=0,u=l+4|0,A=(n[u>>2]|0)-(n[l>>2]|0)>>2,A|0&&(a3e(o,A),l3e(o,n[l>>2]|0,n[u>>2]|0,A))}function K4e(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0;var B=0,k=0,R=0,M=0,L=0,q=0;B=I,I=I+32|0,L=B+28|0,q=B+24|0,k=B+12|0,R=B,M=da(z4e()|0)|0,n[q>>2]=n[l>>2],n[L>>2]=n[q>>2],l=fd(L)|0,u=MZ(u)|0,A=ZM(A)|0,n[k>>2]=n[d>>2],L=d+4|0,n[k+4>>2]=n[L>>2],q=d+8|0,n[k+8>>2]=n[q>>2],n[q>>2]=0,n[L>>2]=0,n[d>>2]=0,d=XM(k)|0,n[R>>2]=n[m>>2],L=m+4|0,n[R+4>>2]=n[L>>2],q=m+8|0,n[R+8>>2]=n[q>>2],n[q>>2]=0,n[L>>2]=0,n[m>>2]=0,lu(0,M|0,o|0,l|0,u|0,A|0,d|0,Z4e(R)|0)|0,KM(R),np(k),I=B}function z4e(){var o=0;return s[7968]|0||(s3e(10708),o=7968,n[o>>2]=1,n[o+4>>2]=0),10708}function fd(o){return o=o|0,_Z(o)|0}function MZ(o){return o=o|0,UZ(o)|0}function ZM(o){return o=o|0,Tb(o)|0}function XM(o){return o=o|0,$4e(o)|0}function Z4e(o){return o=o|0,X4e(o)|0}function X4e(o){o=o|0;var l=0,u=0,A=0;if(A=(n[o+4>>2]|0)-(n[o>>2]|0)|0,u=A>>2,A=Tl(A+4|0)|0,n[A>>2]=u,u|0){l=0;do n[A+4+(l<<2)>>2]=UZ(n[(n[o>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(u|0))}return A|0}function UZ(o){return o=o|0,o|0}function $4e(o){o=o|0;var l=0,u=0,A=0;if(A=(n[o+4>>2]|0)-(n[o>>2]|0)|0,u=A>>2,A=Tl(A+4|0)|0,n[A>>2]=u,u|0){l=0;do n[A+4+(l<<2)>>2]=_Z((n[o>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(u|0))}return A|0}function _Z(o){o=o|0;var l=0,u=0,A=0,d=0;return d=I,I=I+32|0,l=d+12|0,u=d,A=uM(HZ()|0)|0,A?(fM(l,A),AM(u,l),Nje(o,u),o=pM(l)|0):o=e3e(o)|0,I=d,o|0}function HZ(){var o=0;return s[7960]|0||(i3e(10664),gr(25,10664,U|0)|0,o=7960,n[o>>2]=1,n[o+4>>2]=0),10664}function e3e(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0;return u=I,I=I+16|0,d=u+4|0,B=u,A=Tl(8)|0,l=A,k=Kt(4)|0,n[k>>2]=n[o>>2],m=l+4|0,n[m>>2]=k,o=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],jZ(o,m,d),n[A>>2]=o,I=u,l|0}function jZ(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,u=Kt(16)|0,n[u+4>>2]=0,n[u+8>>2]=0,n[u>>2]=1656,n[u+12>>2]=l,n[o+4>>2]=u}function t3e(o){o=o|0,$y(o),It(o)}function r3e(o){o=o|0,o=n[o+12>>2]|0,o|0&&It(o)}function n3e(o){o=o|0,It(o)}function i3e(o){o=o|0,Lh(o)}function s3e(o){o=o|0,Qo(o,o3e()|0,5)}function o3e(){return 1676}function a3e(o,l){o=o|0,l=l|0;var u=0;if((GZ(o)|0)>>>0>>0&&sn(o),l>>>0>1073741823)Nt();else{u=Kt(l<<2)|0,n[o+4>>2]=u,n[o>>2]=u,n[o+8>>2]=u+(l<<2);return}}function l3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,A=o+4|0,o=u-l|0,(o|0)>0&&(Qr(n[A>>2]|0,l|0,o|0)|0,n[A>>2]=(n[A>>2]|0)+(o>>>2<<2))}function GZ(o){return o=o|0,1073741823}function c3e(o,l){o=o|0,l=l|0;var u=0;if((qZ(o)|0)>>>0>>0&&sn(o),l>>>0>1073741823)Nt();else{u=Kt(l<<2)|0,n[o+4>>2]=u,n[o>>2]=u,n[o+8>>2]=u+(l<<2);return}}function u3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,A=o+4|0,o=u-l|0,(o|0)>0&&(Qr(n[A>>2]|0,l|0,o|0)|0,n[A>>2]=(n[A>>2]|0)+(o>>>2<<2))}function qZ(o){return o=o|0,1073741823}function f3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>1073741823)Nt();else{d=Kt(l<<2)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<2)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<2)}function A3e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function p3e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-4-l|0)>>>2)<<2)),o=n[o>>2]|0,o|0&&It(o)}function WZ(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>1073741823)Nt();else{d=Kt(l<<2)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<2)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<2)}function YZ(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function VZ(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-4-l|0)>>>2)<<2)),o=n[o>>2]|0,o|0&&It(o)}function h3e(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0,Ye=0,Le=0,Qe=0;if(Qe=I,I=I+32|0,L=Qe+20|0,q=Qe+12|0,M=Qe+16|0,ae=Qe+4|0,Ye=Qe,Le=Qe+8|0,k=NZ()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(R=n[k+8>>2]|0,k=n[k+4>>2]|0;Pu(L,B),g3e(o,L,k,R),m=m+4|0,B=n[m>>2]|0,B;)R=R+1|0,k=k+1|0;if(m=OZ()|0,B=n[m>>2]|0,B|0)do Pu(L,B),n[q>>2]=n[m+4>>2],d3e(l,L,q),m=m+8|0,B=n[m>>2]|0;while(B|0);if(m=n[(Jy()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,Pu(L,n[(Ky(l)|0)>>2]|0),n[q>>2]=WM(l)|0,m3e(u,L,q),m=n[m>>2]|0;while(m|0);if(Pu(M,0),m=YM()|0,n[L>>2]=n[M>>2],LZ(L,m,d),m=n[(Jy()|0)>>2]|0,m|0){o=L+4|0,l=L+8|0,u=L+8|0;do{if(R=n[m+4>>2]|0,Pu(q,n[(Ky(R)|0)>>2]|0),y3e(ae,JZ(R)|0),B=n[ae>>2]|0,B|0){n[L>>2]=0,n[o>>2]=0,n[l>>2]=0;do Pu(Ye,n[(Ky(n[B+4>>2]|0)|0)>>2]|0),k=n[o>>2]|0,k>>>0<(n[u>>2]|0)>>>0?(n[k>>2]=n[Ye>>2],n[o>>2]=(n[o>>2]|0)+4):JM(L,Ye),B=n[B>>2]|0;while(B|0);E3e(A,q,L),np(L)}n[Le>>2]=n[q>>2],M=KZ(R)|0,n[L>>2]=n[Le>>2],LZ(L,M,d),mz(ae),m=n[m>>2]|0}while(m|0)}I=Qe}function g3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,Q3e(o,l,u,A)}function d3e(o,l,u){o=o|0,l=l|0,u=u|0,k3e(o,l,u)}function Ky(o){return o=o|0,o|0}function m3e(o,l,u){o=o|0,l=l|0,u=u|0,D3e(o,l,u)}function JZ(o){return o=o|0,o+16|0}function y3e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;if(m=I,I=I+16|0,d=m+8|0,u=m,n[o>>2]=0,A=n[l>>2]|0,n[d>>2]=A,n[u>>2]=o,u=S3e(u)|0,A|0){if(A=Kt(12)|0,B=(zZ(d)|0)+4|0,o=n[B+4>>2]|0,l=A+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=o,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)o=A;else for(l=A;o=Kt(12)|0,R=(zZ(d)|0)+4|0,k=n[R+4>>2]|0,B=o+4|0,n[B>>2]=n[R>>2],n[B+4>>2]=k,n[l>>2]=o,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=o;n[o>>2]=n[u>>2],n[u>>2]=A}I=m}function E3e(o,l,u){o=o|0,l=l|0,u=u|0,I3e(o,l,u)}function KZ(o){return o=o|0,o+24|0}function I3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+32|0,B=A+24|0,d=A+16|0,k=A+12|0,m=A,Fl(d),o=Os(o)|0,n[k>>2]=n[l>>2],zM(m,u),n[B>>2]=n[k>>2],C3e(o,B,m),np(m),Nl(d),I=A}function C3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+32|0,B=A+16|0,k=A+12|0,d=A,m=da(w3e()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=fd(B)|0,n[d>>2]=n[u>>2],B=u+4|0,n[d+4>>2]=n[B>>2],k=u+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[u>>2]=0,Rs(0,m|0,o|0,l|0,XM(d)|0)|0,np(d),I=A}function w3e(){var o=0;return s[7976]|0||(B3e(10720),o=7976,n[o>>2]=1,n[o+4>>2]=0),10720}function B3e(o){o=o|0,Qo(o,v3e()|0,2)}function v3e(){return 1732}function S3e(o){return o=o|0,n[o>>2]|0}function zZ(o){return o=o|0,n[o>>2]|0}function D3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+32|0,m=A+16|0,d=A+8|0,B=A,Fl(d),o=Os(o)|0,n[B>>2]=n[l>>2],u=n[u>>2]|0,n[m>>2]=n[B>>2],ZZ(o,m,u),Nl(d),I=A}function ZZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,m=A+4|0,B=A,d=da(P3e()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=fd(m)|0,Rs(0,d|0,o|0,l|0,MZ(u)|0)|0,I=A}function P3e(){var o=0;return s[7984]|0||(b3e(10732),o=7984,n[o>>2]=1,n[o+4>>2]=0),10732}function b3e(o){o=o|0,Qo(o,x3e()|0,2)}function x3e(){return 1744}function k3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+32|0,m=A+16|0,d=A+8|0,B=A,Fl(d),o=Os(o)|0,n[B>>2]=n[l>>2],u=n[u>>2]|0,n[m>>2]=n[B>>2],ZZ(o,m,u),Nl(d),I=A}function Q3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;d=I,I=I+32|0,B=d+16|0,m=d+8|0,k=d,Fl(m),o=Os(o)|0,n[k>>2]=n[l>>2],u=s[u>>0]|0,A=s[A>>0]|0,n[B>>2]=n[k>>2],R3e(o,B,u,A),Nl(m),I=d}function R3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;d=I,I=I+16|0,B=d+4|0,k=d,m=da(T3e()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=fd(B)|0,u=zy(u)|0,Li(0,m|0,o|0,l|0,u|0,zy(A)|0)|0,I=d}function T3e(){var o=0;return s[7992]|0||(N3e(10744),o=7992,n[o>>2]=1,n[o+4>>2]=0),10744}function zy(o){return o=o|0,F3e(o)|0}function F3e(o){return o=o|0,o&255|0}function N3e(o){o=o|0,Qo(o,O3e()|0,3)}function O3e(){return 1756}function L3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;switch(ae=I,I=I+32|0,k=ae+8|0,R=ae+4|0,M=ae+20|0,L=ae,mM(o,0),A=Fje(l)|0,n[k>>2]=0,q=k+4|0,n[q>>2]=0,n[k+8>>2]=0,A<<24>>24){case 0:{s[M>>0]=0,M3e(R,u,M),Lb(o,R)|0,Df(R);break}case 8:{q=iU(l)|0,s[M>>0]=8,Pu(L,n[q+4>>2]|0),U3e(R,u,M,L,q+8|0),Lb(o,R)|0,Df(R);break}case 9:{if(m=iU(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,Pu(R,n[d>>2]|0),A=n[q>>2]|0,A>>>0<(n[B>>2]|0)>>>0?(n[A>>2]=n[R>>2],n[q>>2]=(n[q>>2]|0)+4):JM(k,R),l;)d=d+4|0;s[M>>0]=9,Pu(L,n[m+8>>2]|0),_3e(R,u,M,L,k),Lb(o,R)|0,Df(R);break}default:q=iU(l)|0,s[M>>0]=A,Pu(L,n[q+4>>2]|0),H3e(R,u,M,L),Lb(o,R)|0,Df(R)}np(k),I=ae}function M3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;A=I,I=I+16|0,d=A,Fl(d),l=Os(l)|0,e8e(o,l,s[u>>0]|0),Nl(d),I=A}function Lb(o,l){o=o|0,l=l|0;var u=0;return u=n[o>>2]|0,u|0&&Na(u|0),n[o>>2]=n[l>>2],n[l>>2]=0,o|0}function U3e(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,R=0;m=I,I=I+32|0,k=m+16|0,B=m+8|0,R=m,Fl(B),l=Os(l)|0,u=s[u>>0]|0,n[R>>2]=n[A>>2],d=n[d>>2]|0,n[k>>2]=n[R>>2],z3e(o,l,u,k,d),Nl(B),I=m}function _3e(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,R=0,M=0;m=I,I=I+32|0,R=m+24|0,B=m+16|0,M=m+12|0,k=m,Fl(B),l=Os(l)|0,u=s[u>>0]|0,n[M>>2]=n[A>>2],zM(k,d),n[R>>2]=n[M>>2],Y3e(o,l,u,R,k),np(k),Nl(B),I=m}function H3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;d=I,I=I+32|0,B=d+16|0,m=d+8|0,k=d,Fl(m),l=Os(l)|0,u=s[u>>0]|0,n[k>>2]=n[A>>2],n[B>>2]=n[k>>2],j3e(o,l,u,B),Nl(m),I=d}function j3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;d=I,I=I+16|0,m=d+4|0,k=d,B=da(G3e()|0)|0,u=zy(u)|0,n[k>>2]=n[A>>2],n[m>>2]=n[k>>2],Mb(o,Rs(0,B|0,l|0,u|0,fd(m)|0)|0),I=d}function G3e(){var o=0;return s[8e3]|0||(q3e(10756),o=8e3,n[o>>2]=1,n[o+4>>2]=0),10756}function Mb(o,l){o=o|0,l=l|0,mM(o,l)}function q3e(o){o=o|0,Qo(o,W3e()|0,2)}function W3e(){return 1772}function Y3e(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,R=0,M=0;m=I,I=I+32|0,R=m+16|0,M=m+12|0,B=m,k=da(V3e()|0)|0,u=zy(u)|0,n[M>>2]=n[A>>2],n[R>>2]=n[M>>2],A=fd(R)|0,n[B>>2]=n[d>>2],R=d+4|0,n[B+4>>2]=n[R>>2],M=d+8|0,n[B+8>>2]=n[M>>2],n[M>>2]=0,n[R>>2]=0,n[d>>2]=0,Mb(o,Li(0,k|0,l|0,u|0,A|0,XM(B)|0)|0),np(B),I=m}function V3e(){var o=0;return s[8008]|0||(J3e(10768),o=8008,n[o>>2]=1,n[o+4>>2]=0),10768}function J3e(o){o=o|0,Qo(o,K3e()|0,3)}function K3e(){return 1784}function z3e(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,R=0;m=I,I=I+16|0,k=m+4|0,R=m,B=da(Z3e()|0)|0,u=zy(u)|0,n[R>>2]=n[A>>2],n[k>>2]=n[R>>2],A=fd(k)|0,Mb(o,Li(0,B|0,l|0,u|0,A|0,ZM(d)|0)|0),I=m}function Z3e(){var o=0;return s[8016]|0||(X3e(10780),o=8016,n[o>>2]=1,n[o+4>>2]=0),10780}function X3e(o){o=o|0,Qo(o,$3e()|0,3)}function $3e(){return 1800}function e8e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=da(t8e()|0)|0,Mb(o,dn(0,A|0,l|0,zy(u)|0)|0)}function t8e(){var o=0;return s[8024]|0||(r8e(10792),o=8024,n[o>>2]=1,n[o+4>>2]=0),10792}function r8e(o){o=o|0,Qo(o,n8e()|0,1)}function n8e(){return 1816}function i8e(){s8e(),o8e(),a8e()}function s8e(){n[2702]=SX(65536)|0}function o8e(){P8e(10856)}function a8e(){l8e(10816)}function l8e(o){o=o|0,c8e(o,5044),u8e(o)|0}function c8e(o,l){o=o|0,l=l|0;var u=0;u=HZ()|0,n[o>>2]=u,C8e(u,l),jh(n[o>>2]|0)}function u8e(o){o=o|0;var l=0;return l=n[o>>2]|0,cd(l,f8e()|0),o|0}function f8e(){var o=0;return s[8032]|0||(XZ(10820),gr(64,10820,U|0)|0,o=8032,n[o>>2]=1,n[o+4>>2]=0),_r(10820)|0||XZ(10820),10820}function XZ(o){o=o|0,h8e(o),ud(o,25)}function A8e(o){o=o|0,p8e(o+24|0)}function p8e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function h8e(o){o=o|0;var l=0;l=en()|0,tn(o,5,18,l,y8e()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function g8e(o,l){o=o|0,l=l|0,d8e(o,l)}function d8e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;u=I,I=I+16|0,A=u,d=u+4|0,ad(d,l),n[A>>2]=ld(d,l)|0,m8e(o,A),I=u}function m8e(o,l){o=o|0,l=l|0,$Z(o+4|0,n[l>>2]|0),s[o+8>>0]=1}function $Z(o,l){o=o|0,l=l|0,n[o>>2]=l}function y8e(){return 1824}function E8e(o){return o=o|0,I8e(o)|0}function I8e(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0;return u=I,I=I+16|0,d=u+4|0,B=u,A=Tl(8)|0,l=A,k=Kt(4)|0,ad(d,o),$Z(k,ld(d,o)|0),m=l+4|0,n[m>>2]=k,o=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],jZ(o,m,d),n[A>>2]=o,I=u,l|0}function Tl(o){o=o|0;var l=0,u=0;return o=o+7&-8,o>>>0<=32768&&(l=n[2701]|0,o>>>0<=(65536-l|0)>>>0)?(u=(n[2702]|0)+l|0,n[2701]=l+o,o=u):(o=SX(o+8|0)|0,n[o>>2]=n[2703],n[2703]=o,o=o+8|0),o|0}function C8e(o,l){o=o|0,l=l|0,n[o>>2]=w8e()|0,n[o+4>>2]=B8e()|0,n[o+12>>2]=l,n[o+8>>2]=v8e()|0,n[o+32>>2]=9}function w8e(){return 11744}function B8e(){return 1832}function v8e(){return Nb()|0}function S8e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(Hh(A,896)|0)==512?u|0&&(D8e(u),It(u)):l|0&&It(l)}function D8e(o){o=o|0,o=n[o+4>>2]|0,o|0&&Gh(o)}function P8e(o){o=o|0,b8e(o,5052),x8e(o)|0,k8e(o,5058,26)|0,Q8e(o,5069,1)|0,R8e(o,5077,10)|0,T8e(o,5087,19)|0,F8e(o,5094,27)|0}function b8e(o,l){o=o|0,l=l|0;var u=0;u=Dje()|0,n[o>>2]=u,Pje(u,l),jh(n[o>>2]|0)}function x8e(o){o=o|0;var l=0;return l=n[o>>2]|0,cd(l,Aje()|0),o|0}function k8e(o,l,u){return o=o|0,l=l|0,u=u|0,JHe(o,Bn(l)|0,u,0),o|0}function Q8e(o,l,u){return o=o|0,l=l|0,u=u|0,THe(o,Bn(l)|0,u,0),o|0}function R8e(o,l,u){return o=o|0,l=l|0,u=u|0,fHe(o,Bn(l)|0,u,0),o|0}function T8e(o,l,u){return o=o|0,l=l|0,u=u|0,z8e(o,Bn(l)|0,u,0),o|0}function eX(o,l){o=o|0,l=l|0;var u=0,A=0;e:for(;;){for(u=n[2703]|0;;){if((u|0)==(l|0))break e;if(A=n[u>>2]|0,n[2703]=A,!u)u=A;else break}It(u)}n[2701]=o}function F8e(o,l,u){return o=o|0,l=l|0,u=u|0,N8e(o,Bn(l)|0,u,0),o|0}function N8e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=$M()|0,o=O8e(u)|0,vn(m,l,d,o,L8e(u,A)|0,A)}function $M(){var o=0,l=0;if(s[8040]|0||(rX(10860),gr(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(_r(10860)|0)){o=10860,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));rX(10860)}return 10860}function O8e(o){return o=o|0,o|0}function L8e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,R=$M()|0,B=R+24|0,l=yr(l,4)|0,n[m>>2]=l,u=R+28|0,A=n[u>>2]|0,A>>>0<(n[R+32>>2]|0)>>>0?(tX(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(M8e(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function tX(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function M8e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=U8e(o)|0,A>>>0>>0)sn(o);else{R=n[o>>2]|0,L=(n[o+8>>2]|0)-R|0,M=L>>2,_8e(d,L>>3>>>0>>1>>>0?M>>>0>>0?B:M:A,(n[m>>2]|0)-R>>3,o+8|0),B=d+8|0,tX(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,H8e(o,d),j8e(d),I=k;return}}function U8e(o){return o=o|0,536870911}function _8e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Kt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function H8e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function j8e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&It(o)}function rX(o){o=o|0,W8e(o)}function G8e(o){o=o|0,q8e(o+24|0)}function q8e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function W8e(o){o=o|0;var l=0;l=en()|0,tn(o,1,11,l,Y8e()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function Y8e(){return 1840}function V8e(o,l,u){o=o|0,l=l|0,u=u|0,K8e(n[(J8e(o)|0)>>2]|0,l,u)}function J8e(o){return o=o|0,(n[($M()|0)+24>>2]|0)+(o<<3)|0}function K8e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;A=I,I=I+16|0,m=A+1|0,d=A,ad(m,l),l=ld(m,l)|0,ad(d,u),u=ld(d,u)|0,sp[o&31](l,u),I=A}function z8e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=eU()|0,o=Z8e(u)|0,vn(m,l,d,o,X8e(u,A)|0,A)}function eU(){var o=0,l=0;if(s[8048]|0||(iX(10896),gr(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(_r(10896)|0)){o=10896,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));iX(10896)}return 10896}function Z8e(o){return o=o|0,o|0}function X8e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,R=eU()|0,B=R+24|0,l=yr(l,4)|0,n[m>>2]=l,u=R+28|0,A=n[u>>2]|0,A>>>0<(n[R+32>>2]|0)>>>0?(nX(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):($8e(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function nX(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function $8e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=eHe(o)|0,A>>>0>>0)sn(o);else{R=n[o>>2]|0,L=(n[o+8>>2]|0)-R|0,M=L>>2,tHe(d,L>>3>>>0>>1>>>0?M>>>0>>0?B:M:A,(n[m>>2]|0)-R>>3,o+8|0),B=d+8|0,nX(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,rHe(o,d),nHe(d),I=k;return}}function eHe(o){return o=o|0,536870911}function tHe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Kt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function rHe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function nHe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&It(o)}function iX(o){o=o|0,oHe(o)}function iHe(o){o=o|0,sHe(o+24|0)}function sHe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function oHe(o){o=o|0;var l=0;l=en()|0,tn(o,1,11,l,aHe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function aHe(){return 1852}function lHe(o,l){return o=o|0,l=l|0,uHe(n[(cHe(o)|0)>>2]|0,l)|0}function cHe(o){return o=o|0,(n[(eU()|0)+24>>2]|0)+(o<<3)|0}function uHe(o,l){o=o|0,l=l|0;var u=0,A=0;return u=I,I=I+16|0,A=u,ad(A,l),l=ld(A,l)|0,l=Tb(gd[o&31](l)|0)|0,I=u,l|0}function fHe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=tU()|0,o=AHe(u)|0,vn(m,l,d,o,pHe(u,A)|0,A)}function tU(){var o=0,l=0;if(s[8056]|0||(oX(10932),gr(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(_r(10932)|0)){o=10932,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));oX(10932)}return 10932}function AHe(o){return o=o|0,o|0}function pHe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,R=tU()|0,B=R+24|0,l=yr(l,4)|0,n[m>>2]=l,u=R+28|0,A=n[u>>2]|0,A>>>0<(n[R+32>>2]|0)>>>0?(sX(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(hHe(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function sX(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function hHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=gHe(o)|0,A>>>0>>0)sn(o);else{R=n[o>>2]|0,L=(n[o+8>>2]|0)-R|0,M=L>>2,dHe(d,L>>3>>>0>>1>>>0?M>>>0>>0?B:M:A,(n[m>>2]|0)-R>>3,o+8|0),B=d+8|0,sX(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,mHe(o,d),yHe(d),I=k;return}}function gHe(o){return o=o|0,536870911}function dHe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Kt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function mHe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function yHe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&It(o)}function oX(o){o=o|0,CHe(o)}function EHe(o){o=o|0,IHe(o+24|0)}function IHe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function CHe(o){o=o|0;var l=0;l=en()|0,tn(o,1,7,l,wHe()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function wHe(){return 1860}function BHe(o,l,u){return o=o|0,l=l|0,u=u|0,SHe(n[(vHe(o)|0)>>2]|0,l,u)|0}function vHe(o){return o=o|0,(n[(tU()|0)+24>>2]|0)+(o<<3)|0}function SHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0;return A=I,I=I+32|0,B=A+12|0,m=A+8|0,k=A,R=A+16|0,d=A+4|0,DHe(R,l),PHe(k,R,l),Mh(d,u),u=Uh(d,u)|0,n[B>>2]=n[k>>2],F2[o&15](m,B,u),u=bHe(m)|0,Df(m),_h(d),I=A,u|0}function DHe(o,l){o=o|0,l=l|0}function PHe(o,l,u){o=o|0,l=l|0,u=u|0,xHe(o,u)}function bHe(o){return o=o|0,Os(o)|0}function xHe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;d=I,I=I+16|0,u=d,A=l,A&1?(kHe(u,0),Me(A|0,u|0)|0,QHe(o,u),RHe(u)):n[o>>2]=n[l>>2],I=d}function kHe(o,l){o=o|0,l=l|0,Su(o,l),n[o+4>>2]=0,s[o+8>>0]=0}function QHe(o,l){o=o|0,l=l|0,n[o>>2]=n[l+4>>2]}function RHe(o){o=o|0,s[o+8>>0]=0}function THe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=rU()|0,o=FHe(u)|0,vn(m,l,d,o,NHe(u,A)|0,A)}function rU(){var o=0,l=0;if(s[8064]|0||(lX(10968),gr(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(_r(10968)|0)){o=10968,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));lX(10968)}return 10968}function FHe(o){return o=o|0,o|0}function NHe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,R=rU()|0,B=R+24|0,l=yr(l,4)|0,n[m>>2]=l,u=R+28|0,A=n[u>>2]|0,A>>>0<(n[R+32>>2]|0)>>>0?(aX(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(OHe(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function aX(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function OHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=LHe(o)|0,A>>>0>>0)sn(o);else{R=n[o>>2]|0,L=(n[o+8>>2]|0)-R|0,M=L>>2,MHe(d,L>>3>>>0>>1>>>0?M>>>0>>0?B:M:A,(n[m>>2]|0)-R>>3,o+8|0),B=d+8|0,aX(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,UHe(o,d),_He(d),I=k;return}}function LHe(o){return o=o|0,536870911}function MHe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Kt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function UHe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function _He(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&It(o)}function lX(o){o=o|0,GHe(o)}function HHe(o){o=o|0,jHe(o+24|0)}function jHe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function GHe(o){o=o|0;var l=0;l=en()|0,tn(o,1,1,l,qHe()|0,5),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function qHe(){return 1872}function WHe(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,VHe(n[(YHe(o)|0)>>2]|0,l,u,A,d,m)}function YHe(o){return o=o|0,(n[(rU()|0)+24>>2]|0)+(o<<3)|0}function VHe(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0;var B=0,k=0,R=0,M=0,L=0,q=0;B=I,I=I+32|0,k=B+16|0,R=B+12|0,M=B+8|0,L=B+4|0,q=B,Mh(k,l),l=Uh(k,l)|0,Mh(R,u),u=Uh(R,u)|0,Mh(M,A),A=Uh(M,A)|0,Mh(L,d),d=Uh(L,d)|0,Mh(q,m),m=Uh(q,m)|0,kX[o&1](l,u,A,d,m),_h(q),_h(L),_h(M),_h(R),_h(k),I=B}function JHe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=nU()|0,o=KHe(u)|0,vn(m,l,d,o,zHe(u,A)|0,A)}function nU(){var o=0,l=0;if(s[8072]|0||(uX(11004),gr(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(_r(11004)|0)){o=11004,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));uX(11004)}return 11004}function KHe(o){return o=o|0,o|0}function zHe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,R=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,R=nU()|0,B=R+24|0,l=yr(l,4)|0,n[m>>2]=l,u=R+28|0,A=n[u>>2]|0,A>>>0<(n[R+32>>2]|0)>>>0?(cX(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(ZHe(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function cX(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function ZHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=XHe(o)|0,A>>>0>>0)sn(o);else{R=n[o>>2]|0,L=(n[o+8>>2]|0)-R|0,M=L>>2,$He(d,L>>3>>>0>>1>>>0?M>>>0>>0?B:M:A,(n[m>>2]|0)-R>>3,o+8|0),B=d+8|0,cX(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,eje(o,d),tje(d),I=k;return}}function XHe(o){return o=o|0,536870911}function $He(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Kt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function eje(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function tje(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&It(o)}function uX(o){o=o|0,ije(o)}function rje(o){o=o|0,nje(o+24|0)}function nje(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function ije(o){o=o|0;var l=0;l=en()|0,tn(o,1,12,l,sje()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function sje(){return 1896}function oje(o,l,u){o=o|0,l=l|0,u=u|0,lje(n[(aje(o)|0)>>2]|0,l,u)}function aje(o){return o=o|0,(n[(nU()|0)+24>>2]|0)+(o<<3)|0}function lje(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;A=I,I=I+16|0,m=A+4|0,d=A,cje(m,l),l=uje(m,l)|0,Mh(d,u),u=Uh(d,u)|0,sp[o&31](l,u),_h(d),I=A}function cje(o,l){o=o|0,l=l|0}function uje(o,l){return o=o|0,l=l|0,fje(l)|0}function fje(o){return o=o|0,o|0}function Aje(){var o=0;return s[8080]|0||(fX(11040),gr(70,11040,U|0)|0,o=8080,n[o>>2]=1,n[o+4>>2]=0),_r(11040)|0||fX(11040),11040}function fX(o){o=o|0,gje(o),ud(o,71)}function pje(o){o=o|0,hje(o+24|0)}function hje(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),It(u))}function gje(o){o=o|0;var l=0;l=en()|0,tn(o,5,7,l,Eje()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function dje(o){o=o|0,mje(o)}function mje(o){o=o|0,yje(o)}function yje(o){o=o|0,s[o+8>>0]=1}function Eje(){return 1936}function Ije(){return Cje()|0}function Cje(){var o=0,l=0,u=0,A=0,d=0,m=0,B=0;return l=I,I=I+16|0,d=l+4|0,B=l,u=Tl(8)|0,o=u,m=o+4|0,n[m>>2]=Kt(1)|0,A=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],wje(A,m,d),n[u>>2]=A,I=l,o|0}function wje(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,u=Kt(16)|0,n[u+4>>2]=0,n[u+8>>2]=0,n[u>>2]=1916,n[u+12>>2]=l,n[o+4>>2]=u}function Bje(o){o=o|0,$y(o),It(o)}function vje(o){o=o|0,o=n[o+12>>2]|0,o|0&&It(o)}function Sje(o){o=o|0,It(o)}function Dje(){var o=0;return s[8088]|0||(Tje(11076),gr(25,11076,U|0)|0,o=8088,n[o>>2]=1,n[o+4>>2]=0),11076}function Pje(o,l){o=o|0,l=l|0,n[o>>2]=bje()|0,n[o+4>>2]=xje()|0,n[o+12>>2]=l,n[o+8>>2]=kje()|0,n[o+32>>2]=10}function bje(){return 11745}function xje(){return 1940}function kje(){return Fb()|0}function Qje(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(Hh(A,896)|0)==512?u|0&&(Rje(u),It(u)):l|0&&It(l)}function Rje(o){o=o|0,o=n[o+4>>2]|0,o|0&&Gh(o)}function Tje(o){o=o|0,Lh(o)}function Pu(o,l){o=o|0,l=l|0,n[o>>2]=l}function iU(o){return o=o|0,n[o>>2]|0}function Fje(o){return o=o|0,s[n[o>>2]>>0]|0}function Nje(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,n[A>>2]=n[o>>2],Oje(l,A)|0,I=u}function Oje(o,l){o=o|0,l=l|0;var u=0;return u=Lje(n[o>>2]|0,l)|0,l=o+4|0,n[(n[l>>2]|0)+8>>2]=u,n[(n[l>>2]|0)+8>>2]|0}function Lje(o,l){o=o|0,l=l|0;var u=0,A=0;return u=I,I=I+16|0,A=u,Fl(A),o=Os(o)|0,l=Mje(o,n[l>>2]|0)|0,Nl(A),I=u,l|0}function Fl(o){o=o|0,n[o>>2]=n[2701],n[o+4>>2]=n[2703]}function Mje(o,l){o=o|0,l=l|0;var u=0;return u=da(Uje()|0)|0,dn(0,u|0,o|0,ZM(l)|0)|0}function Nl(o){o=o|0,eX(n[o>>2]|0,n[o+4>>2]|0)}function Uje(){var o=0;return s[8096]|0||(_je(11120),o=8096,n[o>>2]=1,n[o+4>>2]=0),11120}function _je(o){o=o|0,Qo(o,Hje()|0,1)}function Hje(){return 1948}function jje(){Gje()}function Gje(){var o=0,l=0,u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0,Ye=0,Le=0,Qe=0;if(Le=I,I=I+16|0,L=Le+4|0,q=Le,oa(65536,10804,n[2702]|0,10812),u=NZ()|0,l=n[u>>2]|0,o=n[l>>2]|0,o|0)for(A=n[u+8>>2]|0,u=n[u+4>>2]|0;pf(o|0,c[u>>0]|0|0,s[A>>0]|0),l=l+4|0,o=n[l>>2]|0,o;)A=A+1|0,u=u+1|0;if(o=OZ()|0,l=n[o>>2]|0,l|0)do NA(l|0,n[o+4>>2]|0),o=o+8|0,l=n[o>>2]|0;while(l|0);NA(qje()|0,5167),M=Jy()|0,o=n[M>>2]|0;e:do if(o|0){do Wje(n[o+4>>2]|0),o=n[o>>2]|0;while(o|0);if(o=n[M>>2]|0,o|0){R=M;do{for(;d=o,o=n[o>>2]|0,d=n[d+4>>2]|0,!!(Yje(d)|0);)if(n[q>>2]=R,n[L>>2]=n[q>>2],Vje(M,L)|0,!o)break e;if(Jje(d),R=n[R>>2]|0,l=AX(d)|0,m=Oi()|0,B=I,I=I+((1*(l<<2)|0)+15&-16)|0,k=I,I=I+((1*(l<<2)|0)+15&-16)|0,l=n[(JZ(d)|0)>>2]|0,l|0)for(u=B,A=k;n[u>>2]=n[(Ky(n[l+4>>2]|0)|0)>>2],n[A>>2]=n[l+8>>2],l=n[l>>2]|0,l;)u=u+4|0,A=A+4|0;Qe=Ky(d)|0,l=Kje(d)|0,u=AX(d)|0,A=zje(d)|0,oc(Qe|0,l|0,B|0,k|0,u|0,A|0,WM(d)|0),FA(m|0)}while(o|0)}}while(!1);if(o=n[(YM()|0)>>2]|0,o|0)do Qe=o+4|0,M=VM(Qe)|0,d=k2(M)|0,m=b2(M)|0,B=(x2(M)|0)+1|0,k=Ub(M)|0,R=pX(Qe)|0,M=_r(M)|0,L=Ob(Qe)|0,q=sU(Qe)|0,uu(0,d|0,m|0,B|0,k|0,R|0,M|0,L|0,q|0,oU(Qe)|0),o=n[o>>2]|0;while(o|0);o=n[(Jy()|0)>>2]|0;e:do if(o|0){t:for(;;){if(l=n[o+4>>2]|0,l|0&&(ae=n[(Ky(l)|0)>>2]|0,Ye=n[(KZ(l)|0)>>2]|0,Ye|0)){u=Ye;do{l=u+4|0,A=VM(l)|0;r:do if(A|0)switch(_r(A)|0){case 0:break t;case 4:case 3:case 2:{k=k2(A)|0,R=b2(A)|0,M=(x2(A)|0)+1|0,L=Ub(A)|0,q=_r(A)|0,Qe=Ob(l)|0,uu(ae|0,k|0,R|0,M|0,L|0,0,q|0,Qe|0,sU(l)|0,oU(l)|0);break r}case 1:{B=k2(A)|0,k=b2(A)|0,R=(x2(A)|0)+1|0,M=Ub(A)|0,L=pX(l)|0,q=_r(A)|0,Qe=Ob(l)|0,uu(ae|0,B|0,k|0,R|0,M|0,L|0,q|0,Qe|0,sU(l)|0,oU(l)|0);break r}case 5:{M=k2(A)|0,L=b2(A)|0,q=(x2(A)|0)+1|0,Qe=Ub(A)|0,uu(ae|0,M|0,L|0,q|0,Qe|0,Zje(A)|0,_r(A)|0,0,0,0);break r}default:break r}while(!1);u=n[u>>2]|0}while(u|0)}if(o=n[o>>2]|0,!o)break e}Nt()}while(!1);ve(),I=Le}function qje(){return 11703}function Wje(o){o=o|0,s[o+40>>0]=0}function Yje(o){return o=o|0,(s[o+40>>0]|0)!=0|0}function Vje(o,l){return o=o|0,l=l|0,l=Xje(l)|0,o=n[l>>2]|0,n[l>>2]=n[o>>2],It(o),n[l>>2]|0}function Jje(o){o=o|0,s[o+40>>0]=1}function AX(o){return o=o|0,n[o+20>>2]|0}function Kje(o){return o=o|0,n[o+8>>2]|0}function zje(o){return o=o|0,n[o+32>>2]|0}function Ub(o){return o=o|0,n[o+4>>2]|0}function pX(o){return o=o|0,n[o+4>>2]|0}function sU(o){return o=o|0,n[o+8>>2]|0}function oU(o){return o=o|0,n[o+16>>2]|0}function Zje(o){return o=o|0,n[o+20>>2]|0}function Xje(o){return o=o|0,n[o>>2]|0}function _b(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0,Ye=0,Le=0,Qe=0,tt=0,Xe=0,ct=0,He=0,We=0,Lt=0;Lt=I,I=I+16|0,ae=Lt;do if(o>>>0<245){if(M=o>>>0<11?16:o+11&-8,o=M>>>3,q=n[2783]|0,u=q>>>o,u&3|0)return l=(u&1^1)+o|0,o=11172+(l<<1<<2)|0,u=o+8|0,A=n[u>>2]|0,d=A+8|0,m=n[d>>2]|0,(o|0)==(m|0)?n[2783]=q&~(1<>2]=o,n[u>>2]=m),We=l<<3,n[A+4>>2]=We|3,We=A+We+4|0,n[We>>2]=n[We>>2]|1,We=d,I=Lt,We|0;if(L=n[2785]|0,M>>>0>L>>>0){if(u|0)return l=2<>>12&16,l=l>>>B,u=l>>>5&8,l=l>>>u,d=l>>>2&4,l=l>>>d,o=l>>>1&2,l=l>>>o,A=l>>>1&1,A=(u|B|d|o|A)+(l>>>A)|0,l=11172+(A<<1<<2)|0,o=l+8|0,d=n[o>>2]|0,B=d+8|0,u=n[B>>2]|0,(l|0)==(u|0)?(o=q&~(1<>2]=l,n[o>>2]=u,o=q),m=(A<<3)-M|0,n[d+4>>2]=M|3,A=d+M|0,n[A+4>>2]=m|1,n[A+m>>2]=m,L|0&&(d=n[2788]|0,l=L>>>3,u=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=o|l,l=u,o=u+8|0),n[o>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=u),n[2785]=m,n[2788]=A,We=B,I=Lt,We|0;if(k=n[2784]|0,k){if(u=(k&0-k)+-1|0,B=u>>>12&16,u=u>>>B,m=u>>>5&8,u=u>>>m,R=u>>>2&4,u=u>>>R,A=u>>>1&2,u=u>>>A,o=u>>>1&1,o=n[11436+((m|B|R|A|o)+(u>>>o)<<2)>>2]|0,u=(n[o+4>>2]&-8)-M|0,A=n[o+16+(((n[o+16>>2]|0)==0&1)<<2)>>2]|0,!A)R=o,m=u;else{do B=(n[A+4>>2]&-8)-M|0,R=B>>>0>>0,u=R?B:u,o=R?A:o,A=n[A+16+(((n[A+16>>2]|0)==0&1)<<2)>>2]|0;while(A|0);R=o,m=u}if(B=R+M|0,R>>>0>>0){d=n[R+24>>2]|0,l=n[R+12>>2]|0;do if((l|0)==(R|0)){if(o=R+20|0,l=n[o>>2]|0,!l&&(o=R+16|0,l=n[o>>2]|0,!l)){u=0;break}for(;;){if(u=l+20|0,A=n[u>>2]|0,A|0){l=A,o=u;continue}if(u=l+16|0,A=n[u>>2]|0,A)l=A,o=u;else break}n[o>>2]=0,u=l}else u=n[R+8>>2]|0,n[u+12>>2]=l,n[l+8>>2]=u,u=l;while(!1);do if(d|0){if(l=n[R+28>>2]|0,o=11436+(l<<2)|0,(R|0)==(n[o>>2]|0)){if(n[o>>2]=u,!u){n[2784]=k&~(1<>2]|0)!=(R|0)&1)<<2)>>2]=u,!u)break;n[u+24>>2]=d,l=n[R+16>>2]|0,l|0&&(n[u+16>>2]=l,n[l+24>>2]=u),l=n[R+20>>2]|0,l|0&&(n[u+20>>2]=l,n[l+24>>2]=u)}while(!1);return m>>>0<16?(We=m+M|0,n[R+4>>2]=We|3,We=R+We+4|0,n[We>>2]=n[We>>2]|1):(n[R+4>>2]=M|3,n[B+4>>2]=m|1,n[B+m>>2]=m,L|0&&(A=n[2788]|0,l=L>>>3,u=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=q|l,l=u,o=u+8|0),n[o>>2]=A,n[l+12>>2]=A,n[A+8>>2]=l,n[A+12>>2]=u),n[2785]=m,n[2788]=B),We=R+8|0,I=Lt,We|0}else q=M}else q=M}else q=M}else if(o>>>0<=4294967231)if(o=o+11|0,M=o&-8,R=n[2784]|0,R){A=0-M|0,o=o>>>8,o?M>>>0>16777215?k=31:(q=(o+1048320|0)>>>16&8,He=o<>>16&4,He=He<>>16&2,k=14-(L|q|k)+(He<>>15)|0,k=M>>>(k+7|0)&1|k<<1):k=0,u=n[11436+(k<<2)>>2]|0;e:do if(!u)u=0,o=0,He=57;else for(o=0,B=M<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[u+4>>2]&-8)-M|0,d>>>0>>0)if(d)o=u,A=d;else{o=u,A=0,d=u,He=61;break e}if(d=n[u+20>>2]|0,u=n[u+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(u|0)?m:d,d=(u|0)==0,d){u=m,He=57;break}else B=B<<((d^1)&1)}while(!1);if((He|0)==57){if((u|0)==0&(o|0)==0){if(o=2<>>12&16,q=q>>>B,m=q>>>5&8,q=q>>>m,k=q>>>2&4,q=q>>>k,L=q>>>1&2,q=q>>>L,u=q>>>1&1,o=0,u=n[11436+((m|B|k|L|u)+(q>>>u)<<2)>>2]|0}u?(d=u,He=61):(k=o,B=A)}if((He|0)==61)for(;;)if(He=0,u=(n[d+4>>2]&-8)-M|0,q=u>>>0>>0,u=q?u:A,o=q?d:o,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)A=u,He=61;else{k=o,B=u;break}if(k|0&&B>>>0<((n[2785]|0)-M|0)>>>0){if(m=k+M|0,k>>>0>=m>>>0)return We=0,I=Lt,We|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(o=k+20|0,l=n[o>>2]|0,!l&&(o=k+16|0,l=n[o>>2]|0,!l)){l=0;break}for(;;){if(u=l+20|0,A=n[u>>2]|0,A|0){l=A,o=u;continue}if(u=l+16|0,A=n[u>>2]|0,A)l=A,o=u;else break}n[o>>2]=0}else We=n[k+8>>2]|0,n[We+12>>2]=l,n[l+8>>2]=We;while(!1);do if(d){if(o=n[k+28>>2]|0,u=11436+(o<<2)|0,(k|0)==(n[u>>2]|0)){if(n[u>>2]=l,!l){A=R&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){A=R;break}n[l+24>>2]=d,o=n[k+16>>2]|0,o|0&&(n[l+16>>2]=o,n[o+24>>2]=l),o=n[k+20>>2]|0,o&&(n[l+20>>2]=o,n[o+24>>2]=l),A=R}else A=R;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){u=11172+(l<<1<<2)|0,o=n[2783]|0,l=1<>2]|0):(n[2783]=o|l,l=u,o=u+8|0),n[o>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=u;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(He=(l+1048320|0)>>>16&8,We=l<>>16&4,We=We<>>16&2,l=14-(ct|He|l)+(We<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,u=11436+(l<<2)|0,n[m+28>>2]=l,o=m+16|0,n[o+4>>2]=0,n[o>>2]=0,o=1<>2]=m,n[m+24>>2]=u,n[m+12>>2]=m,n[m+8>>2]=m;break}for(o=B<<((l|0)==31?0:25-(l>>>1)|0),u=n[u>>2]|0;;){if((n[u+4>>2]&-8|0)==(B|0)){He=97;break}if(A=u+16+(o>>>31<<2)|0,l=n[A>>2]|0,l)o=o<<1,u=l;else{He=96;break}}if((He|0)==96){n[A>>2]=m,n[m+24>>2]=u,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((He|0)==97){He=u+8|0,We=n[He>>2]|0,n[We+12>>2]=m,n[He>>2]=m,n[m+8>>2]=We,n[m+12>>2]=u,n[m+24>>2]=0;break}}else We=B+M|0,n[k+4>>2]=We|3,We=k+We+4|0,n[We>>2]=n[We>>2]|1;while(!1);return We=k+8|0,I=Lt,We|0}else q=M}else q=M;else q=-1;while(!1);if(u=n[2785]|0,u>>>0>=q>>>0)return l=u-q|0,o=n[2788]|0,l>>>0>15?(We=o+q|0,n[2788]=We,n[2785]=l,n[We+4>>2]=l|1,n[We+l>>2]=l,n[o+4>>2]=q|3):(n[2785]=0,n[2788]=0,n[o+4>>2]=u|3,We=o+u+4|0,n[We>>2]=n[We>>2]|1),We=o+8|0,I=Lt,We|0;if(B=n[2786]|0,B>>>0>q>>>0)return ct=B-q|0,n[2786]=ct,We=n[2789]|0,He=We+q|0,n[2789]=He,n[He+4>>2]=ct|1,n[We+4>>2]=q|3,We=We+8|0,I=Lt,We|0;if(n[2901]|0?o=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,o=ae&-16^1431655768,n[ae>>2]=o,n[2901]=o,o=4096),k=q+48|0,R=q+47|0,m=o+R|0,d=0-o|0,M=m&d,M>>>0<=q>>>0||(o=n[2893]|0,o|0&&(L=n[2891]|0,ae=L+M|0,ae>>>0<=L>>>0|ae>>>0>o>>>0)))return We=0,I=Lt,We|0;e:do if(n[2894]&4)l=0,He=133;else{u=n[2789]|0;t:do if(u){for(A=11580;o=n[A>>2]|0,!(o>>>0<=u>>>0&&(Qe=A+4|0,(o+(n[Qe>>2]|0)|0)>>>0>u>>>0));)if(o=n[A+8>>2]|0,o)A=o;else{He=118;break t}if(l=m-B&d,l>>>0<2147483647)if(o=qh(l|0)|0,(o|0)==((n[A>>2]|0)+(n[Qe>>2]|0)|0)){if((o|0)!=-1){B=l,m=o,He=135;break e}}else A=o,He=126;else l=0}else He=118;while(!1);do if((He|0)==118)if(u=qh(0)|0,(u|0)!=-1&&(l=u,Ye=n[2902]|0,Le=Ye+-1|0,l=(Le&l|0?(Le+l&0-Ye)-l|0:0)+M|0,Ye=n[2891]|0,Le=l+Ye|0,l>>>0>q>>>0&l>>>0<2147483647)){if(Qe=n[2893]|0,Qe|0&&Le>>>0<=Ye>>>0|Le>>>0>Qe>>>0){l=0;break}if(o=qh(l|0)|0,(o|0)==(u|0)){B=l,m=u,He=135;break e}else A=o,He=126}else l=0;while(!1);do if((He|0)==126){if(u=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(A|0)!=-1)))if((A|0)==-1){l=0;break}else{B=l,m=A,He=135;break e}if(o=n[2903]|0,o=R-l+o&0-o,o>>>0>=2147483647){B=l,m=A,He=135;break e}if((qh(o|0)|0)==-1){qh(u|0)|0,l=0;break}else{B=o+l|0,m=A,He=135;break e}}while(!1);n[2894]=n[2894]|4,He=133}while(!1);if((He|0)==133&&M>>>0<2147483647&&(ct=qh(M|0)|0,Qe=qh(0)|0,tt=Qe-ct|0,Xe=tt>>>0>(q+40|0)>>>0,!((ct|0)==-1|Xe^1|ct>>>0>>0&((ct|0)!=-1&(Qe|0)!=-1)^1))&&(B=Xe?tt:l,m=ct,He=135),(He|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),R=n[2789]|0;do if(R){for(l=11580;;){if(o=n[l>>2]|0,u=l+4|0,A=n[u>>2]|0,(m|0)==(o+A|0)){He=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((He|0)==145&&!(n[l+12>>2]&8|0)&&R>>>0>>0&R>>>0>=o>>>0){n[u>>2]=A+B,We=R+8|0,We=We&7|0?0-We&7:0,He=R+We|0,We=(n[2786]|0)+(B-We)|0,n[2789]=He,n[2786]=We,n[He+4>>2]=We|1,n[He+We+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),u=m+B|0,l=11580;;){if((n[l>>2]|0)==(u|0)){He=153;break}if(o=n[l+8>>2]|0,o)l=o;else break}if((He|0)==153&&!(n[l+12>>2]&8|0)){n[l>>2]=m,L=l+4|0,n[L>>2]=(n[L>>2]|0)+B,L=m+8|0,L=m+(L&7|0?0-L&7:0)|0,l=u+8|0,l=u+(l&7|0?0-l&7:0)|0,M=L+q|0,k=l-L-q|0,n[L+4>>2]=q|3;do if((l|0)!=(R|0)){if((l|0)==(n[2788]|0)){We=(n[2785]|0)+k|0,n[2785]=We,n[2788]=M,n[M+4>>2]=We|1,n[M+We>>2]=We;break}if(o=n[l+4>>2]|0,(o&3|0)==1){B=o&-8,A=o>>>3;e:do if(o>>>0<256)if(o=n[l+8>>2]|0,u=n[l+12>>2]|0,(u|0)==(o|0)){n[2783]=n[2783]&~(1<>2]=u,n[u+8>>2]=o;break}else{m=n[l+24>>2]|0,o=n[l+12>>2]|0;do if((o|0)==(l|0)){if(A=l+16|0,u=A+4|0,o=n[u>>2]|0,!o)if(o=n[A>>2]|0,o)u=A;else{o=0;break}for(;;){if(A=o+20|0,d=n[A>>2]|0,d|0){o=d,u=A;continue}if(A=o+16|0,d=n[A>>2]|0,d)o=d,u=A;else break}n[u>>2]=0}else We=n[l+8>>2]|0,n[We+12>>2]=o,n[o+8>>2]=We;while(!1);if(!m)break;u=n[l+28>>2]|0,A=11436+(u<<2)|0;do if((l|0)!=(n[A>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=o,!o)break e}else{if(n[A>>2]=o,o|0)break;n[2784]=n[2784]&~(1<>2]=m,u=l+16|0,A=n[u>>2]|0,A|0&&(n[o+16>>2]=A,n[A+24>>2]=o),u=n[u+4>>2]|0,!u)break;n[o+20>>2]=u,n[u+24>>2]=o}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){u=11172+(l<<1<<2)|0,o=n[2783]|0,l=1<>2]|0):(n[2783]=o|l,l=u,o=u+8|0),n[o>>2]=M,n[l+12>>2]=M,n[M+8>>2]=l,n[M+12>>2]=u;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}He=(l+1048320|0)>>>16&8,We=l<>>16&4,We=We<>>16&2,l=14-(ct|He|l)+(We<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(!1);if(A=11436+(l<<2)|0,n[M+28>>2]=l,o=M+16|0,n[o+4>>2]=0,n[o>>2]=0,o=n[2784]|0,u=1<>2]=M,n[M+24>>2]=A,n[M+12>>2]=M,n[M+8>>2]=M;break}for(o=d<<((l|0)==31?0:25-(l>>>1)|0),u=n[A>>2]|0;;){if((n[u+4>>2]&-8|0)==(d|0)){He=194;break}if(A=u+16+(o>>>31<<2)|0,l=n[A>>2]|0,l)o=o<<1,u=l;else{He=193;break}}if((He|0)==193){n[A>>2]=M,n[M+24>>2]=u,n[M+12>>2]=M,n[M+8>>2]=M;break}else if((He|0)==194){He=u+8|0,We=n[He>>2]|0,n[We+12>>2]=M,n[He>>2]=M,n[M+8>>2]=We,n[M+12>>2]=u,n[M+24>>2]=0;break}}else We=(n[2786]|0)+k|0,n[2786]=We,n[2789]=M,n[M+4>>2]=We|1;while(!1);return We=L+8|0,I=Lt,We|0}for(l=11580;o=n[l>>2]|0,!(o>>>0<=R>>>0&&(We=o+(n[l+4>>2]|0)|0,We>>>0>R>>>0));)l=n[l+8>>2]|0;d=We+-47|0,o=d+8|0,o=d+(o&7|0?0-o&7:0)|0,d=R+16|0,o=o>>>0>>0?R:o,l=o+8|0,u=m+8|0,u=u&7|0?0-u&7:0,He=m+u|0,u=B+-40-u|0,n[2789]=He,n[2786]=u,n[He+4>>2]=u|1,n[He+u+4>>2]=40,n[2790]=n[2905],u=o+4|0,n[u>>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=o+24|0;do He=l,l=l+4|0,n[l>>2]=7;while((He+8|0)>>>0>>0);if((o|0)!=(R|0)){if(m=o-R|0,n[u>>2]=n[u>>2]&-2,n[R+4>>2]=m|1,n[o>>2]=m,l=m>>>3,m>>>0<256){u=11172+(l<<1<<2)|0,o=n[2783]|0,l=1<>2]|0):(n[2783]=o|l,l=u,o=u+8|0),n[o>>2]=R,n[l+12>>2]=R,n[R+8>>2]=l,n[R+12>>2]=u;break}if(l=m>>>8,l?m>>>0>16777215?u=31:(He=(l+1048320|0)>>>16&8,We=l<>>16&4,We=We<>>16&2,u=14-(ct|He|u)+(We<>>15)|0,u=m>>>(u+7|0)&1|u<<1):u=0,A=11436+(u<<2)|0,n[R+28>>2]=u,n[R+20>>2]=0,n[d>>2]=0,l=n[2784]|0,o=1<>2]=R,n[R+24>>2]=A,n[R+12>>2]=R,n[R+8>>2]=R;break}for(o=m<<((u|0)==31?0:25-(u>>>1)|0),u=n[A>>2]|0;;){if((n[u+4>>2]&-8|0)==(m|0)){He=216;break}if(A=u+16+(o>>>31<<2)|0,l=n[A>>2]|0,l)o=o<<1,u=l;else{He=215;break}}if((He|0)==215){n[A>>2]=R,n[R+24>>2]=u,n[R+12>>2]=R,n[R+8>>2]=R;break}else if((He|0)==216){He=u+8|0,We=n[He>>2]|0,n[We+12>>2]=R,n[He>>2]=R,n[R+8>>2]=We,n[R+12>>2]=u,n[R+24>>2]=0;break}}}else{We=n[2787]|0,(We|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 We=11172+(l<<1<<2)|0,n[We+12>>2]=We,n[We+8>>2]=We,l=l+1|0;while((l|0)!=32);We=m+8|0,We=We&7|0?0-We&7:0,He=m+We|0,We=B+-40-We|0,n[2789]=He,n[2786]=We,n[He+4>>2]=We|1,n[He+We+4>>2]=40,n[2790]=n[2905]}while(!1);if(l=n[2786]|0,l>>>0>q>>>0)return ct=l-q|0,n[2786]=ct,We=n[2789]|0,He=We+q|0,n[2789]=He,n[He+4>>2]=ct|1,n[We+4>>2]=q|3,We=We+8|0,I=Lt,We|0}return n[(Zy()|0)>>2]=12,We=0,I=Lt,We|0}function Hb(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0,R=0;if(o){u=o+-8|0,d=n[2787]|0,o=n[o+-4>>2]|0,l=o&-8,R=u+l|0;do if(o&1)k=u,B=u;else{if(A=n[u>>2]|0,!(o&3)||(B=u+(0-A)|0,m=A+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(o=R+4|0,l=n[o>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[o>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(u=A>>>3,A>>>0<256)if(o=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(o|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=o,k=B,l=m;break}d=n[B+24>>2]|0,o=n[B+12>>2]|0;do if((o|0)==(B|0)){if(u=B+16|0,l=u+4|0,o=n[l>>2]|0,!o)if(o=n[u>>2]|0,o)l=u;else{o=0;break}for(;;){if(u=o+20|0,A=n[u>>2]|0,A|0){o=A,l=u;continue}if(u=o+16|0,A=n[u>>2]|0,A)o=A,l=u;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=o,n[o+8>>2]=k;while(!1);if(d){if(l=n[B+28>>2]|0,u=11436+(l<<2)|0,(B|0)==(n[u>>2]|0)){if(n[u>>2]=o,!o){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=o,!o){k=B,l=m;break}n[o+24>>2]=d,l=B+16|0,u=n[l>>2]|0,u|0&&(n[o+16>>2]=u,n[u+24>>2]=o),l=n[l+4>>2]|0,l?(n[o+20>>2]=l,n[l+24>>2]=o,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(!1);if(!(B>>>0>=R>>>0)&&(o=R+4|0,A=n[o>>2]|0,!!(A&1))){if(A&2)n[o>>2]=A&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(o=n[2788]|0,(R|0)==(n[2789]|0)){if(R=(n[2786]|0)+l|0,n[2786]=R,n[2789]=k,n[k+4>>2]=R|1,(k|0)!=(o|0))return;n[2788]=0,n[2785]=0;return}if((R|0)==(o|0)){R=(n[2785]|0)+l|0,n[2785]=R,n[2788]=B,n[k+4>>2]=R|1,n[B+R>>2]=R;return}d=(A&-8)+l|0,u=A>>>3;do if(A>>>0<256)if(l=n[R+8>>2]|0,o=n[R+12>>2]|0,(o|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=o,n[o+8>>2]=l;break}else{m=n[R+24>>2]|0,o=n[R+12>>2]|0;do if((o|0)==(R|0)){if(u=R+16|0,l=u+4|0,o=n[l>>2]|0,!o)if(o=n[u>>2]|0,o)l=u;else{u=0;break}for(;;){if(u=o+20|0,A=n[u>>2]|0,A|0){o=A,l=u;continue}if(u=o+16|0,A=n[u>>2]|0,A)o=A,l=u;else break}n[l>>2]=0,u=o}else u=n[R+8>>2]|0,n[u+12>>2]=o,n[o+8>>2]=u,u=o;while(!1);if(m|0){if(o=n[R+28>>2]|0,l=11436+(o<<2)|0,(R|0)==(n[l>>2]|0)){if(n[l>>2]=u,!u){n[2784]=n[2784]&~(1<>2]|0)!=(R|0)&1)<<2)>>2]=u,!u)break;n[u+24>>2]=m,o=R+16|0,l=n[o>>2]|0,l|0&&(n[u+16>>2]=l,n[l+24>>2]=u),o=n[o+4>>2]|0,o|0&&(n[u+20>>2]=o,n[o+24>>2]=u)}}while(!1);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(o=d>>>3,d>>>0<256){u=11172+(o<<1<<2)|0,l=n[2783]|0,o=1<>2]|0):(n[2783]=l|o,o=u,l=u+8|0),n[l>>2]=k,n[o+12>>2]=k,n[k+8>>2]=o,n[k+12>>2]=u;return}o=d>>>8,o?d>>>0>16777215?o=31:(B=(o+1048320|0)>>>16&8,R=o<>>16&4,R=R<>>16&2,o=14-(m|B|o)+(R<>>15)|0,o=d>>>(o+7|0)&1|o<<1):o=0,A=11436+(o<<2)|0,n[k+28>>2]=o,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,u=1<>>1)|0),u=n[A>>2]|0;;){if((n[u+4>>2]&-8|0)==(d|0)){o=73;break}if(A=u+16+(l>>>31<<2)|0,o=n[A>>2]|0,o)l=l<<1,u=o;else{o=72;break}}if((o|0)==72){n[A>>2]=k,n[k+24>>2]=u,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((o|0)==73){B=u+8|0,R=n[B>>2]|0,n[R+12>>2]=k,n[B>>2]=k,n[k+8>>2]=R,n[k+12>>2]=u,n[k+24>>2]=0;break}}else n[2784]=l|u,n[A>>2]=k,n[k+24>>2]=A,n[k+12>>2]=k,n[k+8>>2]=k;while(!1);if(R=(n[2791]|0)+-1|0,n[2791]=R,!R)o=11588;else return;for(;o=n[o>>2]|0,o;)o=o+8|0;n[2791]=-1}}}function $je(){return 11628}function e6e(o){o=o|0;var l=0,u=0;return l=I,I=I+16|0,u=l,n[u>>2]=n6e(n[o+60>>2]|0)|0,o=jb(Au(6,u|0)|0)|0,I=l,o|0}function hX(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0,Ye=0;q=I,I=I+48|0,M=q+16|0,m=q,d=q+32|0,k=o+28|0,A=n[k>>2]|0,n[d>>2]=A,R=o+20|0,A=(n[R>>2]|0)-A|0,n[d+4>>2]=A,n[d+8>>2]=l,n[d+12>>2]=u,A=A+u|0,B=o+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=jb(La(146,m|0)|0)|0;e:do if((A|0)!=(m|0)){for(l=2;!((m|0)<0);)if(A=A-m|0,Ye=n[d+4>>2]|0,ae=m>>>0>Ye>>>0,d=ae?d+8|0:d,l=(ae<<31>>31)+l|0,Ye=m-(ae?Ye:0)|0,n[d>>2]=(n[d>>2]|0)+Ye,ae=d+4|0,n[ae>>2]=(n[ae>>2]|0)-Ye,n[M>>2]=n[B>>2],n[M+4>>2]=d,n[M+8>>2]=l,m=jb(La(146,M|0)|0)|0,(A|0)==(m|0)){L=3;break e}n[o+16>>2]=0,n[k>>2]=0,n[R>>2]=0,n[o>>2]=n[o>>2]|32,(l|0)==2?u=0:u=u-(n[d+4>>2]|0)|0}else L=3;while(!1);return(L|0)==3&&(Ye=n[o+44>>2]|0,n[o+16>>2]=Ye+(n[o+48>>2]|0),n[k>>2]=Ye,n[R>>2]=Ye),I=q,u|0}function t6e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;return d=I,I=I+32|0,m=d,A=d+20|0,n[m>>2]=n[o+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=A,n[m+16>>2]=u,(jb(Oa(140,m|0)|0)|0)<0?(n[A>>2]=-1,o=-1):o=n[A>>2]|0,I=d,o|0}function jb(o){return o=o|0,o>>>0>4294963200&&(n[(Zy()|0)>>2]=0-o,o=-1),o|0}function Zy(){return(r6e()|0)+64|0}function r6e(){return aU()|0}function aU(){return 2084}function n6e(o){return o=o|0,o|0}function i6e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;return d=I,I=I+32|0,A=d,n[o+36>>2]=1,!(n[o>>2]&64|0)&&(n[A>>2]=n[o+60>>2],n[A+4>>2]=21523,n[A+8>>2]=d+16,no(54,A|0)|0)&&(s[o+75>>0]=-1),A=hX(o,l,u)|0,I=d,A|0}function gX(o,l){o=o|0,l=l|0;var u=0,A=0;if(u=s[o>>0]|0,A=s[l>>0]|0,!(u<<24>>24)||u<<24>>24!=A<<24>>24)o=A;else{do o=o+1|0,l=l+1|0,u=s[o>>0]|0,A=s[l>>0]|0;while(!(!(u<<24>>24)||u<<24>>24!=A<<24>>24));o=A}return(u&255)-(o&255)|0}function s6e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;e:do if(!u)o=0;else{for(;A=s[o>>0]|0,d=s[l>>0]|0,A<<24>>24==d<<24>>24;)if(u=u+-1|0,u)o=o+1|0,l=l+1|0;else{o=0;break e}o=(A&255)-(d&255)|0}while(!1);return o|0}function dX(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0,Ye=0,Le=0,Qe=0;Qe=I,I=I+224|0,L=Qe+120|0,q=Qe+80|0,Ye=Qe,Le=Qe+136|0,A=q,d=A+40|0;do n[A>>2]=0,A=A+4|0;while((A|0)<(d|0));return n[L>>2]=n[u>>2],(lU(0,l,L,Ye,q)|0)<0?u=-1:((n[o+76>>2]|0)>-1?ae=o6e(o)|0:ae=0,u=n[o>>2]|0,M=u&32,(s[o+74>>0]|0)<1&&(n[o>>2]=u&-33),A=o+48|0,n[A>>2]|0?u=lU(o,l,L,Ye,q)|0:(d=o+44|0,m=n[d>>2]|0,n[d>>2]=Le,B=o+28|0,n[B>>2]=Le,k=o+20|0,n[k>>2]=Le,n[A>>2]=80,R=o+16|0,n[R>>2]=Le+80,u=lU(o,l,L,Ye,q)|0,m&&(Yb[n[o+36>>2]&7](o,0,0)|0,u=n[k>>2]|0?u:-1,n[d>>2]=m,n[A>>2]=0,n[R>>2]=0,n[B>>2]=0,n[k>>2]=0)),A=n[o>>2]|0,n[o>>2]=A|M,ae|0&&a6e(o),u=A&32|0?-1:u),I=Qe,u|0}function lU(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0,Ye=0,Le=0,Qe=0,tt=0,Xe=0,ct=0,He=0,We=0,Lt=0,Gr=0,fr=0,$t=0,Rr=0,Hr=0,cr=0;cr=I,I=I+64|0,fr=cr+16|0,$t=cr,Lt=cr+24|0,Rr=cr+8|0,Hr=cr+20|0,n[fr>>2]=l,ct=(o|0)!=0,He=Lt+40|0,We=He,Lt=Lt+39|0,Gr=Rr+4|0,B=0,m=0,L=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(Zy()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(!1);if(B=s[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:}tt=k+1|0,n[fr>>2]=tt,B=s[tt>>0]|0,k=tt}t:do if((Xe|0)==9)for(;;){if(Xe=0,(s[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[fr>>2]=k,(s[k>>0]|0)==37)Xe=9;else break}while(!1);if(B=B-l|0,ct&&vs(o,l,B),B|0){l=k;continue}R=k+1|0,B=(s[R>>0]|0)+-48|0,B>>>0<10?(tt=(s[k+2>>0]|0)==36,Qe=tt?B:-1,L=tt?1:L,R=tt?k+3|0:R):Qe=-1,n[fr>>2]=R,B=s[R>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(M=0,q=B;;){if(B=1<>2]=R,B=s[R>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;q=B}else M=0;while(!1);if(B<<24>>24==42){if(k=R+1|0,B=(s[k>>0]|0)+-48|0,B>>>0<10&&(s[R+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[A+((s[k>>0]|0)+-48<<3)>>2]|0,L=1,R=R+3|0;else{if(L|0){m=-1;break}ct?(L=(n[u>>2]|0)+3&-4,B=n[L>>2]|0,n[u>>2]=L+4,L=0,R=k):(B=0,L=0,R=k)}n[fr>>2]=R,tt=(B|0)<0,B=tt?0-B|0:B,M=tt?M|8192:M}else{if(B=mX(fr)|0,(B|0)<0){m=-1;break}R=n[fr>>2]|0}do if((s[R>>0]|0)==46){if((s[R+1>>0]|0)!=42){n[fr>>2]=R+1,k=mX(fr)|0,R=n[fr>>2]|0;break}if(q=R+2|0,k=(s[q>>0]|0)+-48|0,k>>>0<10&&(s[R+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[A+((s[q>>0]|0)+-48<<3)>>2]|0,R=R+4|0,n[fr>>2]=R;break}if(L|0){m=-1;break e}ct?(tt=(n[u>>2]|0)+3&-4,k=n[tt>>2]|0,n[u>>2]=tt+4):k=0,n[fr>>2]=q,R=q}else k=-1;while(!1);for(Le=0;;){if(((s[R>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(tt=R+1|0,n[fr>>2]=tt,q=s[(s[R>>0]|0)+-65+(5178+(Le*58|0))>>0]|0,ae=q&255,(ae+-1|0)>>>0<8)Le=ae,R=tt;else break}if(!(q<<24>>24)){m=-1;break}Ye=(Qe|0)>-1;do if(q<<24>>24==19)if(Ye){m=-1;break e}else Xe=49;else{if(Ye){n[d+(Qe<<2)>>2]=ae,Ye=A+(Qe<<3)|0,Qe=n[Ye+4>>2]|0,Xe=$t,n[Xe>>2]=n[Ye>>2],n[Xe+4>>2]=Qe,Xe=49;break}if(!ct){m=0;break e}yX($t,ae,u)}while(!1);if((Xe|0)==49&&(Xe=0,!ct)){B=0,l=tt;continue}R=s[R>>0]|0,R=(Le|0)!=0&(R&15|0)==3?R&-33:R,Ye=M&-65537,Qe=M&8192|0?Ye:M;t:do switch(R|0){case 110:switch((Le&255)<<24>>24){case 0:{n[n[$t>>2]>>2]=m,B=0,l=tt;continue e}case 1:{n[n[$t>>2]>>2]=m,B=0,l=tt;continue e}case 2:{B=n[$t>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=tt;continue e}case 3:{a[n[$t>>2]>>1]=m,B=0,l=tt;continue e}case 4:{s[n[$t>>2]>>0]=m,B=0,l=tt;continue e}case 6:{n[n[$t>>2]>>2]=m,B=0,l=tt;continue e}case 7:{B=n[$t>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=tt;continue e}default:{B=0,l=tt;continue e}}case 112:{R=120,k=k>>>0>8?k:8,l=Qe|8,Xe=61;break}case 88:case 120:{l=Qe,Xe=61;break}case 111:{R=$t,l=n[R>>2]|0,R=n[R+4>>2]|0,ae=c6e(l,R,He)|0,Ye=We-ae|0,M=0,q=5642,k=(Qe&8|0)==0|(k|0)>(Ye|0)?k:Ye+1|0,Ye=Qe,Xe=67;break}case 105:case 100:if(R=$t,l=n[R>>2]|0,R=n[R+4>>2]|0,(R|0)<0){l=Gb(0,0,l|0,R|0)|0,R=ye,M=$t,n[M>>2]=l,n[M+4>>2]=R,M=1,q=5642,Xe=66;break t}else{M=(Qe&2049|0)!=0&1,q=Qe&2048|0?5643:Qe&1|0?5644:5642,Xe=66;break t}case 117:{R=$t,M=0,q=5642,l=n[R>>2]|0,R=n[R+4>>2]|0,Xe=66;break}case 99:{s[Lt>>0]=n[$t>>2],l=Lt,M=0,q=5642,ae=He,R=1,k=Ye;break}case 109:{R=u6e(n[(Zy()|0)>>2]|0)|0,Xe=71;break}case 115:{R=n[$t>>2]|0,R=R|0?R:5652,Xe=71;break}case 67:{n[Rr>>2]=n[$t>>2],n[Gr>>2]=0,n[$t>>2]=Rr,ae=-1,R=Rr,Xe=75;break}case 83:{l=n[$t>>2]|0,k?(ae=k,R=l,Xe=75):(Ls(o,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=A6e(o,+E[$t>>3],B,k,Qe,R)|0,l=tt;continue e}default:M=0,q=5642,ae=He,R=k,k=Qe}while(!1);t:do if((Xe|0)==61)Qe=$t,Le=n[Qe>>2]|0,Qe=n[Qe+4>>2]|0,ae=l6e(Le,Qe,He,R&32)|0,q=(l&8|0)==0|(Le|0)==0&(Qe|0)==0,M=q?0:2,q=q?5642:5642+(R>>4)|0,Ye=l,l=Le,R=Qe,Xe=67;else if((Xe|0)==66)ae=Xy(l,R,He)|0,Ye=Qe,Xe=67;else if((Xe|0)==71)Xe=0,Qe=f6e(R,0,k)|0,Le=(Qe|0)==0,l=R,M=0,q=5642,ae=Le?R+k|0:Qe,R=Le?k:Qe-R|0,k=Ye;else if((Xe|0)==75){for(Xe=0,q=R,l=0,k=0;M=n[q>>2]|0,!(!M||(k=EX(Hr,M)|0,(k|0)<0|k>>>0>(ae-l|0)>>>0));)if(l=k+l|0,ae>>>0>l>>>0)q=q+4|0;else break;if((k|0)<0){m=-1;break e}if(Ls(o,32,B,l,Qe),!l)l=0,Xe=84;else for(M=0;;){if(k=n[R>>2]|0,!k){Xe=84;break t}if(k=EX(Hr,k)|0,M=k+M|0,(M|0)>(l|0)){Xe=84;break t}if(vs(o,Hr,k),M>>>0>=l>>>0){Xe=84;break}else R=R+4|0}}while(!1);if((Xe|0)==67)Xe=0,R=(l|0)!=0|(R|0)!=0,Qe=(k|0)!=0|R,R=((R^1)&1)+(We-ae)|0,l=Qe?ae:He,ae=He,R=Qe?(k|0)>(R|0)?k:R:k,k=(k|0)>-1?Ye&-65537:Ye;else if((Xe|0)==84){Xe=0,Ls(o,32,B,l,Qe^8192),B=(B|0)>(l|0)?B:l,l=tt;continue}Le=ae-l|0,Ye=(R|0)<(Le|0)?Le:R,Qe=Ye+M|0,B=(B|0)<(Qe|0)?Qe:B,Ls(o,32,B,Qe,k),vs(o,q,M),Ls(o,48,B,Qe,k^65536),Ls(o,48,Ye,Le,0),vs(o,l,Le),Ls(o,32,B,Qe,k^8192),l=tt}e:do if((Xe|0)==87&&!o)if(!L)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(yX(A+(m<<3)|0,l,u),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 I=cr,m|0}function o6e(o){return o=o|0,0}function a6e(o){o=o|0}function vs(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]&32||C6e(l,u,o)|0}function mX(o){o=o|0;var l=0,u=0,A=0;if(u=n[o>>2]|0,A=(s[u>>0]|0)+-48|0,A>>>0<10){l=0;do l=A+(l*10|0)|0,u=u+1|0,n[o>>2]=u,A=(s[u>>0]|0)+-48|0;while(A>>>0<10)}else l=0;return l|0}function yX(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{A=(n[u>>2]|0)+3&-4,l=n[A>>2]|0,n[u>>2]=A+4,n[o>>2]=l;break e}case 10:{A=(n[u>>2]|0)+3&-4,l=n[A>>2]|0,n[u>>2]=A+4,A=o,n[A>>2]=l,n[A+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{A=(n[u>>2]|0)+3&-4,l=n[A>>2]|0,n[u>>2]=A+4,A=o,n[A>>2]=l,n[A+4>>2]=0;break e}case 12:{A=(n[u>>2]|0)+7&-8,l=A,d=n[l>>2]|0,l=n[l+4>>2]|0,n[u>>2]=A+8,A=o,n[A>>2]=d,n[A+4>>2]=l;break e}case 13:{d=(n[u>>2]|0)+3&-4,A=n[d>>2]|0,n[u>>2]=d+4,A=(A&65535)<<16>>16,d=o,n[d>>2]=A,n[d+4>>2]=((A|0)<0)<<31>>31;break e}case 14:{d=(n[u>>2]|0)+3&-4,A=n[d>>2]|0,n[u>>2]=d+4,d=o,n[d>>2]=A&65535,n[d+4>>2]=0;break e}case 15:{d=(n[u>>2]|0)+3&-4,A=n[d>>2]|0,n[u>>2]=d+4,A=(A&255)<<24>>24,d=o,n[d>>2]=A,n[d+4>>2]=((A|0)<0)<<31>>31;break e}case 16:{d=(n[u>>2]|0)+3&-4,A=n[d>>2]|0,n[u>>2]=d+4,d=o,n[d>>2]=A&255,n[d+4>>2]=0;break e}case 17:{d=(n[u>>2]|0)+7&-8,m=+E[d>>3],n[u>>2]=d+8,E[o>>3]=m;break e}case 18:{d=(n[u>>2]|0)+7&-8,m=+E[d>>3],n[u>>2]=d+8,E[o>>3]=m;break e}default:break e}while(!1);while(!1)}function l6e(o,l,u,A){if(o=o|0,l=l|0,u=u|0,A=A|0,!((o|0)==0&(l|0)==0))do u=u+-1|0,s[u>>0]=c[5694+(o&15)>>0]|0|A,o=qb(o|0,l|0,4)|0,l=ye;while(!((o|0)==0&(l|0)==0));return u|0}function c6e(o,l,u){if(o=o|0,l=l|0,u=u|0,!((o|0)==0&(l|0)==0))do u=u+-1|0,s[u>>0]=o&7|48,o=qb(o|0,l|0,3)|0,l=ye;while(!((o|0)==0&(l|0)==0));return u|0}function Xy(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;if(l>>>0>0|(l|0)==0&o>>>0>4294967295){for(;A=AU(o|0,l|0,10,0)|0,u=u+-1|0,s[u>>0]=A&255|48,A=o,o=fU(o|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&A>>>0>4294967295;)l=ye;l=o}else l=o;if(l)for(;u=u+-1|0,s[u>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return u|0}function u6e(o){return o=o|0,m6e(o,n[(d6e()|0)+188>>2]|0)|0}function f6e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;m=l&255,A=(u|0)!=0;e:do if(A&(o&3|0)!=0)for(d=l&255;;){if((s[o>>0]|0)==d<<24>>24){B=6;break e}if(o=o+1|0,u=u+-1|0,A=(u|0)!=0,!(A&(o&3|0)!=0)){B=5;break}}else B=5;while(!1);(B|0)==5&&(A?B=6:u=0);e:do if((B|0)==6&&(d=l&255,(s[o>>0]|0)!=d<<24>>24)){A=Ue(m,16843009)|0;t:do if(u>>>0>3){for(;m=n[o>>2]^A,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(o=o+4|0,u=u+-4|0,u>>>0<=3){B=11;break t}}else B=11;while(!1);if((B|0)==11&&!u){u=0;break}for(;;){if((s[o>>0]|0)==d<<24>>24)break e;if(o=o+1|0,u=u+-1|0,!u){u=0;break}}}while(!1);return(u|0?o:0)|0}function Ls(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0;if(B=I,I=I+256|0,m=B,(u|0)>(A|0)&(d&73728|0)==0){if(d=u-A|0,eE(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=u-A|0;do vs(o,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}vs(o,m,d)}I=B}function EX(o,l){return o=o|0,l=l|0,o?o=h6e(o,l,0)|0:o=0,o|0}function A6e(o,l,u,A,d,m){o=o|0,l=+l,u=u|0,A=A|0,d=d|0,m=m|0;var B=0,k=0,R=0,M=0,L=0,q=0,ae=0,Ye=0,Le=0,Qe=0,tt=0,Xe=0,ct=0,He=0,We=0,Lt=0,Gr=0,fr=0,$t=0,Rr=0,Hr=0,cr=0,Hn=0;Hn=I,I=I+560|0,R=Hn+8|0,tt=Hn,cr=Hn+524|0,Hr=cr,M=Hn+512|0,n[tt>>2]=0,Rr=M+12|0,IX(l)|0,(ye|0)<0?(l=-l,fr=1,Gr=5659):(fr=(d&2049|0)!=0&1,Gr=d&2048|0?5662:d&1|0?5665:5660),IX(l)|0,$t=ye&2146435072;do if($t>>>0<2146435072|($t|0)==2146435072&!1){if(Ye=+p6e(l,tt)*2,B=Ye!=0,B&&(n[tt>>2]=(n[tt>>2]|0)+-1),ct=m|32,(ct|0)==97){Le=m&32,ae=Le|0?Gr+9|0:Gr,q=fr|2,B=12-A|0;do if(A>>>0>11|(B|0)==0)l=Ye;else{l=8;do B=B+-1|0,l=l*16;while(B|0);if((s[ae>>0]|0)==45){l=-(l+(-Ye-l));break}else{l=Ye+l-l;break}}while(!1);k=n[tt>>2]|0,B=(k|0)<0?0-k|0:k,B=Xy(B,((B|0)<0)<<31>>31,Rr)|0,(B|0)==(Rr|0)&&(B=M+11|0,s[B>>0]=48),s[B+-1>>0]=(k>>31&2)+43,L=B+-2|0,s[L>>0]=m+15,M=(A|0)<1,R=(d&8|0)==0,B=cr;do $t=~~l,k=B+1|0,s[B>>0]=c[5694+$t>>0]|Le,l=(l-+($t|0))*16,(k-Hr|0)==1&&!(R&(M&l==0))?(s[k>>0]=46,B=B+2|0):B=k;while(l!=0);$t=B-Hr|0,Hr=Rr-L|0,Rr=(A|0)!=0&($t+-2|0)<(A|0)?A+2|0:$t,B=Hr+q+Rr|0,Ls(o,32,u,B,d),vs(o,ae,q),Ls(o,48,u,B,d^65536),vs(o,cr,$t),Ls(o,48,Rr-$t|0,0,0),vs(o,L,Hr),Ls(o,32,u,B,d^8192);break}k=(A|0)<0?6:A,B?(B=(n[tt>>2]|0)+-28|0,n[tt>>2]=B,l=Ye*268435456):(l=Ye,B=n[tt>>2]|0),$t=(B|0)<0?R:R+288|0,R=$t;do We=~~l>>>0,n[R>>2]=We,R=R+4|0,l=(l-+(We>>>0))*1e9;while(l!=0);if((B|0)>0)for(M=$t,q=R;;){if(L=(B|0)<29?B:29,B=q+-4|0,B>>>0>=M>>>0){R=0;do He=DX(n[B>>2]|0,0,L|0)|0,He=uU(He|0,ye|0,R|0,0)|0,We=ye,Xe=AU(He|0,We|0,1e9,0)|0,n[B>>2]=Xe,R=fU(He|0,We|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=M>>>0);R&&(M=M+-4|0,n[M>>2]=R)}for(R=q;!(R>>>0<=M>>>0);)if(B=R+-4|0,!(n[B>>2]|0))R=B;else break;if(B=(n[tt>>2]|0)-L|0,n[tt>>2]=B,(B|0)>0)q=R;else break}else M=$t;if((B|0)<0){A=((k+25|0)/9|0)+1|0,Qe=(ct|0)==102;do{if(Le=0-B|0,Le=(Le|0)<9?Le:9,M>>>0>>0){L=(1<>>Le,ae=0,B=M;do We=n[B>>2]|0,n[B>>2]=(We>>>Le)+ae,ae=Ue(We&L,q)|0,B=B+4|0;while(B>>>0>>0);B=n[M>>2]|0?M:M+4|0,ae?(n[R>>2]=ae,M=B,B=R+4|0):(M=B,B=R)}else M=n[M>>2]|0?M:M+4|0,B=R;R=Qe?$t:M,R=(B-R>>2|0)>(A|0)?R+(A<<2)|0:B,B=(n[tt>>2]|0)+Le|0,n[tt>>2]=B}while((B|0)<0);B=M,A=R}else B=M,A=R;if(We=$t,B>>>0>>0){if(R=(We-B>>2)*9|0,L=n[B>>2]|0,L>>>0>=10){M=10;do M=M*10|0,R=R+1|0;while(L>>>0>=M>>>0)}}else R=0;if(Qe=(ct|0)==103,Xe=(k|0)!=0,M=k-((ct|0)!=102?R:0)+((Xe&Qe)<<31>>31)|0,(M|0)<(((A-We>>2)*9|0)+-9|0)){if(M=M+9216|0,Le=$t+4+(((M|0)/9|0)+-1024<<2)|0,M=((M|0)%9|0)+1|0,(M|0)<9){L=10;do L=L*10|0,M=M+1|0;while((M|0)!=9)}else L=10;if(q=n[Le>>2]|0,ae=(q>>>0)%(L>>>0)|0,M=(Le+4|0)==(A|0),M&(ae|0)==0)M=Le;else if(Ye=((q>>>0)/(L>>>0)|0)&1|0?9007199254740994:9007199254740992,He=(L|0)/2|0,l=ae>>>0>>0?.5:M&(ae|0)==(He|0)?1:1.5,fr&&(He=(s[Gr>>0]|0)==45,l=He?-l:l,Ye=He?-Ye:Ye),M=q-ae|0,n[Le>>2]=M,Ye+l!=Ye){if(He=M+L|0,n[Le>>2]=He,He>>>0>999999999)for(R=Le;M=R+-4|0,n[R>>2]=0,M>>>0>>0&&(B=B+-4|0,n[B>>2]=0),He=(n[M>>2]|0)+1|0,n[M>>2]=He,He>>>0>999999999;)R=M;else M=Le;if(R=(We-B>>2)*9|0,q=n[B>>2]|0,q>>>0>=10){L=10;do L=L*10|0,R=R+1|0;while(q>>>0>=L>>>0)}}else M=Le;M=M+4|0,M=A>>>0>M>>>0?M:A,He=B}else M=A,He=B;for(ct=M;;){if(ct>>>0<=He>>>0){tt=0;break}if(B=ct+-4|0,!(n[B>>2]|0))ct=B;else{tt=1;break}}A=0-R|0;do if(Qe)if(B=((Xe^1)&1)+k|0,(B|0)>(R|0)&(R|0)>-5?(L=m+-1|0,k=B+-1-R|0):(L=m+-2|0,k=B+-1|0),B=d&8,B)Le=B;else{if(tt&&(Lt=n[ct+-4>>2]|0,(Lt|0)!=0))if((Lt>>>0)%10|0)M=0;else{M=0,B=10;do B=B*10|0,M=M+1|0;while(!((Lt>>>0)%(B>>>0)|0|0))}else M=9;if(B=((ct-We>>2)*9|0)+-9|0,(L|32|0)==102){Le=B-M|0,Le=(Le|0)>0?Le:0,k=(k|0)<(Le|0)?k:Le,Le=0;break}else{Le=B+R-M|0,Le=(Le|0)>0?Le:0,k=(k|0)<(Le|0)?k:Le,Le=0;break}}else L=m,Le=d&8;while(!1);if(Qe=k|Le,q=(Qe|0)!=0&1,ae=(L|32|0)==102,ae)Xe=0,B=(R|0)>0?R:0;else{if(B=(R|0)<0?A:R,B=Xy(B,((B|0)<0)<<31>>31,Rr)|0,M=Rr,(M-B|0)<2)do B=B+-1|0,s[B>>0]=48;while((M-B|0)<2);s[B+-1>>0]=(R>>31&2)+43,B=B+-2|0,s[B>>0]=L,Xe=B,B=M-B|0}if(B=fr+1+k+q+B|0,Ls(o,32,u,B,d),vs(o,Gr,fr),Ls(o,48,u,B,d^65536),ae){L=He>>>0>$t>>>0?$t:He,Le=cr+9|0,q=Le,ae=cr+8|0,M=L;do{if(R=Xy(n[M>>2]|0,0,Le)|0,(M|0)==(L|0))(R|0)==(Le|0)&&(s[ae>>0]=48,R=ae);else if(R>>>0>cr>>>0){eE(cr|0,48,R-Hr|0)|0;do R=R+-1|0;while(R>>>0>cr>>>0)}vs(o,R,q-R|0),M=M+4|0}while(M>>>0<=$t>>>0);if(Qe|0&&vs(o,5710,1),M>>>0>>0&(k|0)>0)for(;;){if(R=Xy(n[M>>2]|0,0,Le)|0,R>>>0>cr>>>0){eE(cr|0,48,R-Hr|0)|0;do R=R+-1|0;while(R>>>0>cr>>>0)}if(vs(o,R,(k|0)<9?k:9),M=M+4|0,R=k+-9|0,M>>>0>>0&(k|0)>9)k=R;else{k=R;break}}Ls(o,48,k+9|0,9,0)}else{if(Qe=tt?ct:He+4|0,(k|0)>-1){tt=cr+9|0,Le=(Le|0)==0,A=tt,q=0-Hr|0,ae=cr+8|0,L=He;do{R=Xy(n[L>>2]|0,0,tt)|0,(R|0)==(tt|0)&&(s[ae>>0]=48,R=ae);do if((L|0)==(He|0)){if(M=R+1|0,vs(o,R,1),Le&(k|0)<1){R=M;break}vs(o,5710,1),R=M}else{if(R>>>0<=cr>>>0)break;eE(cr|0,48,R+q|0)|0;do R=R+-1|0;while(R>>>0>cr>>>0)}while(!1);Hr=A-R|0,vs(o,R,(k|0)>(Hr|0)?Hr:k),k=k-Hr|0,L=L+4|0}while(L>>>0>>0&(k|0)>-1)}Ls(o,48,k+18|0,18,0),vs(o,Xe,Rr-Xe|0)}Ls(o,32,u,B,d^8192)}else cr=(m&32|0)!=0,B=fr+3|0,Ls(o,32,u,B,d&-65537),vs(o,Gr,fr),vs(o,l!=l|!1?cr?5686:5690:cr?5678:5682,3),Ls(o,32,u,B,d^8192);while(!1);return I=Hn,((B|0)<(u|0)?u:B)|0}function IX(o){o=+o;var l=0;return E[S>>3]=o,l=n[S>>2]|0,ye=n[S+4>>2]|0,l|0}function p6e(o,l){return o=+o,l=l|0,+ +CX(o,l)}function CX(o,l){o=+o,l=l|0;var u=0,A=0,d=0;switch(E[S>>3]=o,u=n[S>>2]|0,A=n[S+4>>2]|0,d=qb(u|0,A|0,52)|0,d&2047){case 0:{o!=0?(o=+CX(o*18446744073709552e3,l),u=(n[l>>2]|0)+-64|0):u=0,n[l>>2]=u;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[S>>2]=u,n[S+4>>2]=A&-2146435073|1071644672,o=+E[S>>3]}return+o}function h6e(o,l,u){o=o|0,l=l|0,u=u|0;do if(o){if(l>>>0<128){s[o>>0]=l,o=1;break}if(!(n[n[(g6e()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){s[o>>0]=l,o=1;break}else{n[(Zy()|0)>>2]=84,o=-1;break}if(l>>>0<2048){s[o>>0]=l>>>6|192,s[o+1>>0]=l&63|128,o=2;break}if(l>>>0<55296|(l&-8192|0)==57344){s[o>>0]=l>>>12|224,s[o+1>>0]=l>>>6&63|128,s[o+2>>0]=l&63|128,o=3;break}if((l+-65536|0)>>>0<1048576){s[o>>0]=l>>>18|240,s[o+1>>0]=l>>>12&63|128,s[o+2>>0]=l>>>6&63|128,s[o+3>>0]=l&63|128,o=4;break}else{n[(Zy()|0)>>2]=84,o=-1;break}}else o=1;while(!1);return o|0}function g6e(){return aU()|0}function d6e(){return aU()|0}function m6e(o,l){o=o|0,l=l|0;var u=0,A=0;for(A=0;;){if((c[5712+A>>0]|0)==(o|0)){o=2;break}if(u=A+1|0,(u|0)==87){u=5800,A=87,o=5;break}else A=u}if((o|0)==2&&(A?(u=5800,o=5):u=5800),(o|0)==5)for(;;){do o=u,u=u+1|0;while(s[o>>0]|0);if(A=A+-1|0,A)o=5;else break}return y6e(u,n[l+20>>2]|0)|0}function y6e(o,l){return o=o|0,l=l|0,E6e(o,l)|0}function E6e(o,l){return o=o|0,l=l|0,l?l=I6e(n[l>>2]|0,n[l+4>>2]|0,o)|0:l=0,(l|0?l:o)|0}function I6e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0;ae=(n[o>>2]|0)+1794895138|0,m=Ad(n[o+8>>2]|0,ae)|0,A=Ad(n[o+12>>2]|0,ae)|0,d=Ad(n[o+16>>2]|0,ae)|0;e:do if(m>>>0>>2>>>0&&(q=l-(m<<2)|0,A>>>0>>0&d>>>0>>0)&&!((d|A)&3|0)){for(q=A>>>2,L=d>>>2,M=0;;){if(k=m>>>1,R=M+k|0,B=R<<1,d=B+q|0,A=Ad(n[o+(d<<2)>>2]|0,ae)|0,d=Ad(n[o+(d+1<<2)>>2]|0,ae)|0,!(d>>>0>>0&A>>>0<(l-d|0)>>>0)){A=0;break e}if(s[o+(d+A)>>0]|0){A=0;break e}if(A=gX(u,o+d|0)|0,!A)break;if(A=(A|0)<0,(m|0)==1){A=0;break e}else M=A?M:R,m=A?k:m-k|0}A=B+L|0,d=Ad(n[o+(A<<2)>>2]|0,ae)|0,A=Ad(n[o+(A+1<<2)>>2]|0,ae)|0,A>>>0>>0&d>>>0<(l-A|0)>>>0?A=s[o+(A+d)>>0]|0?0:o+A|0:A=0}else A=0;while(!1);return A|0}function Ad(o,l){o=o|0,l=l|0;var u=0;return u=xX(o|0)|0,(l|0?u:o)|0}function C6e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=u+16|0,d=n[A>>2]|0,d?m=5:w6e(u)|0?A=0:(d=n[A>>2]|0,m=5);e:do if((m|0)==5){if(k=u+20|0,B=n[k>>2]|0,A=B,(d-B|0)>>>0>>0){A=Yb[n[u+36>>2]&7](u,o,l)|0;break}t:do if((s[u+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=o;break t}if(d=B+-1|0,(s[o+d>>0]|0)==10)break;B=d}if(A=Yb[n[u+36>>2]&7](u,o,B)|0,A>>>0>>0)break e;m=B,d=o+B|0,l=l-B|0,A=n[k>>2]|0}else m=0,d=o;while(!1);Qr(A|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,A=m+l|0}while(!1);return A|0}function w6e(o){o=o|0;var l=0,u=0;return l=o+74|0,u=s[l>>0]|0,s[l>>0]=u+255|u,l=n[o>>2]|0,l&8?(n[o>>2]=l|32,o=-1):(n[o+8>>2]=0,n[o+4>>2]=0,u=n[o+44>>2]|0,n[o+28>>2]=u,n[o+20>>2]=u,n[o+16>>2]=u+(n[o+48>>2]|0),o=0),o|0}function $n(o,l){o=y(o),l=y(l);var u=0,A=0;u=wX(o)|0;do if((u&2147483647)>>>0<=2139095040){if(A=wX(l)|0,(A&2147483647)>>>0<=2139095040)if((A^u|0)<0){o=(u|0)<0?l:o;break}else{o=o>2]=o,n[S>>2]|0|0}function pd(o,l){o=y(o),l=y(l);var u=0,A=0;u=BX(o)|0;do if((u&2147483647)>>>0<=2139095040){if(A=BX(l)|0,(A&2147483647)>>>0<=2139095040)if((A^u|0)<0){o=(u|0)<0?o:l;break}else{o=o>2]=o,n[S>>2]|0|0}function cU(o,l){o=y(o),l=y(l);var u=0,A=0,d=0,m=0,B=0,k=0,R=0,M=0;m=(h[S>>2]=o,n[S>>2]|0),k=(h[S>>2]=l,n[S>>2]|0),u=m>>>23&255,B=k>>>23&255,R=m&-2147483648,d=k<<1;e:do if(d|0&&!((u|0)==255|((B6e(l)|0)&2147483647)>>>0>2139095040)){if(A=m<<1,A>>>0<=d>>>0)return l=y(o*y(0)),y((A|0)==(d|0)?l:o);if(u)A=m&8388607|8388608;else{if(u=m<<9,(u|0)>-1){A=u,u=0;do u=u+-1|0,A=A<<1;while((A|0)>-1)}else u=0;A=m<<1-u}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=A-k|0,m=(d|0)>-1;t:do if((u|0)>(B|0)){for(;;){if(m)if(d)A=d;else break;if(A=A<<1,u=u+-1|0,d=A-k|0,m=(d|0)>-1,(u|0)<=(B|0))break t}l=y(o*y(0));break e}while(!1);if(m)if(d)A=d;else{l=y(o*y(0));break}if(A>>>0<8388608)do A=A<<1,u=u+-1|0;while(A>>>0<8388608);(u|0)>0?u=A+-8388608|u<<23:u=A>>>(1-u|0),l=(n[S>>2]=u|R,y(h[S>>2]))}else M=3;while(!1);return(M|0)==3&&(l=y(o*l),l=y(l/l)),y(l)}function B6e(o){return o=y(o),h[S>>2]=o,n[S>>2]|0|0}function v6e(o,l){return o=o|0,l=l|0,dX(n[582]|0,o,l)|0}function sn(o){o=o|0,Nt()}function $y(o){o=o|0}function S6e(o,l){return o=o|0,l=l|0,0}function D6e(o){return o=o|0,(vX(o+4|0)|0)==-1?(ip[n[(n[o>>2]|0)+8>>2]&127](o),o=1):o=0,o|0}function vX(o){o=o|0;var l=0;return l=n[o>>2]|0,n[o>>2]=l+-1,l+-1|0}function Gh(o){o=o|0,D6e(o)|0&&P6e(o)}function P6e(o){o=o|0;var l=0;l=o+8|0,n[l>>2]|0&&(vX(l)|0)!=-1||ip[n[(n[o>>2]|0)+16>>2]&127](o)}function Kt(o){o=o|0;var l=0;for(l=o|0?o:1;o=_b(l)|0,!(o|0);){if(o=x6e()|0,!o){o=0;break}UX[o&0]()}return o|0}function SX(o){return o=o|0,Kt(o)|0}function It(o){o=o|0,Hb(o)}function b6e(o){o=o|0,(s[o+11>>0]|0)<0&&It(n[o>>2]|0)}function x6e(){var o=0;return o=n[2923]|0,n[2923]=o+0,o|0}function k6e(){}function Gb(o,l,u,A){return o=o|0,l=l|0,u=u|0,A=A|0,A=l-A-(u>>>0>o>>>0|0)>>>0,ye=A,o-u>>>0|0|0}function uU(o,l,u,A){return o=o|0,l=l|0,u=u|0,A=A|0,u=o+u>>>0,ye=l+A+(u>>>0>>0|0)>>>0,u|0|0}function eE(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;if(m=o+u|0,l=l&255,(u|0)>=67){for(;o&3;)s[o>>0]=l,o=o+1|0;for(A=m&-4|0,d=A-64|0,B=l|l<<8|l<<16|l<<24;(o|0)<=(d|0);)n[o>>2]=B,n[o+4>>2]=B,n[o+8>>2]=B,n[o+12>>2]=B,n[o+16>>2]=B,n[o+20>>2]=B,n[o+24>>2]=B,n[o+28>>2]=B,n[o+32>>2]=B,n[o+36>>2]=B,n[o+40>>2]=B,n[o+44>>2]=B,n[o+48>>2]=B,n[o+52>>2]=B,n[o+56>>2]=B,n[o+60>>2]=B,o=o+64|0;for(;(o|0)<(A|0);)n[o>>2]=B,o=o+4|0}for(;(o|0)<(m|0);)s[o>>0]=l,o=o+1|0;return m-u|0}function DX(o,l,u){return o=o|0,l=l|0,u=u|0,(u|0)<32?(ye=l<>>32-u,o<>>u,o>>>u|(l&(1<>>u-32|0)}function Qr(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;if((u|0)>=8192)return OA(o|0,l|0,u|0)|0;if(m=o|0,d=o+u|0,(o&3)==(l&3)){for(;o&3;){if(!u)return m|0;s[o>>0]=s[l>>0]|0,o=o+1|0,l=l+1|0,u=u-1|0}for(u=d&-4|0,A=u-64|0;(o|0)<=(A|0);)n[o>>2]=n[l>>2],n[o+4>>2]=n[l+4>>2],n[o+8>>2]=n[l+8>>2],n[o+12>>2]=n[l+12>>2],n[o+16>>2]=n[l+16>>2],n[o+20>>2]=n[l+20>>2],n[o+24>>2]=n[l+24>>2],n[o+28>>2]=n[l+28>>2],n[o+32>>2]=n[l+32>>2],n[o+36>>2]=n[l+36>>2],n[o+40>>2]=n[l+40>>2],n[o+44>>2]=n[l+44>>2],n[o+48>>2]=n[l+48>>2],n[o+52>>2]=n[l+52>>2],n[o+56>>2]=n[l+56>>2],n[o+60>>2]=n[l+60>>2],o=o+64|0,l=l+64|0;for(;(o|0)<(u|0);)n[o>>2]=n[l>>2],o=o+4|0,l=l+4|0}else for(u=d-4|0;(o|0)<(u|0);)s[o>>0]=s[l>>0]|0,s[o+1>>0]=s[l+1>>0]|0,s[o+2>>0]=s[l+2>>0]|0,s[o+3>>0]=s[l+3>>0]|0,o=o+4|0,l=l+4|0;for(;(o|0)<(d|0);)s[o>>0]=s[l>>0]|0,o=o+1|0,l=l+1|0;return m|0}function PX(o){o=o|0;var l=0;return l=s[N+(o&255)>>0]|0,(l|0)<8?l|0:(l=s[N+(o>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=s[N+(o>>16&255)>>0]|0,(l|0)<8?l+16|0:(s[N+(o>>>24)>>0]|0)+24|0))}function bX(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,R=0,M=0,L=0,q=0,ae=0,Ye=0,Le=0;if(L=o,R=l,M=R,B=u,ae=A,k=ae,!M)return m=(d|0)!=0,k?m?(n[d>>2]=o|0,n[d+4>>2]=l&0,ae=0,d=0,ye=ae,d|0):(ae=0,d=0,ye=ae,d|0):(m&&(n[d>>2]=(L>>>0)%(B>>>0),n[d+4>>2]=0),ae=0,d=(L>>>0)/(B>>>0)>>>0,ye=ae,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){q=m+1|0,k=31-m|0,l=m-31>>31,B=q,o=L>>>(q>>>0)&l|M<>>(q>>>0)&l,m=0,k=L<>2]=o|0,n[d+4>>2]=R|l&0,ae=0,d=0,ye=ae,d|0):(ae=0,d=0,ye=ae,d|0)}if(m=B-1|0,m&B|0){k=(P(B|0)|0)+33-(P(M|0)|0)|0,Le=64-k|0,q=32-k|0,R=q>>31,Ye=k-32|0,l=Ye>>31,B=k,o=q-1>>31&M>>>(Ye>>>0)|(M<>>(k>>>0))&l,l=l&M>>>(k>>>0),m=L<>>(Ye>>>0))&R|L<>31;break}return d|0&&(n[d>>2]=m&L,n[d+4>>2]=0),(B|0)==1?(Ye=R|l&0,Le=o|0|0,ye=Ye,Le|0):(Le=PX(B|0)|0,Ye=M>>>(Le>>>0)|0,Le=M<<32-Le|L>>>(Le>>>0)|0,ye=Ye,Le|0)}else{if(m)return d|0&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),Ye=0,Le=(M>>>0)/(B>>>0)>>>0,ye=Ye,Le|0;if(!L)return d|0&&(n[d>>2]=0,n[d+4>>2]=(M>>>0)%(k>>>0)),Ye=0,Le=(M>>>0)/(k>>>0)>>>0,ye=Ye,Le|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=o|0,n[d+4>>2]=m&M|l&0),Ye=0,Le=M>>>((PX(k|0)|0)>>>0),ye=Ye,Le|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,o=M<>>(l>>>0),l=M>>>(l>>>0),m=0,k=L<>2]=o|0,n[d+4>>2]=R|l&0,Ye=0,Le=0,ye=Ye,Le|0):(Ye=0,Le=0,ye=Ye,Le|0)}while(!1);if(!B)M=k,R=0,k=0;else{q=u|0|0,L=ae|A&0,M=uU(q|0,L|0,-1,-1)|0,u=ye,R=k,k=0;do A=R,R=m>>>31|R<<1,m=k|m<<1,A=o<<1|A>>>31|0,ae=o>>>31|l<<1|0,Gb(M|0,u|0,A|0,ae|0)|0,Le=ye,Ye=Le>>31|((Le|0)<0?-1:0)<<1,k=Ye&1,o=Gb(A|0,ae|0,Ye&q|0,(((Le|0)<0?-1:0)>>31|((Le|0)<0?-1:0)<<1)&L|0)|0,l=ye,B=B-1|0;while(B|0);M=R,R=0}return B=0,d|0&&(n[d>>2]=o,n[d+4>>2]=l),Ye=(m|0)>>>31|(M|B)<<1|(B<<1|m>>>31)&0|R,Le=(m<<1|0)&-2|k,ye=Ye,Le|0}function fU(o,l,u,A){return o=o|0,l=l|0,u=u|0,A=A|0,bX(o,l,u,A,0)|0}function qh(o){o=o|0;var l=0,u=0;return u=o+15&-16|0,l=n[C>>2]|0,o=l+u|0,(u|0)>0&(o|0)<(l|0)|(o|0)<0?(oe()|0,fu(12),-1):(n[C>>2]=o,(o|0)>($()|0)&&!(Z()|0)?(n[C>>2]=l,fu(12),-1):l|0)}function Q2(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;if((l|0)<(o|0)&(o|0)<(l+u|0)){for(A=o,l=l+u|0,o=o+u|0;(u|0)>0;)o=o-1|0,l=l-1|0,u=u-1|0,s[o>>0]=s[l>>0]|0;o=A}else Qr(o,l,u)|0;return o|0}function AU(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;return m=I,I=I+16|0,d=m|0,bX(o,l,u,A,d)|0,I=m,ye=n[d+4>>2]|0,n[d>>2]|0|0}function xX(o){return o=o|0,(o&255)<<24|(o>>8&255)<<16|(o>>16&255)<<8|o>>>24|0}function Q6e(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,kX[o&1](l|0,u|0,A|0,d|0,m|0)}function R6e(o,l,u){o=o|0,l=l|0,u=y(u),QX[o&1](l|0,y(u))}function T6e(o,l,u){o=o|0,l=l|0,u=+u,RX[o&31](l|0,+u)}function F6e(o,l,u,A){return o=o|0,l=l|0,u=y(u),A=y(A),y(TX[o&0](l|0,y(u),y(A)))}function N6e(o,l){o=o|0,l=l|0,ip[o&127](l|0)}function O6e(o,l,u){o=o|0,l=l|0,u=u|0,sp[o&31](l|0,u|0)}function L6e(o,l){return o=o|0,l=l|0,gd[o&31](l|0)|0}function M6e(o,l,u,A,d){o=o|0,l=l|0,u=+u,A=+A,d=d|0,FX[o&1](l|0,+u,+A,d|0)}function U6e(o,l,u,A){o=o|0,l=l|0,u=+u,A=+A,EGe[o&1](l|0,+u,+A)}function _6e(o,l,u,A){return o=o|0,l=l|0,u=u|0,A=A|0,Yb[o&7](l|0,u|0,A|0)|0}function H6e(o,l,u,A){return o=o|0,l=l|0,u=u|0,A=A|0,+IGe[o&1](l|0,u|0,A|0)}function j6e(o,l){return o=o|0,l=l|0,+NX[o&15](l|0)}function G6e(o,l,u){return o=o|0,l=l|0,u=+u,CGe[o&1](l|0,+u)|0}function q6e(o,l,u){return o=o|0,l=l|0,u=u|0,hU[o&15](l|0,u|0)|0}function W6e(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=+A,d=+d,m=m|0,wGe[o&1](l|0,u|0,+A,+d,m|0)}function Y6e(o,l,u,A,d,m,B){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,B=B|0,BGe[o&1](l|0,u|0,A|0,d|0,m|0,B|0)}function V6e(o,l,u){return o=o|0,l=l|0,u=u|0,+OX[o&7](l|0,u|0)}function J6e(o){return o=o|0,Vb[o&7]()|0}function K6e(o,l,u,A,d,m){return o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,LX[o&1](l|0,u|0,A|0,d|0,m|0)|0}function z6e(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=+d,vGe[o&1](l|0,u|0,A|0,+d)}function Z6e(o,l,u,A,d,m,B){o=o|0,l=l|0,u=u|0,A=y(A),d=d|0,m=y(m),B=B|0,MX[o&1](l|0,u|0,y(A),d|0,y(m),B|0)}function X6e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,F2[o&15](l|0,u|0,A|0)}function $6e(o){o=o|0,UX[o&0]()}function eGe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=+A,_X[o&15](l|0,u|0,+A)}function tGe(o,l,u){return o=o|0,l=+l,u=+u,SGe[o&1](+l,+u)|0}function rGe(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,gU[o&15](l|0,u|0,A|0,d|0)}function nGe(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,F(0)}function iGe(o,l){o=o|0,l=y(l),F(1)}function Za(o,l){o=o|0,l=+l,F(2)}function sGe(o,l,u){return o=o|0,l=y(l),u=y(u),F(3),$e}function wr(o){o=o|0,F(4)}function R2(o,l){o=o|0,l=l|0,F(5)}function Ol(o){return o=o|0,F(6),0}function oGe(o,l,u,A){o=o|0,l=+l,u=+u,A=A|0,F(7)}function aGe(o,l,u){o=o|0,l=+l,u=+u,F(8)}function lGe(o,l,u){return o=o|0,l=l|0,u=u|0,F(9),0}function cGe(o,l,u){return o=o|0,l=l|0,u=u|0,F(10),0}function hd(o){return o=o|0,F(11),0}function uGe(o,l){return o=o|0,l=+l,F(12),0}function T2(o,l){return o=o|0,l=l|0,F(13),0}function fGe(o,l,u,A,d){o=o|0,l=l|0,u=+u,A=+A,d=d|0,F(14)}function AGe(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,F(15)}function pU(o,l){return o=o|0,l=l|0,F(16),0}function pGe(){return F(17),0}function hGe(o,l,u,A,d){return o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,F(18),0}function gGe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=+A,F(19)}function dGe(o,l,u,A,d,m){o=o|0,l=l|0,u=y(u),A=A|0,d=y(d),m=m|0,F(20)}function Wb(o,l,u){o=o|0,l=l|0,u=u|0,F(21)}function mGe(){F(22)}function tE(o,l,u){o=o|0,l=l|0,u=+u,F(23)}function yGe(o,l){return o=+o,l=+l,F(24),0}function rE(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,F(25)}var kX=[nGe,h3e],QX=[iGe,Ry],RX=[Za,Xg,Fh,h2,g2,d2,m2,Pf,_y,y2,bf,$g,ed,E2,I2,wu,td,C2,Hy,Za,Za,Za,Za,Za,Za,Za,Za,Za,Za,Za,Za,Za],TX=[sGe],ip=[wr,$y,Jke,Kke,zke,SFe,DFe,PFe,G_e,q_e,W_e,t3e,r3e,n3e,Bje,vje,Sje,Bl,Zg,u2,sr,hc,xb,kb,Mke,iQe,dQe,FQe,zQe,pRe,kRe,WRe,oTe,wTe,MTe,eFe,dFe,qFe,oNe,wNe,MNe,eOe,dOe,NOe,zOe,uLe,DLe,db,nMe,EMe,MMe,rUe,mUe,MUe,JUe,ZUe,h_e,m_e,F_e,V_e,z_e,p4e,Q4e,dz,A8e,G8e,iHe,EHe,HHe,rje,pje,dje,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr],sp=[R2,Ly,VL,f2,A2,xr,so,zi,Ns,ws,Uy,Th,B2,Cb,id,zL,ZL,wb,Bb,eM,xf,ne,UOe,$Oe,oUe,g8e,U4e,eX,R2,R2,R2,R2],gd=[Ol,e6e,Ny,nd,Gy,ga,mb,Nh,w2,KL,Eb,qy,vb,tM,Vy,xLe,CUe,d4e,E8e,Tl,Ol,Ol,Ol,Ol,Ol,Ol,Ol,Ol,Ol,Ol,Ol,Ol],FX=[oGe,oM],EGe=[aGe,L_e],Yb=[lGe,hX,t6e,i6e,mRe,JFe,aMe,BHe],IGe=[cGe,jTe],NX=[hd,Oh,Ib,$A,aM,v,D,Q,H,V,hd,hd,hd,hd,hd,hd],CGe=[uGe,WUe],hU=[T2,S6e,Sb,jke,MQe,TRe,JRe,IFe,uNe,hLe,Ty,lHe,T2,T2,T2,T2],wGe=[fGe,IQe],BGe=[AGe,WHe],OX=[pU,XL,Se,_e,pt,iFe,pU,pU],Vb=[pGe,Wt,Fy,gb,t_e,C_e,e4e,Ije],LX=[hGe,Sy],vGe=[gGe,jNe],MX=[dGe,rM],F2=[Wb,ko,yb,$L,vu,eRe,cTe,iOe,IOe,YL,L3e,V8e,oje,Wb,Wb,Wb],UX=[mGe],_X=[tE,JL,My,XA,p2,Bu,jy,rd,DNe,BMe,HUe,tE,tE,tE,tE,tE],SGe=[yGe,H_e],gU=[rE,DTe,LLe,jMe,kUe,a_e,P_e,a4e,O4e,S8e,Qje,rE,rE,rE,rE,rE];return{_llvm_bswap_i32:xX,dynCall_idd:tGe,dynCall_i:J6e,_i64Subtract:Gb,___udivdi3:fU,dynCall_vif:R6e,setThrew:ca,dynCall_viii:X6e,_bitshift64Lshr:qb,_bitshift64Shl:DX,dynCall_vi:N6e,dynCall_viiddi:W6e,dynCall_diii:H6e,dynCall_iii:q6e,_memset:eE,_sbrk:qh,_memcpy:Qr,__GLOBAL__sub_I_Yoga_cpp:a2,dynCall_vii:O6e,___uremdi3:AU,dynCall_vid:T6e,stackAlloc:Ua,_nbind_init:jje,getTempRet0:MA,dynCall_di:j6e,dynCall_iid:G6e,setTempRet0:LA,_i64Add:uU,dynCall_fiff:F6e,dynCall_iiii:_6e,_emscripten_get_global_libc:$je,dynCall_viid:eGe,dynCall_viiid:z6e,dynCall_viififi:Z6e,dynCall_ii:L6e,__GLOBAL__sub_I_Binding_cc:i8e,dynCall_viiii:rGe,dynCall_iiiiii:K6e,stackSave:hf,dynCall_viiiii:Q6e,__GLOBAL__sub_I_nbind_cc:Sr,dynCall_vidd:U6e,_free:Hb,runPostSets:k6e,dynCall_viiiiii:Y6e,establishStackSpace:wn,_memmove:Q2,stackRestore:lc,_malloc:_b,__GLOBAL__sub_I_common_cc:v4e,dynCall_viddi:M6e,dynCall_dii:V6e,dynCall_v:$6e}}(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 s(){for(var p=0;p<3;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];s();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(s){r=s(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 Fm=_((cKt,bwe)=>{"use strict";var Ipt=Dwe(),Cpt=Pwe(),j9=!1,G9=null;Cpt({},function(t,e){if(!j9){if(j9=!0,t)throw t;G9=e}});if(!j9)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");bwe.exports=Ipt(G9.bind,G9.lib)});var W9=_((uKt,q9)=>{"use strict";var xwe=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);q9.exports=xwe;q9.exports.default=xwe});var Qwe=_((fKt,kwe)=>{"use strict";kwe.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 GS=_((AKt,Y9)=>{"use strict";var wpt=dk(),Bpt=W9(),vpt=Qwe(),Rwe=t=>{if(typeof t!="string"||t.length===0||(t=wpt(t),t.length===0))return 0;t=t.replace(vpt()," ");let e=0;for(let r=0;r=127&&s<=159||s>=768&&s<=879||(s>65535&&r++,e+=Bpt(s)?2:1)}return e};Y9.exports=Rwe;Y9.exports.default=Rwe});var J9=_((pKt,V9)=>{"use strict";var Spt=GS(),Twe=t=>{let e=0;for(let r of t.split(` -`))e=Math.max(e,Spt(r));return e};V9.exports=Twe;V9.exports.default=Twe});var Fwe=_(qS=>{"use strict";var Dpt=qS&&qS.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(qS,"__esModule",{value:!0});var Ppt=Dpt(J9()),K9={};qS.default=t=>{if(t.length===0)return{width:0,height:0};if(K9[t])return K9[t];let e=Ppt.default(t),r=t.split(` -`).length;return K9[t]={width:e,height:r},{width:e,height:r}}});var Nwe=_(WS=>{"use strict";var bpt=WS&&WS.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(WS,"__esModule",{value:!0});var Pn=bpt(Fm()),xpt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?Pn.default.POSITION_TYPE_ABSOLUTE:Pn.default.POSITION_TYPE_RELATIVE)},kpt=(t,e)=>{"marginLeft"in e&&t.setMargin(Pn.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(Pn.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(Pn.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(Pn.default.EDGE_BOTTOM,e.marginBottom||0)},Qpt=(t,e)=>{"paddingLeft"in e&&t.setPadding(Pn.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(Pn.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(Pn.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(Pn.default.EDGE_BOTTOM,e.paddingBottom||0)},Rpt=(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(Pn.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(Pn.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(Pn.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(Pn.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(Pn.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(Pn.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(Pn.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(Pn.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(Pn.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(Pn.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(Pn.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(Pn.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(Pn.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(Pn.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(Pn.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(Pn.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(Pn.default.JUSTIFY_SPACE_AROUND))},Tpt=(t,e)=>{var r,s;"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((s=e.minHeight)!==null&&s!==void 0?s:0))},Fpt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?Pn.default.DISPLAY_FLEX:Pn.default.DISPLAY_NONE)},Npt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(Pn.default.EDGE_TOP,r),t.setBorder(Pn.default.EDGE_BOTTOM,r),t.setBorder(Pn.default.EDGE_LEFT,r),t.setBorder(Pn.default.EDGE_RIGHT,r)}};WS.default=(t,e={})=>{xpt(t,e),kpt(t,e),Qpt(t,e),Rpt(t,e),Tpt(t,e),Fpt(t,e),Npt(t,e)}});var Mwe=_((dKt,Lwe)=>{"use strict";var YS=GS(),Opt=dk(),Lpt=sk(),Z9=new Set(["\x1B","\x9B"]),Mpt=39,Owe=t=>`${Z9.values().next().value}[${t}m`,Upt=t=>t.split(" ").map(e=>YS(e)),z9=(t,e,r)=>{let s=[...e],a=!1,n=YS(Opt(t[t.length-1]));for(let[c,f]of s.entries()){let p=YS(f);if(n+p<=r?t[t.length-1]+=f:(t.push(f),n=0),Z9.has(f))a=!0;else if(a&&f==="m"){a=!1;continue}a||(n+=p,n===r&&c0&&t.length>1&&(t[t.length-2]+=t.pop())},_pt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(YS(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},Hpt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let s="",a="",n,c=Upt(t),f=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(f[f.length-1]=f[f.length-1].trimLeft());let E=YS(f[f.length-1]);if(p!==0&&(E>=e&&(r.wordWrap===!1||r.trim===!1)&&(f.push(""),E=0),(E>0||r.trim===!1)&&(f[f.length-1]+=" ",E++)),r.hard&&c[p]>e){let C=e-E,S=1+Math.floor((c[p]-C-1)/e);Math.floor((c[p]-1)/e)e&&E>0&&c[p]>0){if(r.wordWrap===!1&&Ee&&r.wordWrap===!1){z9(f,h,e);continue}f[f.length-1]+=h}r.trim!==!1&&(f=f.map(_pt)),s=f.join(` -`);for(let[p,h]of[...s].entries()){if(a+=h,Z9.has(h)){let C=parseFloat(/\d[^m]*/.exec(s.slice(p,p+4)));n=C===Mpt?null:C}let E=Lpt.codes.get(Number(n));n&&E&&(s[p+1]===` -`?a+=Owe(E):h===` -`&&(a+=Owe(n)))}return a};Lwe.exports=(t,e,r)=>String(t).normalize().replace(/\r\n/g,` -`).split(` -`).map(s=>Hpt(s,e,r)).join(` -`)});var Hwe=_((mKt,_we)=>{"use strict";var Uwe="[\uD800-\uDBFF][\uDC00-\uDFFF]",jpt=t=>t&&t.exact?new RegExp(`^${Uwe}$`):new RegExp(Uwe,"g");_we.exports=jpt});var X9=_((yKt,Wwe)=>{"use strict";var Gpt=W9(),qpt=Hwe(),jwe=sk(),qwe=["\x1B","\x9B"],FF=t=>`${qwe[0]}[${t}m`,Gwe=(t,e,r)=>{let s=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let c=jwe.codes.get(parseInt(a,10));if(c){let f=t.indexOf(c.toString());f>=0?t.splice(f,1):s.push(FF(e?c:n))}else if(e){s.push(FF(0));break}else s.push(FF(n))}if(e&&(s=s.filter((a,n)=>s.indexOf(a)===n),r!==void 0)){let a=FF(jwe.codes.get(parseInt(r,10)));s=s.reduce((n,c)=>c===a?[c,...n]:[...n,c],[])}return s.join("")};Wwe.exports=(t,e,r)=>{let s=[...t.normalize()],a=[];r=typeof r=="number"?r:s.length;let n=!1,c,f=0,p="";for(let[h,E]of s.entries()){let C=!1;if(qwe.includes(E)){let S=/\d[^m]*/.exec(t.slice(h,h+18));c=S&&S.length>0?S[0]:void 0,fe&&f<=r)p+=E;else if(f===e&&!n&&c!==void 0)p=Gwe(a);else if(f>=r){p+=Gwe(a,!0,c);break}}return p}});var Vwe=_((EKt,Ywe)=>{"use strict";var $0=X9(),Wpt=GS();function NF(t,e,r){if(t.charAt(e)===" ")return e;for(let s=1;s<=3;s++)if(r){if(t.charAt(e+s)===" ")return e+s}else if(t.charAt(e-s)===" ")return e-s;return e}Ywe.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:s,space:a,preferTruncationOnSpace:n}=r,c="\u2026",f=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 c;let p=Wpt(t);if(p<=e)return t;if(s==="start"){if(n){let h=NF(t,p-e+1,!0);return c+$0(t,h,p).trim()}return a===!0&&(c+=" ",f=2),c+$0(t,p-e+f,p)}if(s==="middle"){a===!0&&(c=" "+c+" ",f=3);let h=Math.floor(e/2);if(n){let E=NF(t,h),C=NF(t,p-(e-h)+1,!0);return $0(t,0,E)+c+$0(t,C,p).trim()}return $0(t,0,h)+c+$0(t,p-(e-h)+f,p)}if(s==="end"){if(n){let h=NF(t,e-1);return $0(t,0,h)+c}return a===!0&&(c=" "+c,f=2),$0(t,0,e-f)+c}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${s}`)}});var eW=_(VS=>{"use strict";var Jwe=VS&&VS.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(VS,"__esModule",{value:!0});var Ypt=Jwe(Mwe()),Vpt=Jwe(Vwe()),$9={};VS.default=(t,e,r)=>{let s=t+String(e)+String(r);if($9[s])return $9[s];let a=t;if(r==="wrap"&&(a=Ypt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=Vpt.default(t,e,{position:n})}return $9[s]=a,a}});var rW=_(tW=>{"use strict";Object.defineProperty(tW,"__esModule",{value:!0});var Kwe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let s="";r.nodeName==="#text"?s=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(s=Kwe(r)),s.length>0&&typeof r.internal_transform=="function"&&(s=r.internal_transform(s))),e+=s}return e};tW.default=Kwe});var nW=_(Pi=>{"use strict";var JS=Pi&&Pi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Pi,"__esModule",{value:!0});Pi.setTextNodeValue=Pi.createTextNode=Pi.setStyle=Pi.setAttribute=Pi.removeChildNode=Pi.insertBeforeNode=Pi.appendChildNode=Pi.createNode=Pi.TEXT_NAME=void 0;var Jpt=JS(Fm()),zwe=JS(Fwe()),Kpt=JS(Nwe()),zpt=JS(eW()),Zpt=JS(rW());Pi.TEXT_NAME="#text";Pi.createNode=t=>{var e;let r={nodeName:t,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:t==="ink-virtual-text"?void 0:Jpt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(Xpt.bind(null,r))),r};Pi.appendChildNode=(t,e)=>{var r;e.parentNode&&Pi.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")&&OF(t)};Pi.insertBeforeNode=(t,e,r)=>{var s,a;e.parentNode&&Pi.removeChildNode(e.parentNode,e),e.parentNode=t;let n=t.childNodes.indexOf(r);if(n>=0){t.childNodes.splice(n,0,e),e.yogaNode&&((s=t.yogaNode)===null||s===void 0||s.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")&&OF(t)};Pi.removeChildNode=(t,e)=>{var r,s;e.yogaNode&&((s=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||s===void 0||s.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")&&OF(t)};Pi.setAttribute=(t,e,r)=>{t.attributes[e]=r};Pi.setStyle=(t,e)=>{t.style=e,t.yogaNode&&Kpt.default(t.yogaNode,e)};Pi.createTextNode=t=>{let e={nodeName:"#text",nodeValue:t,yogaNode:void 0,parentNode:null,style:{}};return Pi.setTextNodeValue(e,t),e};var Xpt=function(t,e){var r,s;let a=t.nodeName==="#text"?t.nodeValue:Zpt.default(t),n=zwe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let c=(s=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&s!==void 0?s:"wrap",f=zpt.default(a,e,c);return zwe.default(f)},Zwe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:Zwe(t.parentNode)},OF=t=>{let e=Zwe(t);e?.markDirty()};Pi.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,OF(t)}});var r1e=_(KS=>{"use strict";var t1e=KS&&KS.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(KS,"__esModule",{value:!0});var Xwe=U9(),$pt=t1e(Iwe()),$we=t1e(Fm()),ea=nW(),e1e=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};KS.default=$pt.default({schedulePassiveEffects:Xwe.unstable_scheduleCallback,cancelPassiveEffects:Xwe.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,s=e==="ink-text"||e==="ink-virtual-text";return r===s?t:{isInsideText:s}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,s)=>{if(s.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&s.isInsideText?"ink-virtual-text":t,n=ea.createNode(a);for(let[c,f]of Object.entries(e))c!=="children"&&(c==="style"?ea.setStyle(n,f):c==="internal_transform"?n.internal_transform=f:c==="internal_static"?n.internal_static=!0:ea.setAttribute(n,c,f));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return ea.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{ea.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{ea.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay($we.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay($we.default.DISPLAY_FLEX)},appendInitialChild:ea.appendChildNode,appendChild:ea.appendChildNode,insertBefore:ea.insertBeforeNode,finalizeInitialChildren:(t,e,r,s)=>(t.internal_static&&(s.isStaticDirty=!0,s.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:ea.appendChildNode,insertInContainerBefore:ea.insertBeforeNode,removeChildFromContainer:(t,e)=>{ea.removeChildNode(t,e),e1e(e.yogaNode)},prepareUpdate:(t,e,r,s,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},c=Object.keys(s);for(let f of c)if(s[f]!==r[f]){if(f==="style"&&typeof s.style=="object"&&typeof r.style=="object"){let h=s.style,E=r.style,C=Object.keys(h);for(let S of C){if(S==="borderStyle"||S==="borderColor"){if(typeof n.style!="object"){let b={};n.style=b}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[S]!==E[S]){if(typeof n.style!="object"){let b={};n.style=b}n.style[S]=h[S]}}continue}n[f]=s[f]}return n},commitUpdate:(t,e)=>{for(let[r,s]of Object.entries(e))r!=="children"&&(r==="style"?ea.setStyle(t,s):r==="internal_transform"?t.internal_transform=s:r==="internal_static"?t.internal_static=!0:ea.setAttribute(t,r,s))},commitTextUpdate:(t,e,r)=>{ea.setTextNodeValue(t,r)},removeChild:(t,e)=>{ea.removeChildNode(t,e),e1e(e.yogaNode)}})});var i1e=_((vKt,n1e)=>{"use strict";n1e.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 s=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(s,r.indent.repeat(e))}});var s1e=_(zS=>{"use strict";var eht=zS&&zS.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(zS,"__esModule",{value:!0});var LF=eht(Fm());zS.default=t=>t.getComputedWidth()-t.getComputedPadding(LF.default.EDGE_LEFT)-t.getComputedPadding(LF.default.EDGE_RIGHT)-t.getComputedBorder(LF.default.EDGE_LEFT)-t.getComputedBorder(LF.default.EDGE_RIGHT)});var o1e=_((DKt,tht)=>{tht.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 l1e=_((PKt,iW)=>{"use strict";var a1e=o1e();iW.exports=a1e;iW.exports.default=a1e});var sW=_(XS=>{"use strict";var rht=XS&&XS.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(XS,"__esModule",{value:!0});var ZS=rht(RE()),nht=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,iht=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,MF=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);XS.default=(t,e,r)=>{if(!e)return t;if(e in ZS.default){let a=MF(e,r);return ZS.default[a](t)}if(e.startsWith("#")){let a=MF("hex",r);return ZS.default[a](e)(t)}if(e.startsWith("ansi")){let a=iht.exec(e);if(!a)return t;let n=MF(a[1],r),c=Number(a[2]);return ZS.default[n](c)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=nht.exec(e);if(!a)return t;let n=MF(a[1],r),c=Number(a[2]),f=Number(a[3]),p=Number(a[4]);return ZS.default[n](c,f,p)(t)}return t}});var u1e=_($S=>{"use strict";var c1e=$S&&$S.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty($S,"__esModule",{value:!0});var sht=c1e(l1e()),oW=c1e(sW());$S.default=(t,e,r,s)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),c=r.style.borderColor,f=sht.default[r.style.borderStyle],p=oW.default(f.topLeft+f.horizontal.repeat(a-2)+f.topRight,c,"foreground"),h=(oW.default(f.vertical,c,"foreground")+` -`).repeat(n-2),E=oW.default(f.bottomLeft+f.horizontal.repeat(a-2)+f.bottomRight,c,"foreground");s.write(t,e,p,{transformers:[]}),s.write(t,e+1,h,{transformers:[]}),s.write(t+a-1,e+1,h,{transformers:[]}),s.write(t,e+n-1,E,{transformers:[]})}}});var A1e=_(eD=>{"use strict";var Nm=eD&&eD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(eD,"__esModule",{value:!0});var oht=Nm(Fm()),aht=Nm(J9()),lht=Nm(i1e()),cht=Nm(eW()),uht=Nm(s1e()),fht=Nm(rW()),Aht=Nm(u1e()),pht=(t,e)=>{var r;let s=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(s){let a=s.getComputedLeft(),n=s.getComputedTop();e=` -`.repeat(n)+lht.default(e,a)}return e},f1e=(t,e,r)=>{var s;let{offsetX:a=0,offsetY:n=0,transformers:c=[],skipStaticElements:f}=r;if(f&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===oht.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),E=n+p.getComputedTop(),C=c;if(typeof t.internal_transform=="function"&&(C=[t.internal_transform,...c]),t.nodeName==="ink-text"){let S=fht.default(t);if(S.length>0){let b=aht.default(S),I=uht.default(p);if(b>I){let T=(s=t.style.textWrap)!==null&&s!==void 0?s:"wrap";S=cht.default(S,I,T)}S=pht(t,S),e.write(h,E,S,{transformers:C})}return}if(t.nodeName==="ink-box"&&Aht.default(h,E,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let S of t.childNodes)f1e(S,e,{offsetX:h,offsetY:E,transformers:C,skipStaticElements:f})}};eD.default=f1e});var g1e=_(tD=>{"use strict";var h1e=tD&&tD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(tD,"__esModule",{value:!0});var p1e=h1e(X9()),hht=h1e(GS()),aW=class{constructor(e){this.writes=[];let{width:r,height:s}=e;this.width=r,this.height=s}write(e,r,s,a){let{transformers:n}=a;s&&this.writes.push({x:e,y:r,text:s,transformers:n})}get(){let e=[];for(let s=0;ss.trimRight()).join(` -`),height:e.length}}};tD.default=aW});var y1e=_(rD=>{"use strict";var lW=rD&&rD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(rD,"__esModule",{value:!0});var ght=lW(Fm()),d1e=lW(A1e()),m1e=lW(g1e());rD.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,ght.default.DIRECTION_LTR);let s=new m1e.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});d1e.default(t,s,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new m1e.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),d1e.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:c}=s.get();return{output:n,outputHeight:c,staticOutput:a?`${a.get().output} -`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var w1e=_((TKt,C1e)=>{"use strict";var E1e=Ie("stream"),I1e=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],cW={},dht=t=>{let e=new E1e.PassThrough,r=new E1e.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let s=new console.Console(e,r);for(let a of I1e)cW[a]=console[a],console[a]=s[a];return()=>{for(let a of I1e)console[a]=cW[a];cW={}}};C1e.exports=dht});var fW=_(uW=>{"use strict";Object.defineProperty(uW,"__esModule",{value:!0});uW.default=new WeakMap});var pW=_(AW=>{"use strict";Object.defineProperty(AW,"__esModule",{value:!0});var mht=hn(),B1e=mht.createContext({exit:()=>{}});B1e.displayName="InternalAppContext";AW.default=B1e});var gW=_(hW=>{"use strict";Object.defineProperty(hW,"__esModule",{value:!0});var yht=hn(),v1e=yht.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});v1e.displayName="InternalStdinContext";hW.default=v1e});var mW=_(dW=>{"use strict";Object.defineProperty(dW,"__esModule",{value:!0});var Eht=hn(),S1e=Eht.createContext({stdout:void 0,write:()=>{}});S1e.displayName="InternalStdoutContext";dW.default=S1e});var EW=_(yW=>{"use strict";Object.defineProperty(yW,"__esModule",{value:!0});var Iht=hn(),D1e=Iht.createContext({stderr:void 0,write:()=>{}});D1e.displayName="InternalStderrContext";yW.default=D1e});var UF=_(IW=>{"use strict";Object.defineProperty(IW,"__esModule",{value:!0});var Cht=hn(),P1e=Cht.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{},focus:()=>{}});P1e.displayName="InternalFocusContext";IW.default=P1e});var x1e=_((_Kt,b1e)=>{"use strict";var wht=/[|\\{}()[\]^$+*?.-]/g;b1e.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(wht,"\\$&")}});var T1e=_((HKt,R1e)=>{"use strict";var Bht=x1e(),vht=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",Q1e=[].concat(Ie("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));Q1e.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var CW=class t{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=t.nodeInternals()),"cwd"in e||(e.cwd=vht),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,Sht(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...Q1e]}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 s=!1,a=null,n=[];return e.forEach(c=>{if(c=c.replace(/\\/g,"/"),this._internals.some(p=>p.test(c)))return;let f=/^\s*at /.test(c);s?c=c.trimEnd().replace(/^(\s+)at /,"$1"):(c=c.trim(),f&&(c=c.slice(3))),c=c.replace(`${this._cwd}/`,""),c&&(f?(a&&(n.push(a),a=null),n.push(c)):(s=!0,a=c))}),n.map(c=>`${r}${c} -`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:s}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=s,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:s,stackTraceLimit:a}=Error;Error.prepareStackTrace=(f,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:c}=n;return Object.assign(Error,{prepareStackTrace:s,stackTraceLimit:a}),c}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let s={line:r.getLineNumber(),column:r.getColumnNumber()};k1e(s,r.getFileName(),this._cwd),r.isConstructor()&&(s.constructor=!0),r.isEval()&&(s.evalOrigin=r.getEvalOrigin()),r.isNative()&&(s.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(s.type=a);let n=r.getFunctionName();n&&(s.function=n);let c=r.getMethodName();return c&&n!==c&&(s.method=c),s}parseLine(e){let r=e&&e.match(Dht);if(!r)return null;let s=r[1]==="new",a=r[2],n=r[3],c=r[4],f=Number(r[5]),p=Number(r[6]),h=r[7],E=r[8],C=r[9],S=r[10]==="native",b=r[11]===")",I,T={};if(E&&(T.line=Number(E)),C&&(T.column=Number(C)),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 W=h.slice(0,U-1);h=h.slice(U+1),a+=` (${W}`;break}}if(a){let N=a.match(Pht);N&&(a=N[1],I=N[2])}return k1e(T,h,this._cwd),s&&(T.constructor=!0),n&&(T.evalOrigin=n,T.evalLine=f,T.evalColumn=p,T.evalFile=c&&c.replace(/\\/g,"/")),S&&(T.native=!0),a&&(T.function=a),I&&a!==I&&(T.method=I),T}};function k1e(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function Sht(t){if(t.length===0)return[];let e=t.map(r=>Bht(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var Dht=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),Pht=/^(.*?) \[as (.*?)\]$/;R1e.exports=CW});var N1e=_((jKt,F1e)=>{"use strict";F1e.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var L1e=_((GKt,O1e)=>{"use strict";var bht=N1e(),xht=(t,e)=>{let r=[],s=t-e,a=t+e;for(let n=s;n<=a;n++)r.push(n);return r};O1e.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=bht(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},xht(e,r.around).filter(s=>t[s-1]!==void 0).map(s=>({line:s,value:t[s-1]}))}});var _F=_(rf=>{"use strict";var kht=rf&&rf.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),Qht=rf&&rf.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),Rht=rf&&rf.__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)&&kht(e,t,r);return Qht(e,t),e},Tht=rf&&rf.__rest||function(t,e){var r={};for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&e.indexOf(s)<0&&(r[s]=t[s]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,s=Object.getOwnPropertySymbols(t);a{var{children:r}=t,s=Tht(t,["children"]);let a=Object.assign(Object.assign({},s),{marginLeft:s.marginLeft||s.marginX||s.margin||0,marginRight:s.marginRight||s.marginX||s.margin||0,marginTop:s.marginTop||s.marginY||s.margin||0,marginBottom:s.marginBottom||s.marginY||s.margin||0,paddingLeft:s.paddingLeft||s.paddingX||s.padding||0,paddingRight:s.paddingRight||s.paddingX||s.padding||0,paddingTop:s.paddingTop||s.paddingY||s.padding||0,paddingBottom:s.paddingBottom||s.paddingY||s.padding||0});return M1e.default.createElement("ink-box",{ref:e,style:a},r)});wW.displayName="Box";wW.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};rf.default=wW});var SW=_(nD=>{"use strict";var BW=nD&&nD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nD,"__esModule",{value:!0});var Fht=BW(hn()),yw=BW(RE()),U1e=BW(sW()),vW=({color:t,backgroundColor:e,dimColor:r,bold:s,italic:a,underline:n,strikethrough:c,inverse:f,wrap:p,children:h})=>{if(h==null)return null;let E=C=>(r&&(C=yw.default.dim(C)),t&&(C=U1e.default(C,t,"foreground")),e&&(C=U1e.default(C,e,"background")),s&&(C=yw.default.bold(C)),a&&(C=yw.default.italic(C)),n&&(C=yw.default.underline(C)),c&&(C=yw.default.strikethrough(C)),f&&(C=yw.default.inverse(C)),C);return Fht.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:E},h)};vW.displayName="Text";vW.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};nD.default=vW});var G1e=_(nf=>{"use strict";var Nht=nf&&nf.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),Oht=nf&&nf.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),Lht=nf&&nf.__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)&&Nht(e,t,r);return Oht(e,t),e},iD=nf&&nf.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nf,"__esModule",{value:!0});var _1e=Lht(Ie("fs")),Qs=iD(hn()),H1e=iD(T1e()),Mht=iD(L1e()),$p=iD(_F()),AA=iD(SW()),j1e=new H1e.default({cwd:process.cwd(),internals:H1e.default.nodeInternals()}),Uht=({error:t})=>{let e=t.stack?t.stack.split(` -`).slice(1):void 0,r=e?j1e.parseLine(e[0]):void 0,s,a=0;if(r?.file&&r?.line&&_1e.existsSync(r.file)){let n=_1e.readFileSync(r.file,"utf8");if(s=Mht.default(n,r.line),s)for(let{line:c}of s)a=Math.max(a,String(c).length)}return Qs.default.createElement($p.default,{flexDirection:"column",padding:1},Qs.default.createElement($p.default,null,Qs.default.createElement(AA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),Qs.default.createElement(AA.default,null," ",t.message)),r&&Qs.default.createElement($p.default,{marginTop:1},Qs.default.createElement(AA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&s&&Qs.default.createElement($p.default,{marginTop:1,flexDirection:"column"},s.map(({line:n,value:c})=>Qs.default.createElement($p.default,{key:n},Qs.default.createElement($p.default,{width:a+1},Qs.default.createElement(AA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),Qs.default.createElement(AA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+c)))),t.stack&&Qs.default.createElement($p.default,{marginTop:1,flexDirection:"column"},t.stack.split(` -`).slice(1).map(n=>{let c=j1e.parseLine(n);return c?Qs.default.createElement($p.default,{key:n},Qs.default.createElement(AA.default,{dimColor:!0},"- "),Qs.default.createElement(AA.default,{dimColor:!0,bold:!0},c.function),Qs.default.createElement(AA.default,{dimColor:!0,color:"gray"}," ","(",c.file,":",c.line,":",c.column,")")):Qs.default.createElement($p.default,{key:n},Qs.default.createElement(AA.default,{dimColor:!0},"- "),Qs.default.createElement(AA.default,{dimColor:!0,bold:!0},n))})))};nf.default=Uht});var W1e=_(sf=>{"use strict";var _ht=sf&&sf.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),Hht=sf&&sf.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),jht=sf&&sf.__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)&&_ht(e,t,r);return Hht(e,t),e},Lm=sf&&sf.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(sf,"__esModule",{value:!0});var Om=jht(hn()),q1e=Lm(P9()),Ght=Lm(pW()),qht=Lm(gW()),Wht=Lm(mW()),Yht=Lm(EW()),Vht=Lm(UF()),Jht=Lm(G1e()),Kht=" ",zht="\x1B[Z",Zht="\x1B",HF=class extends Om.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===Zht&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===Kht&&this.focusNext(),e===zht&&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 s=(r=e.focusables[0])===null||r===void 0?void 0:r.id;return{activeFocusId:this.findNextFocusable(e)||s}})},this.focusPrevious=()=>{this.setState(e=>{var r;let s=(r=e.focusables[e.focusables.length-1])===null||r===void 0?void 0:r.id;return{activeFocusId:this.findPreviousFocusable(e)||s}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(s=>{let a=s.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...s.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(s=>s.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(s=>s.id!==e?s:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(s=>s.id!==e?s:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{var r;let s=e.focusables.findIndex(a=>a.id===e.activeFocusId);for(let a=s+1;a{var r;let s=e.focusables.findIndex(a=>a.id===e.activeFocusId);for(let a=s-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 Om.default.createElement(Ght.default.Provider,{value:{exit:this.handleExit}},Om.default.createElement(qht.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},Om.default.createElement(Wht.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},Om.default.createElement(Yht.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},Om.default.createElement(Vht.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?Om.default.createElement(Jht.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){q1e.default.hide(this.props.stdout)}componentWillUnmount(){q1e.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};sf.default=HF;HF.displayName="InternalApp"});var J1e=_(of=>{"use strict";var Xht=of&&of.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),$ht=of&&of.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),e0t=of&&of.__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)&&Xht(e,t,r);return $ht(e,t),e},af=of&&of.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(of,"__esModule",{value:!0});var t0t=af(hn()),Y1e=_Ce(),r0t=af(rwe()),n0t=af(w9()),i0t=af(lwe()),s0t=af(uwe()),DW=af(r1e()),o0t=af(y1e()),a0t=af(D9()),l0t=af(w1e()),c0t=e0t(nW()),u0t=af(fW()),f0t=af(W1e()),Ew=process.env.CI==="false"?!1:i0t.default,V1e=()=>{},PW=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:s,staticOutput:a}=o0t.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(Ew){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),s>=this.options.stdout.rows){this.options.stdout.write(n0t.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},s0t.default(this),this.options=e,this.rootNode=c0t.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:Y1e(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=r0t.default.create(e.stdout),this.throttledLog=e.debug?this.log:Y1e(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=DW.default.createContainer(this.rootNode,0,!1,null),this.unsubscribeExit=a0t.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),Ew||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=t0t.default.createElement(f0t.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);DW.default.updateContainer(r,this.container,null,V1e)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(Ew){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(Ew){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(),Ew?this.options.stdout.write(this.lastOutput+` -`):this.options.debug||this.log.done(),this.isUnmounted=!0,DW.default.updateContainer(null,this.container,null,V1e),u0t.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(){!Ew&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=l0t.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};of.default=PW});var z1e=_(sD=>{"use strict";var K1e=sD&&sD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(sD,"__esModule",{value:!0});var A0t=K1e(J1e()),jF=K1e(fW()),p0t=Ie("stream"),h0t=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},g0t(e)),s=d0t(r.stdout,()=>new A0t.default(r));return s.render(t),{rerender:s.render,unmount:()=>s.unmount(),waitUntilExit:s.waitUntilExit,cleanup:()=>jF.default.delete(r.stdout),clear:s.clear}};sD.default=h0t;var g0t=(t={})=>t instanceof p0t.Stream?{stdout:t,stdin:process.stdin}:t,d0t=(t,e)=>{let r;return jF.default.has(t)?r=jF.default.get(t):(r=e(),jF.default.set(t,r)),r}});var X1e=_(eh=>{"use strict";var m0t=eh&&eh.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),y0t=eh&&eh.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),E0t=eh&&eh.__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)&&m0t(e,t,r);return y0t(e,t),e};Object.defineProperty(eh,"__esModule",{value:!0});var oD=E0t(hn()),Z1e=t=>{let{items:e,children:r,style:s}=t,[a,n]=oD.useState(0),c=oD.useMemo(()=>e.slice(a),[e,a]);oD.useLayoutEffect(()=>{n(e.length)},[e.length]);let f=c.map((h,E)=>r(h,a+E)),p=oD.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},s),[s]);return oD.default.createElement("ink-box",{internal_static:!0,style:p},f)};Z1e.displayName="Static";eh.default=Z1e});var e2e=_(aD=>{"use strict";var I0t=aD&&aD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(aD,"__esModule",{value:!0});var C0t=I0t(hn()),$1e=({children:t,transform:e})=>t==null?null:C0t.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);$1e.displayName="Transform";aD.default=$1e});var r2e=_(lD=>{"use strict";var w0t=lD&&lD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(lD,"__esModule",{value:!0});var B0t=w0t(hn()),t2e=({count:t=1})=>B0t.default.createElement("ink-text",null,` -`.repeat(t));t2e.displayName="Newline";lD.default=t2e});var s2e=_(cD=>{"use strict";var n2e=cD&&cD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(cD,"__esModule",{value:!0});var v0t=n2e(hn()),S0t=n2e(_F()),i2e=()=>v0t.default.createElement(S0t.default,{flexGrow:1});i2e.displayName="Spacer";cD.default=i2e});var GF=_(uD=>{"use strict";var D0t=uD&&uD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(uD,"__esModule",{value:!0});var P0t=hn(),b0t=D0t(gW()),x0t=()=>P0t.useContext(b0t.default);uD.default=x0t});var a2e=_(fD=>{"use strict";var k0t=fD&&fD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(fD,"__esModule",{value:!0});var o2e=hn(),Q0t=k0t(GF()),R0t=(t,e={})=>{let{stdin:r,setRawMode:s,internal_exitOnCtrlC:a}=Q0t.default();o2e.useEffect(()=>{if(e.isActive!==!1)return s(!0),()=>{s(!1)}},[e.isActive,s]),o2e.useEffect(()=>{if(e.isActive===!1)return;let n=c=>{let f=String(c),p={upArrow:f==="\x1B[A",downArrow:f==="\x1B[B",leftArrow:f==="\x1B[D",rightArrow:f==="\x1B[C",pageDown:f==="\x1B[6~",pageUp:f==="\x1B[5~",return:f==="\r",escape:f==="\x1B",ctrl:!1,shift:!1,tab:f===" "||f==="\x1B[Z",backspace:f==="\b",delete:f==="\x7F"||f==="\x1B[3~",meta:!1};f<=""&&!p.return&&(f=String.fromCharCode(f.charCodeAt(0)+97-1),p.ctrl=!0),f.startsWith("\x1B")&&(f=f.slice(1),p.meta=!0);let h=f>="A"&&f<="Z",E=f>="\u0410"&&f<="\u042F";f.length===1&&(h||E)&&(p.shift=!0),p.tab&&f==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(f=""),(!(f==="c"&&p.ctrl)||!a)&&t(f,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};fD.default=R0t});var l2e=_(AD=>{"use strict";var T0t=AD&&AD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(AD,"__esModule",{value:!0});var F0t=hn(),N0t=T0t(pW()),O0t=()=>F0t.useContext(N0t.default);AD.default=O0t});var c2e=_(pD=>{"use strict";var L0t=pD&&pD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pD,"__esModule",{value:!0});var M0t=hn(),U0t=L0t(mW()),_0t=()=>M0t.useContext(U0t.default);pD.default=_0t});var u2e=_(hD=>{"use strict";var H0t=hD&&hD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(hD,"__esModule",{value:!0});var j0t=hn(),G0t=H0t(EW()),q0t=()=>j0t.useContext(G0t.default);hD.default=q0t});var A2e=_(dD=>{"use strict";var f2e=dD&&dD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(dD,"__esModule",{value:!0});var gD=hn(),W0t=f2e(UF()),Y0t=f2e(GF()),V0t=({isActive:t=!0,autoFocus:e=!1,id:r}={})=>{let{isRawModeSupported:s,setRawMode:a}=Y0t.default(),{activeId:n,add:c,remove:f,activate:p,deactivate:h,focus:E}=gD.useContext(W0t.default),C=gD.useMemo(()=>r??Math.random().toString().slice(2,7),[r]);return gD.useEffect(()=>(c(C,{autoFocus:e}),()=>{f(C)}),[C,e]),gD.useEffect(()=>{t?p(C):h(C)},[t,C]),gD.useEffect(()=>{if(!(!s||!t))return a(!0),()=>{a(!1)}},[t]),{isFocused:!!C&&n===C,focus:E}};dD.default=V0t});var p2e=_(mD=>{"use strict";var J0t=mD&&mD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(mD,"__esModule",{value:!0});var K0t=hn(),z0t=J0t(UF()),Z0t=()=>{let t=K0t.useContext(z0t.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious,focus:t.focus}};mD.default=Z0t});var h2e=_(bW=>{"use strict";Object.defineProperty(bW,"__esModule",{value:!0});bW.default=t=>{var e,r,s,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(s=t.yogaNode)===null||s===void 0?void 0:s.getComputedHeight())!==null&&a!==void 0?a:0}}});var Wc=_(mo=>{"use strict";Object.defineProperty(mo,"__esModule",{value:!0});var X0t=z1e();Object.defineProperty(mo,"render",{enumerable:!0,get:function(){return X0t.default}});var $0t=_F();Object.defineProperty(mo,"Box",{enumerable:!0,get:function(){return $0t.default}});var egt=SW();Object.defineProperty(mo,"Text",{enumerable:!0,get:function(){return egt.default}});var tgt=X1e();Object.defineProperty(mo,"Static",{enumerable:!0,get:function(){return tgt.default}});var rgt=e2e();Object.defineProperty(mo,"Transform",{enumerable:!0,get:function(){return rgt.default}});var ngt=r2e();Object.defineProperty(mo,"Newline",{enumerable:!0,get:function(){return ngt.default}});var igt=s2e();Object.defineProperty(mo,"Spacer",{enumerable:!0,get:function(){return igt.default}});var sgt=a2e();Object.defineProperty(mo,"useInput",{enumerable:!0,get:function(){return sgt.default}});var ogt=l2e();Object.defineProperty(mo,"useApp",{enumerable:!0,get:function(){return ogt.default}});var agt=GF();Object.defineProperty(mo,"useStdin",{enumerable:!0,get:function(){return agt.default}});var lgt=c2e();Object.defineProperty(mo,"useStdout",{enumerable:!0,get:function(){return lgt.default}});var cgt=u2e();Object.defineProperty(mo,"useStderr",{enumerable:!0,get:function(){return cgt.default}});var ugt=A2e();Object.defineProperty(mo,"useFocus",{enumerable:!0,get:function(){return ugt.default}});var fgt=p2e();Object.defineProperty(mo,"useFocusManager",{enumerable:!0,get:function(){return fgt.default}});var Agt=h2e();Object.defineProperty(mo,"measureElement",{enumerable:!0,get:function(){return Agt.default}})});var kW={};Vt(kW,{Gem:()=>xW});var g2e,Mm,xW,qF=Ze(()=>{g2e=ut(Wc()),Mm=ut(hn()),xW=(0,Mm.memo)(({active:t})=>{let e=(0,Mm.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,Mm.useMemo)(()=>t?"green":"yellow",[t]);return Mm.default.createElement(g2e.Text,{color:r},e)})});var m2e={};Vt(m2e,{useKeypress:()=>Um});function Um({active:t},e,r){let{stdin:s}=(0,d2e.useStdin)(),a=(0,WF.useCallback)((n,c)=>e(n,c),r);(0,WF.useEffect)(()=>{if(!(!t||!s))return s.on("keypress",a),()=>{s.off("keypress",a)}},[t,a,s])}var d2e,WF,yD=Ze(()=>{d2e=ut(Wc()),WF=ut(hn())});var E2e={};Vt(E2e,{FocusRequest:()=>y2e,useFocusRequest:()=>QW});var y2e,QW,RW=Ze(()=>{yD();y2e=(r=>(r.BEFORE="before",r.AFTER="after",r))(y2e||{}),QW=function({active:t},e,r){Um({active:t},(s,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var I2e={};Vt(I2e,{useListInput:()=>ED});var ED,YF=Ze(()=>{yD();ED=function(t,e,{active:r,minus:s,plus:a,set:n,loop:c=!0}){Um({active:r},(f,p)=>{let h=e.indexOf(t);switch(p.name){case s:{let E=h-1;if(c){n(e[(e.length+E)%e.length]);return}if(E<0)return;n(e[E])}break;case a:{let E=h+1;if(c){n(e[E%e.length]);return}if(E>=e.length)return;n(e[E])}break}},[e,t,a,n,c])}});var VF={};Vt(VF,{ScrollableItems:()=>pgt});var eg,dl,pgt,JF=Ze(()=>{eg=ut(Wc()),dl=ut(hn());RW();YF();pgt=({active:t=!0,children:e=[],radius:r=10,size:s=1,loop:a=!0,onFocusRequest:n,willReachEnd:c})=>{let f=N=>{if(N.key===null)throw new Error("Expected all children to have a key");return N.key},p=dl.default.Children.map(e,N=>f(N)),h=p[0],[E,C]=(0,dl.useState)(h),S=p.indexOf(E);(0,dl.useEffect)(()=>{p.includes(E)||C(h)},[e]),(0,dl.useEffect)(()=>{c&&S>=p.length-2&&c()},[S]),QW({active:t&&!!n},N=>{n?.(N)},[n]),ED(E,p,{active:t,minus:"up",plus:"down",set:C,loop:a});let b=S-r,I=S+r;I>p.length&&(b-=I-p.length,I=p.length),b<0&&(I+=-b,b=0),I>=p.length&&(I=p.length-1);let T=[];for(let N=b;N<=I;++N){let U=p[N],W=t&&U===E;T.push(dl.default.createElement(eg.Box,{key:U,height:s},dl.default.createElement(eg.Box,{marginLeft:1,marginRight:1},dl.default.createElement(eg.Text,null,W?dl.default.createElement(eg.Text,{color:"cyan",bold:!0},">"):" ")),dl.default.createElement(eg.Box,null,dl.default.cloneElement(e[N],{active:W}))))}return dl.default.createElement(eg.Box,{flexDirection:"column",width:"100%"},T)}});var C2e,th,w2e,TW,B2e,FW=Ze(()=>{C2e=ut(Wc()),th=ut(hn()),w2e=Ie("readline"),TW=th.default.createContext(null),B2e=({children:t})=>{let{stdin:e,setRawMode:r}=(0,C2e.useStdin)();(0,th.useEffect)(()=>{r&&r(!0),e&&(0,w2e.emitKeypressEvents)(e)},[e,r]);let[s,a]=(0,th.useState)(new Map),n=(0,th.useMemo)(()=>({getAll:()=>s,get:c=>s.get(c),set:(c,f)=>a(new Map([...s,[c,f]]))}),[s,a]);return th.default.createElement(TW.Provider,{value:n,children:t})}});var NW={};Vt(NW,{useMinistore:()=>hgt});function hgt(t,e){let r=(0,KF.useContext)(TW);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let s=(0,KF.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,s]}var KF,OW=Ze(()=>{KF=ut(hn());FW()});var ZF={};Vt(ZF,{renderForm:()=>ggt});async function ggt(t,e,{stdin:r,stdout:s,stderr:a}){let n,c=p=>{let{exit:h}=(0,zF.useApp)();Um({active:!0},(E,C)=>{C.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:f}=(0,zF.render)(LW.default.createElement(B2e,null,LW.default.createElement(t,{...e,useSubmit:c})),{stdin:r,stdout:s,stderr:a});return await f(),n}var zF,LW,XF=Ze(()=>{zF=ut(Wc()),LW=ut(hn());FW();yD()});var P2e=_(ID=>{"use strict";Object.defineProperty(ID,"__esModule",{value:!0});ID.UncontrolledTextInput=void 0;var S2e=hn(),MW=hn(),v2e=Wc(),_m=RE(),D2e=({value:t,placeholder:e="",focus:r=!0,mask:s,highlightPastedText:a=!1,showCursor:n=!0,onChange:c,onSubmit:f})=>{let[{cursorOffset:p,cursorWidth:h},E]=MW.useState({cursorOffset:(t||"").length,cursorWidth:0});MW.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 C=a?h:0,S=s?s.repeat(t.length):t,b=S,I=e?_m.grey(e):void 0;if(n&&r){I=e.length>0?_m.inverse(e[0])+_m.grey(e.slice(1)):_m.inverse(" "),b=S.length>0?"":_m.inverse(" ");let T=0;for(let N of S)T>=p-C&&T<=p?b+=_m.inverse(N):b+=N,T++;S.length>0&&p===S.length&&(b+=_m.inverse(" "))}return v2e.useInput((T,N)=>{if(N.upArrow||N.downArrow||N.ctrl&&T==="c"||N.tab||N.shift&&N.tab)return;if(N.return){f&&f(t);return}let U=p,W=t,ee=0;N.leftArrow?n&&U--:N.rightArrow?n&&U++:N.backspace||N.delete?p>0&&(W=t.slice(0,p-1)+t.slice(p,t.length),U--):(W=t.slice(0,p)+T+t.slice(p,t.length),U+=T.length,T.length>1&&(ee=T.length)),p<0&&(U=0),p>t.length&&(U=t.length),E({cursorOffset:U,cursorWidth:ee}),W!==t&&c(W)},{isActive:r}),S2e.createElement(v2e.Text,null,e?S.length>0?b:I:b)};ID.default=D2e;ID.UncontrolledTextInput=({initialValue:t="",...e})=>{let[r,s]=MW.useState(t);return S2e.createElement(D2e,Object.assign({},e,{value:r,onChange:s}))}});var k2e={};Vt(k2e,{Pad:()=>UW});var b2e,x2e,UW,_W=Ze(()=>{b2e=ut(Wc()),x2e=ut(hn()),UW=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return x2e.default.createElement(b2e.Text,{dimColor:!e},r)}});var Q2e={};Vt(Q2e,{ItemOptions:()=>dgt});var wD,tg,dgt,R2e=Ze(()=>{wD=ut(Wc()),tg=ut(hn());YF();qF();_W();dgt=function({active:t,skewer:e,options:r,value:s,onChange:a,sizes:n=[]}){let c=r.filter(({label:p})=>!!p).map(({value:p})=>p),f=r.findIndex(p=>p.value===s&&p.label!="");return ED(s,c,{active:t,minus:"left",plus:"right",set:a}),tg.default.createElement(tg.default.Fragment,null,r.map(({label:p},h)=>{let E=h===f,C=n[h]-1||0,S=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),b=Math.max(0,C-S.length-2);return p?tg.default.createElement(wD.Box,{key:p,width:C,marginLeft:1},tg.default.createElement(wD.Text,{wrap:"truncate"},tg.default.createElement(xW,{active:E})," ",p),e?tg.default.createElement(UW,{active:t,length:b}):null):tg.default.createElement(wD.Box,{key:`spacer-${h}`,width:C,marginLeft:1})}))}});var V2e=_((VZt,Y2e)=>{var ZW;Y2e.exports=()=>(typeof ZW>"u"&&(ZW=Ie("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),ZW)});var hBe=_((yXt,pBe)=>{var oY=Symbol("arg flag"),Yc=class t extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,t.prototype)}};function UD(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:s=!1}={}){if(!t)throw new Yc("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},c={};for(let f of Object.keys(t)){if(!f)throw new Yc("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(f[0]!=="-")throw new Yc(`argument key must start with '-' but found: '${f}'`,"ARG_CONFIG_NONOPT_KEY");if(f.length===1)throw new Yc(`argument key must have a name; singular '-' keys are not allowed: ${f}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[f]=="string"){n[f]=t[f];continue}let p=t[f],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[E]=p;p=(C,S,b=[])=>(b.push(E(C,S,b[b.length-1])),b),h=E===Boolean||E[oY]===!0}else if(typeof p=="function")h=p===Boolean||p[oY]===!0;else throw new Yc(`type missing or not a function or valid array type: ${f}`,"ARG_CONFIG_VAD_TYPE");if(f[1]!=="-"&&f.length>2)throw new Yc(`short argument keys (with a single hyphen) must have only one character: ${f}`,"ARG_CONFIG_SHORTOPT_TOOLONG");c[f]=[p,h]}for(let f=0,p=e.length;f0){a._=a._.concat(e.slice(f));break}if(h==="--"){a._=a._.concat(e.slice(f+1));break}if(h.length>1&&h[0]==="-"){let E=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(C=>`-${C}`);for(let C=0;C1&&e[f+1][0]==="-"&&!(e[f+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(N===Number||typeof BigInt<"u"&&N===BigInt))){let W=b===T?"":` (alias for ${T})`;throw new Yc(`option requires argument: ${b}${W}`,"ARG_MISSING_REQUIRED_LONGARG")}a[T]=N(e[f+1],T,a[T]),++f}else a[T]=N(I,T,a[T])}}else a._.push(h)}return a}UD.flag=t=>(t[oY]=!0,t);UD.COUNT=UD.flag((t,e,r)=>(r||0)+1);UD.ArgError=Yc;pBe.exports=UD});var wBe=_((JXt,CBe)=>{var uY;CBe.exports=()=>(typeof uY>"u"&&(uY=Ie("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),uY)});var PBe=_((dY,mY)=>{(function(t){dY&&typeof dY=="object"&&typeof mY<"u"?mY.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 QBe=_((Y$t,kBe)=>{"use strict";yY.ifExists=mdt;var Dw=Ie("util"),Vc=Ie("path"),bBe=PBe(),hdt=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,gdt={createPwshFile:!0,createCmdFile:bBe(),fs:Ie("fs")},ddt=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function xBe(t){let e={...gdt,...t},r=e.fs;return e.fs_={chmod:r.chmod?Dw.promisify(r.chmod):async()=>{},mkdir:Dw.promisify(r.mkdir),readFile:Dw.promisify(r.readFile),stat:Dw.promisify(r.stat),unlink:Dw.promisify(r.unlink),writeFile:Dw.promisify(r.writeFile)},e}async function yY(t,e,r){let s=xBe(r);await s.fs_.stat(t),await Edt(t,e,s)}function mdt(t,e,r){return yY(t,e,r).catch(()=>{})}function ydt(t,e){return e.fs_.unlink(t).catch(()=>{})}async function Edt(t,e,r){let s=await vdt(t,r);return await Idt(e,r),Cdt(t,e,s,r)}function Idt(t,e){return e.fs_.mkdir(Vc.dirname(t),{recursive:!0})}function Cdt(t,e,r,s){let a=xBe(s),n=[{generator:Pdt,extension:""}];return a.createCmdFile&&n.push({generator:Ddt,extension:".cmd"}),a.createPwshFile&&n.push({generator:bdt,extension:".ps1"}),Promise.all(n.map(c=>Sdt(t,e+c.extension,r,c.generator,a)))}function wdt(t,e){return ydt(t,e)}function Bdt(t,e){return xdt(t,e)}async function vdt(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(hdt);if(!a){let n=Vc.extname(t).toLowerCase();return{program:ddt.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function Sdt(t,e,r,s,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",c=[r.additionalArgs,n].filter(f=>f).join(" ");return a=Object.assign({},a,{prog:r.program,args:c}),await wdt(e,a),await a.fs_.writeFile(e,s(t,e,a),"utf8"),Bdt(e,a)}function Ddt(t,e,r){let a=Vc.relative(Vc.dirname(e),t).split("/").join("\\"),n=Vc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,c,f=r.prog,p=r.args||"",h=EY(r.nodePath).win32;f?(c=`"%~dp0\\${f}.exe"`,a=n):(f=n,p="",a="");let E=r.progArgs?`${r.progArgs.join(" ")} `:"",C=h?`@SET NODE_PATH=${h}\r -`:"";return c?C+=`@IF EXIST ${c} (\r - ${c} ${p} ${a} ${E}%*\r -) ELSE (\r - @SETLOCAL\r - @SET PATHEXT=%PATHEXT:;.JS;=;%\r - ${f} ${p} ${a} ${E}%*\r -)\r -`:C+=`@${f} ${p} ${a} ${E}%*\r -`,C}function Pdt(t,e,r){let s=Vc.relative(Vc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;s=s.split("\\").join("/");let c=Vc.isAbsolute(s)?`"${s}"`:`"$basedir/${s}"`,f=r.args||"",p=EY(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,s=c):(a=c,f="",s="");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 - -`,C=r.nodePath?`export NODE_PATH="${p}" -`:"";return n?E+=`${C}if [ -x ${n} ]; then - exec ${n} ${f} ${s} ${h}"$@" -else - exec ${a} ${f} ${s} ${h}"$@" -fi -`:E+=`${C}${a} ${f} ${s} ${h}"$@" -exit $? -`,E}function bdt(t,e,r){let s=Vc.relative(Vc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,c;s=s.split("\\").join("/");let f=Vc.isAbsolute(s)?`"${s}"`:`"$basedir/${s}"`,p=r.args||"",h=EY(r.nodePath),E=h.win32,C=h.posix;n?(c=`"$basedir/${r.prog}$exe"`,s=f):(n=f,p="",s="");let S=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="${C}" -}`),c?b+=` -$ret=0 -if (Test-Path ${c}) { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & ${c} ${p} ${s} ${S}$args - } else { - & ${c} ${p} ${s} ${S}$args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & ${n} ${p} ${s} ${S}$args - } else { - & ${n} ${p} ${s} ${S}$args - } - $ret=$LASTEXITCODE -} -${r.nodePath?`$env:NODE_PATH=$env_node_path -`:""}exit $ret -`:b+=` -# Support pipeline input -if ($MyInvocation.ExpectingInput) { - $input | & ${n} ${p} ${s} ${S}$args -} else { - & ${n} ${p} ${s} ${S}$args -} -${r.nodePath?`$env:NODE_PATH=$env_node_path -`:""}exit $LASTEXITCODE -`,b}function xdt(t,e){return e.fs_.chmod(t,493)}function EY(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(Vc.delimiter):Array.from(t),r={};for(let s=0;s`/mnt/${f.toLowerCase()}`):e[s];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[s]={win32:a,posix:n}}return r}kBe.exports=yY});var TY=_((Ctr,zBe)=>{zBe.exports=Ie("stream")});var eve=_((wtr,$Be)=>{"use strict";function ZBe(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e&&(s=s.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,s)}return r}function cmt(t){for(var e=1;e0?this.tail.next=s:this.head=s,this.tail=s,++this.length}},{key:"unshift",value:function(r){var s={data:r,next:this.head};this.length===0&&(this.tail=s),this.head=s,++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 s=this.head,a=""+s.data;s=s.next;)a+=r+s.data;return a}},{key:"concat",value:function(r){if(this.length===0)return AN.alloc(0);for(var s=AN.allocUnsafe(r>>>0),a=this.head,n=0;a;)dmt(a.data,s,n),n+=a.data.length,a=a.next;return s}},{key:"consume",value:function(r,s){var a;return rc.length?c.length:r;if(f===c.length?n+=c:n+=c.slice(0,r),r-=f,r===0){f===c.length?(++a,s.next?this.head=s.next:this.head=this.tail=null):(this.head=s,s.data=c.slice(f));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var s=AN.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(s),r-=a.data.length;a=a.next;){var c=a.data,f=r>c.length?c.length:r;if(c.copy(s,s.length-r,0,f),r-=f,r===0){f===c.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=c.slice(f));break}++n}return this.length-=n,s}},{key:gmt,value:function(r,s){return FY(this,cmt({},s,{depth:0,customInspect:!1}))}}]),t}()});var OY=_((Btr,rve)=>{"use strict";function mmt(t,e){var r=this,s=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return s||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(NY,this,t)):process.nextTick(NY,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(pN,r):(r._writableState.errorEmitted=!0,process.nextTick(tve,r,n)):process.nextTick(tve,r,n):e?(process.nextTick(pN,r),e(n)):process.nextTick(pN,r)}),this)}function tve(t,e){NY(t,e),pN(t)}function pN(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function ymt(){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 NY(t,e){t.emit("error",e)}function Emt(t,e){var r=t._readableState,s=t._writableState;r&&r.autoDestroy||s&&s.autoDestroy?t.destroy(e):t.emit("error",e)}rve.exports={destroy:mmt,undestroy:ymt,errorOrDestroy:Emt}});var lg=_((vtr,sve)=>{"use strict";var ive={};function Kc(t,e,r){r||(r=Error);function s(n,c,f){return typeof e=="string"?e:e(n,c,f)}class a extends r{constructor(c,f,p){super(s(c,f,p))}}a.prototype.name=r.name,a.prototype.code=t,ive[t]=a}function nve(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(s=>String(s)),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 Imt(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function Cmt(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function wmt(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}Kc("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);Kc("ERR_INVALID_ARG_TYPE",function(t,e,r){let s;typeof e=="string"&&Imt(e,"not ")?(s="must not be",e=e.replace(/^not /,"")):s="must be";let a;if(Cmt(t," argument"))a=`The ${t} ${s} ${nve(e,"type")}`;else{let n=wmt(t,".")?"property":"argument";a=`The "${t}" ${n} ${s} ${nve(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);Kc("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");Kc("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});Kc("ERR_STREAM_PREMATURE_CLOSE","Premature close");Kc("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});Kc("ERR_MULTIPLE_CALLBACK","Callback called multiple times");Kc("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");Kc("ERR_STREAM_WRITE_AFTER_END","write after end");Kc("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);Kc("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);Kc("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");sve.exports.codes=ive});var LY=_((Str,ove)=>{"use strict";var Bmt=lg().codes.ERR_INVALID_OPT_VALUE;function vmt(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function Smt(t,e,r,s){var a=vmt(e,s,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=s?r:"highWaterMark";throw new Bmt(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}ove.exports={getHighWaterMark:Smt}});var ave=_((Dtr,MY)=>{typeof Object.create=="function"?MY.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:MY.exports=function(e,r){if(r){e.super_=r;var s=function(){};s.prototype=r.prototype,e.prototype=new s,e.prototype.constructor=e}}});var cg=_((Ptr,_Y)=>{try{if(UY=Ie("util"),typeof UY.inherits!="function")throw"";_Y.exports=UY.inherits}catch{_Y.exports=ave()}var UY});var cve=_((btr,lve)=>{lve.exports=Ie("util").deprecate});var GY=_((xtr,gve)=>{"use strict";gve.exports=Yi;function fve(t){var e=this;this.next=null,this.entry=null,this.finish=function(){Xmt(e,t)}}var Rw;Yi.WritableState=XD;var Dmt={deprecate:cve()},Ave=TY(),gN=Ie("buffer").Buffer,Pmt=global.Uint8Array||function(){};function bmt(t){return gN.from(t)}function xmt(t){return gN.isBuffer(t)||t instanceof Pmt}var jY=OY(),kmt=LY(),Qmt=kmt.getHighWaterMark,ug=lg().codes,Rmt=ug.ERR_INVALID_ARG_TYPE,Tmt=ug.ERR_METHOD_NOT_IMPLEMENTED,Fmt=ug.ERR_MULTIPLE_CALLBACK,Nmt=ug.ERR_STREAM_CANNOT_PIPE,Omt=ug.ERR_STREAM_DESTROYED,Lmt=ug.ERR_STREAM_NULL_VALUES,Mmt=ug.ERR_STREAM_WRITE_AFTER_END,Umt=ug.ERR_UNKNOWN_ENCODING,Tw=jY.errorOrDestroy;cg()(Yi,Ave);function _mt(){}function XD(t,e,r){Rw=Rw||Ym(),t=t||{},typeof r!="boolean"&&(r=e instanceof Rw),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=Qmt(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var s=t.decodeStrings===!1;this.decodeStrings=!s,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){Vmt(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 fve(this)}XD.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(XD.prototype,"buffer",{get:Dmt.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var hN;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(hN=Function.prototype[Symbol.hasInstance],Object.defineProperty(Yi,Symbol.hasInstance,{value:function(e){return hN.call(this,e)?!0:this!==Yi?!1:e&&e._writableState instanceof XD}})):hN=function(e){return e instanceof this};function Yi(t){Rw=Rw||Ym();var e=this instanceof Rw;if(!e&&!hN.call(Yi,this))return new Yi(t);this._writableState=new XD(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)),Ave.call(this)}Yi.prototype.pipe=function(){Tw(this,new Nmt)};function Hmt(t,e){var r=new Mmt;Tw(t,r),process.nextTick(e,r)}function jmt(t,e,r,s){var a;return r===null?a=new Lmt:typeof r!="string"&&!e.objectMode&&(a=new Rmt("chunk",["string","Buffer"],r)),a?(Tw(t,a),process.nextTick(s,a),!1):!0}Yi.prototype.write=function(t,e,r){var s=this._writableState,a=!1,n=!s.objectMode&&xmt(t);return n&&!gN.isBuffer(t)&&(t=bmt(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=s.defaultEncoding),typeof r!="function"&&(r=_mt),s.ending?Hmt(this,r):(n||jmt(this,s,t,r))&&(s.pendingcb++,a=qmt(this,s,n,t,e,r)),a};Yi.prototype.cork=function(){this._writableState.corked++};Yi.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&pve(this,t))};Yi.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 Umt(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Yi.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function Gmt(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=gN.from(e,r)),e}Object.defineProperty(Yi.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function qmt(t,e,r,s,a,n){if(!r){var c=Gmt(e,s,a);s!==c&&(r=!0,a="buffer",s=c)}var f=e.objectMode?1:s.length;e.length+=f;var p=e.length{"use strict";var $mt=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};mve.exports=dA;var dve=YY(),WY=GY();cg()(dA,dve);for(qY=$mt(WY.prototype),dN=0;dN{var yN=Ie("buffer"),ah=yN.Buffer;function yve(t,e){for(var r in t)e[r]=t[r]}ah.from&&ah.alloc&&ah.allocUnsafe&&ah.allocUnsafeSlow?Eve.exports=yN:(yve(yN,VY),VY.Buffer=Fw);function Fw(t,e,r){return ah(t,e,r)}yve(ah,Fw);Fw.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return ah(t,e,r)};Fw.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var s=ah(t);return e!==void 0?typeof r=="string"?s.fill(e,r):s.fill(e):s.fill(0),s};Fw.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return ah(t)};Fw.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return yN.SlowBuffer(t)}});var zY=_(wve=>{"use strict";var KY=Ive().Buffer,Cve=KY.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 ryt(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 nyt(t){var e=ryt(t);if(typeof e!="string"&&(KY.isEncoding===Cve||!Cve(t)))throw new Error("Unknown encoding: "+t);return e||t}wve.StringDecoder=$D;function $D(t){this.encoding=nyt(t);var e;switch(this.encoding){case"utf16le":this.text=cyt,this.end=uyt,e=4;break;case"utf8":this.fillLast=oyt,e=4;break;case"base64":this.text=fyt,this.end=Ayt,e=3;break;default:this.write=pyt,this.end=hyt;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=KY.allocUnsafe(e)}$D.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 iyt(t,e,r){var s=e.length-1;if(s=0?(a>0&&(t.lastNeed=a-1),a):--s=0?(a>0&&(t.lastNeed=a-2),a):--s=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function syt(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 oyt(t){var e=this.lastTotal-this.lastNeed,r=syt(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 ayt(t,e){var r=iyt(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var s=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,s),t.toString("utf8",e,s)}function lyt(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function cyt(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var s=r.charCodeAt(r.length-1);if(s>=55296&&s<=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 uyt(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 fyt(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 Ayt(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function pyt(t){return t.toString(this.encoding)}function hyt(t){return t&&t.length?this.write(t):""}});var EN=_((Rtr,Sve)=>{"use strict";var Bve=lg().codes.ERR_STREAM_PREMATURE_CLOSE;function gyt(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,s=new Array(r),a=0;a{"use strict";var IN;function fg(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var yyt=EN(),Ag=Symbol("lastResolve"),Vm=Symbol("lastReject"),eP=Symbol("error"),CN=Symbol("ended"),Jm=Symbol("lastPromise"),ZY=Symbol("handlePromise"),Km=Symbol("stream");function pg(t,e){return{value:t,done:e}}function Eyt(t){var e=t[Ag];if(e!==null){var r=t[Km].read();r!==null&&(t[Jm]=null,t[Ag]=null,t[Vm]=null,e(pg(r,!1)))}}function Iyt(t){process.nextTick(Eyt,t)}function Cyt(t,e){return function(r,s){t.then(function(){if(e[CN]){r(pg(void 0,!0));return}e[ZY](r,s)},s)}}var wyt=Object.getPrototypeOf(function(){}),Byt=Object.setPrototypeOf((IN={get stream(){return this[Km]},next:function(){var e=this,r=this[eP];if(r!==null)return Promise.reject(r);if(this[CN])return Promise.resolve(pg(void 0,!0));if(this[Km].destroyed)return new Promise(function(c,f){process.nextTick(function(){e[eP]?f(e[eP]):c(pg(void 0,!0))})});var s=this[Jm],a;if(s)a=new Promise(Cyt(s,this));else{var n=this[Km].read();if(n!==null)return Promise.resolve(pg(n,!1));a=new Promise(this[ZY])}return this[Jm]=a,a}},fg(IN,Symbol.asyncIterator,function(){return this}),fg(IN,"return",function(){var e=this;return new Promise(function(r,s){e[Km].destroy(null,function(a){if(a){s(a);return}r(pg(void 0,!0))})})}),IN),wyt),vyt=function(e){var r,s=Object.create(Byt,(r={},fg(r,Km,{value:e,writable:!0}),fg(r,Ag,{value:null,writable:!0}),fg(r,Vm,{value:null,writable:!0}),fg(r,eP,{value:null,writable:!0}),fg(r,CN,{value:e._readableState.endEmitted,writable:!0}),fg(r,ZY,{value:function(n,c){var f=s[Km].read();f?(s[Jm]=null,s[Ag]=null,s[Vm]=null,n(pg(f,!1))):(s[Ag]=n,s[Vm]=c)},writable:!0}),r));return s[Jm]=null,yyt(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=s[Vm];n!==null&&(s[Jm]=null,s[Ag]=null,s[Vm]=null,n(a)),s[eP]=a;return}var c=s[Ag];c!==null&&(s[Jm]=null,s[Ag]=null,s[Vm]=null,c(pg(void 0,!0))),s[CN]=!0}),e.on("readable",Iyt.bind(null,s)),s};Dve.exports=vyt});var Qve=_((Ftr,kve)=>{"use strict";function bve(t,e,r,s,a,n,c){try{var f=t[n](c),p=f.value}catch(h){r(h);return}f.done?e(p):Promise.resolve(p).then(s,a)}function Syt(t){return function(){var e=this,r=arguments;return new Promise(function(s,a){var n=t.apply(e,r);function c(p){bve(n,s,a,c,f,"next",p)}function f(p){bve(n,s,a,c,f,"throw",p)}c(void 0)})}}function xve(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e&&(s=s.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,s)}return r}function Dyt(t){for(var e=1;e{"use strict";Hve.exports=bn;var Nw;bn.ReadableState=Nve;var Ntr=Ie("events").EventEmitter,Fve=function(e,r){return e.listeners(r).length},rP=TY(),wN=Ie("buffer").Buffer,kyt=global.Uint8Array||function(){};function Qyt(t){return wN.from(t)}function Ryt(t){return wN.isBuffer(t)||t instanceof kyt}var XY=Ie("util"),cn;XY&&XY.debuglog?cn=XY.debuglog("stream"):cn=function(){};var Tyt=eve(),sV=OY(),Fyt=LY(),Nyt=Fyt.getHighWaterMark,BN=lg().codes,Oyt=BN.ERR_INVALID_ARG_TYPE,Lyt=BN.ERR_STREAM_PUSH_AFTER_EOF,Myt=BN.ERR_METHOD_NOT_IMPLEMENTED,Uyt=BN.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,Ow,$Y,eV;cg()(bn,rP);var tP=sV.errorOrDestroy,tV=["error","close","destroy","pause","resume"];function _yt(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 Nve(t,e,r){Nw=Nw||Ym(),t=t||{},typeof r!="boolean"&&(r=e instanceof Nw),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=Nyt(this,t,"readableHighWaterMark",r),this.buffer=new Tyt,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&&(Ow||(Ow=zY().StringDecoder),this.decoder=new Ow(t.encoding),this.encoding=t.encoding)}function bn(t){if(Nw=Nw||Ym(),!(this instanceof bn))return new bn(t);var e=this instanceof Nw;this._readableState=new Nve(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),rP.call(this)}Object.defineProperty(bn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}});bn.prototype.destroy=sV.destroy;bn.prototype._undestroy=sV.undestroy;bn.prototype._destroy=function(t,e){e(t)};bn.prototype.push=function(t,e){var r=this._readableState,s;return r.objectMode?s=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=wN.from(t,e),e=""),s=!0),Ove(this,t,e,!1,s)};bn.prototype.unshift=function(t){return Ove(this,t,null,!0,!1)};function Ove(t,e,r,s,a){cn("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,Gyt(t,n);else{var c;if(a||(c=Hyt(n,e)),c)tP(t,c);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==wN.prototype&&(e=Qyt(e)),s)n.endEmitted?tP(t,new Uyt):rV(t,n,e,!0);else if(n.ended)tP(t,new Lyt);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?rV(t,n,e,!1):iV(t,n)):rV(t,n,e,!1)}else s||(n.reading=!1,iV(t,n))}return!n.ended&&(n.length=Rve?t=Rve:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function Tve(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=jyt(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}bn.prototype.read=function(t){cn("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 cn("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?nV(this):vN(this),null;if(t=Tve(t,e),t===0&&e.ended)return e.length===0&&nV(this),null;var s=e.needReadable;cn("need readable",s),(e.length===0||e.length-t0?a=Uve(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&&nV(this)),a!==null&&this.emit("data",a),a};function Gyt(t,e){if(cn("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?vN(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Lve(t)))}}function vN(t){var e=t._readableState;cn("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(cn("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(Lve,t))}function Lve(t){var e=t._readableState;cn("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,oV(t)}function iV(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(qyt,t,e))}function qyt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&_ve(s.pipes,t)!==-1)&&!h&&(cn("false write response, pause",s.awaitDrain),s.awaitDrain++),r.pause())}function S(N){cn("onerror",N),T(),t.removeListener("error",S),Fve(t,"error")===0&&tP(t,N)}_yt(t,"error",S);function b(){t.removeListener("finish",I),T()}t.once("close",b);function I(){cn("onfinish"),t.removeListener("close",b),T()}t.once("finish",I);function T(){cn("unpipe"),r.unpipe(t)}return t.emit("pipe",r),s.flowing||(cn("pipe resume"),r.resume()),t};function Wyt(t){return function(){var r=t._readableState;cn("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&Fve(t,"data")&&(r.flowing=!0,oV(t))}}bn.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 s=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,s.flowing!==!1&&this.resume()):t==="readable"&&!s.endEmitted&&!s.readableListening&&(s.readableListening=s.needReadable=!0,s.flowing=!1,s.emittedReadable=!1,cn("on readable",s.length,s.reading),s.length?vN(this):s.reading||process.nextTick(Yyt,this)),r};bn.prototype.addListener=bn.prototype.on;bn.prototype.removeListener=function(t,e){var r=rP.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(Mve,this),r};bn.prototype.removeAllListeners=function(t){var e=rP.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(Mve,this),e};function Mve(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 Yyt(t){cn("readable nexttick read 0"),t.read(0)}bn.prototype.resume=function(){var t=this._readableState;return t.flowing||(cn("resume"),t.flowing=!t.readableListening,Vyt(this,t)),t.paused=!1,this};function Vyt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(Jyt,t,e))}function Jyt(t,e){cn("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),oV(t),e.flowing&&!e.reading&&t.read(0)}bn.prototype.pause=function(){return cn("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(cn("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function oV(t){var e=t._readableState;for(cn("flow",e.flowing);e.flowing&&t.read()!==null;);}bn.prototype.wrap=function(t){var e=this,r=this._readableState,s=!1;t.on("end",function(){if(cn("wrapped end"),r.decoder&&!r.ended){var c=r.decoder.end();c&&c.length&&e.push(c)}e.push(null)}),t.on("data",function(c){if(cn("wrapped data"),r.decoder&&(c=r.decoder.write(c)),!(r.objectMode&&c==null)&&!(!r.objectMode&&(!c||!c.length))){var f=e.push(c);f||(s=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(f){return function(){return t[f].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 nV(t){var e=t._readableState;cn("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(Kyt,e,t))}function Kyt(t,e){if(cn("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"&&(bn.from=function(t,e){return eV===void 0&&(eV=Qve()),eV(bn,t,e)});function _ve(t,e){for(var r=0,s=t.length;r{"use strict";Gve.exports=lh;var SN=lg().codes,zyt=SN.ERR_METHOD_NOT_IMPLEMENTED,Zyt=SN.ERR_MULTIPLE_CALLBACK,Xyt=SN.ERR_TRANSFORM_ALREADY_TRANSFORMING,$yt=SN.ERR_TRANSFORM_WITH_LENGTH_0,DN=Ym();cg()(lh,DN);function eEt(t,e){var r=this._transformState;r.transforming=!1;var s=r.writecb;if(s===null)return this.emit("error",new Zyt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),s(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";Wve.exports=nP;var qve=aV();cg()(nP,qve);function nP(t){if(!(this instanceof nP))return new nP(t);qve.call(this,t)}nP.prototype._transform=function(t,e,r){r(null,t)}});var Zve=_((Utr,zve)=>{"use strict";var lV;function rEt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var Kve=lg().codes,nEt=Kve.ERR_MISSING_ARGS,iEt=Kve.ERR_STREAM_DESTROYED;function Vve(t){if(t)throw t}function sEt(t){return t.setHeader&&typeof t.abort=="function"}function oEt(t,e,r,s){s=rEt(s);var a=!1;t.on("close",function(){a=!0}),lV===void 0&&(lV=EN()),lV(t,{readable:e,writable:r},function(c){if(c)return s(c);a=!0,s()});var n=!1;return function(c){if(!a&&!n){if(n=!0,sEt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();s(c||new iEt("pipe"))}}}function Jve(t){t()}function aEt(t,e){return t.pipe(e)}function lEt(t){return!t.length||typeof t[t.length-1]!="function"?Vve:t.pop()}function cEt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return oEt(c,p,h,function(E){a||(a=E),E&&n.forEach(Jve),!p&&(n.forEach(Jve),s(a))})});return e.reduce(aEt)}zve.exports=cEt});var Lw=_((zc,sP)=>{var iP=Ie("stream");process.env.READABLE_STREAM==="disable"&&iP?(sP.exports=iP.Readable,Object.assign(sP.exports,iP),sP.exports.Stream=iP):(zc=sP.exports=YY(),zc.Stream=iP||zc,zc.Readable=zc,zc.Writable=GY(),zc.Duplex=Ym(),zc.Transform=aV(),zc.PassThrough=Yve(),zc.finished=EN(),zc.pipeline=Zve())});var eSe=_((_tr,$ve)=>{"use strict";var{Buffer:cf}=Ie("buffer"),Xve=Symbol.for("BufferList");function Ci(t){if(!(this instanceof Ci))return new Ci(t);Ci._init.call(this,t)}Ci._init=function(e){Object.defineProperty(this,Xve,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};Ci.prototype._new=function(e){return new Ci(e)};Ci.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let s=0;sthis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};Ci.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)};Ci.prototype.copy=function(e,r,s,a){if((typeof s!="number"||s<0)&&(s=0),(typeof a!="number"||a>this.length)&&(a=this.length),s>=this.length||a<=0)return e||cf.alloc(0);let n=!!e,c=this._offset(s),f=a-s,p=f,h=n&&r||0,E=c[1];if(s===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:cf.concat(this._bufs,this.length);for(let C=0;CS)this._bufs[C].copy(e,h,E),h+=S;else{this._bufs[C].copy(e,h,E,E+p),h+=S;break}p-=S,E&&(E=0)}return e.length>h?e.slice(0,h):e};Ci.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 s=this._offset(e),a=this._offset(r),n=this._bufs.slice(s[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),s[1]!==0&&(n[0]=n[0].slice(s[1])),this._new(n)};Ci.prototype.toString=function(e,r,s){return this.slice(r,s).toString(e)};Ci.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};Ci.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let s=this._offset(e),a=s[0],n=s[1];for(;a=t.length){let p=c.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=c.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};Ci.prototype._match=function(t,e){if(this.length-t{"use strict";var cV=Lw().Duplex,uEt=cg(),oP=eSe();function ra(t){if(!(this instanceof ra))return new ra(t);if(typeof t=="function"){this._callback=t;let e=function(s){this._callback&&(this._callback(s),this._callback=null)}.bind(this);this.on("pipe",function(s){s.on("error",e)}),this.on("unpipe",function(s){s.removeListener("error",e)}),t=null}oP._init.call(this,t),cV.call(this)}uEt(ra,cV);Object.assign(ra.prototype,oP.prototype);ra.prototype._new=function(e){return new ra(e)};ra.prototype._write=function(e,r,s){this._appendBuffer(e),typeof s=="function"&&s()};ra.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)};ra.prototype.end=function(e){cV.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};ra.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};ra.prototype._isBufferList=function(e){return e instanceof ra||e instanceof oP||ra.isBufferList(e)};ra.isBufferList=oP.isBufferList;PN.exports=ra;PN.exports.BufferListStream=ra;PN.exports.BufferList=oP});var AV=_(Uw=>{var fEt=Buffer.alloc,AEt="0000000000000000000",pEt="7777777777777777777",rSe=48,nSe=Buffer.from("ustar\0","binary"),hEt=Buffer.from("00","binary"),gEt=Buffer.from("ustar ","binary"),dEt=Buffer.from(" \0","binary"),mEt=parseInt("7777",8),aP=257,fV=263,yEt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},EEt=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},IEt=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},iSe=function(t,e,r,s){for(;re?pEt.slice(0,e)+" ":AEt.slice(0,e-t.length)+t+" "};function CEt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],s=t.length-1;s>0;s--){var a=t[s];e?r.push(a):r.push(255-a)}var n=0,c=r.length;for(s=0;s=Math.pow(10,r)&&r++,e+r+t};Uw.decodeLongPath=function(t,e){return Mw(t,0,t.length,e)};Uw.encodePax=function(t){var e="";t.name&&(e+=uV(" path="+t.name+` -`)),t.linkname&&(e+=uV(" linkpath="+t.linkname+` -`));var r=t.pax;if(r)for(var s in r)e+=uV(" "+s+"="+r[s]+` -`);return Buffer.from(e)};Uw.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;s+=s?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(s)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(hg(t.mode&mEt,6),100),e.write(hg(t.uid,6),108),e.write(hg(t.gid,6),116),e.write(hg(t.size,11),124),e.write(hg(t.mtime.getTime()/1e3|0,11),136),e[156]=rSe+IEt(t.type),t.linkname&&e.write(t.linkname,157),nSe.copy(e,aP),hEt.copy(e,fV),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(hg(t.devmajor||0,6),329),e.write(hg(t.devminor||0,6),337),s&&e.write(s,345),e.write(hg(sSe(e),6),148),e)};Uw.decode=function(t,e,r){var s=t[156]===0?0:t[156]-rSe,a=Mw(t,0,100,e),n=gg(t,100,8),c=gg(t,108,8),f=gg(t,116,8),p=gg(t,124,12),h=gg(t,136,12),E=EEt(s),C=t[157]===0?null:Mw(t,157,100,e),S=Mw(t,265,32),b=Mw(t,297,32),I=gg(t,329,8),T=gg(t,337,8),N=sSe(t);if(N===8*32)return null;if(N!==gg(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(nSe.compare(t,aP,aP+6)===0)t[345]&&(a=Mw(t,345,155,e)+"/"+a);else if(!(gEt.compare(t,aP,aP+6)===0&&dEt.compare(t,fV,fV+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return s===0&&a&&a[a.length-1]==="/"&&(s=5),{name:a,mode:n,uid:c,gid:f,size:p,mtime:new Date(1e3*h),type:E,linkname:C,uname:S,gname:b,devmajor:I,devminor:T}}});var ASe=_((Gtr,fSe)=>{var aSe=Ie("util"),wEt=tSe(),lP=AV(),lSe=Lw().Writable,cSe=Lw().PassThrough,uSe=function(){},oSe=function(t){return t&=511,t&&512-t},BEt=function(t,e){var r=new bN(t,e);return r.end(),r},vEt=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},bN=function(t,e){this._parent=t,this.offset=e,cSe.call(this,{autoDestroy:!1})};aSe.inherits(bN,cSe);bN.prototype.destroy=function(t){this._parent.destroy(t)};var ch=function(t){if(!(this instanceof ch))return new ch(t);lSe.call(this,t),t=t||{},this._offset=0,this._buffer=wEt(),this._missing=0,this._partial=!1,this._onparse=uSe,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,s=function(){e._continue()},a=function(S){if(e._locked=!1,S)return e.destroy(S);e._stream||s()},n=function(){e._stream=null;var S=oSe(e._header.size);S?e._parse(S,c):e._parse(512,C),e._locked||s()},c=function(){e._buffer.consume(oSe(e._header.size)),e._parse(512,C),s()},f=function(){var S=e._header.size;e._paxGlobal=lP.decodePax(r.slice(0,S)),r.consume(S),n()},p=function(){var S=e._header.size;e._pax=lP.decodePax(r.slice(0,S)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(S),n()},h=function(){var S=e._header.size;this._gnuLongPath=lP.decodeLongPath(r.slice(0,S),t.filenameEncoding),r.consume(S),n()},E=function(){var S=e._header.size;this._gnuLongLinkPath=lP.decodeLongPath(r.slice(0,S),t.filenameEncoding),r.consume(S),n()},C=function(){var S=e._offset,b;try{b=e._header=lP.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(I){e.emit("error",I)}if(r.consume(512),!b){e._parse(512,C),s();return}if(b.type==="gnu-long-path"){e._parse(b.size,h),s();return}if(b.type==="gnu-long-link-path"){e._parse(b.size,E),s();return}if(b.type==="pax-global-header"){e._parse(b.size,f),s();return}if(b.type==="pax-header"){e._parse(b.size,p),s();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=vEt(b,e._pax),e._pax=null),e._locked=!0,!b.size||b.type==="directory"){e._parse(512,C),e.emit("entry",b,BEt(e,S),a);return}e._stream=new bN(e,S),e.emit("entry",b,e._stream,a),e._parse(b.size,n),s()};this._onheader=C,this._parse(512,C)};aSe.inherits(ch,lSe);ch.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};ch.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};ch.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=uSe,this._overflow?this._write(this._overflow,void 0,t):t()}};ch.prototype._write=function(t,e,r){if(!this._destroyed){var s=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(c=t.slice(n),t=t.slice(0,n)),s?s.end(t):a.append(t),this._overflow=c,this._onparse()}};ch.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};fSe.exports=ch});var hSe=_((qtr,pSe)=>{pSe.exports=Ie("fs").constants||Ie("constants")});var ESe=_((Wtr,ySe)=>{var _w=hSe(),gSe=aH(),kN=cg(),SEt=Buffer.alloc,dSe=Lw().Readable,Hw=Lw().Writable,DEt=Ie("string_decoder").StringDecoder,xN=AV(),PEt=parseInt("755",8),bEt=parseInt("644",8),mSe=SEt(1024),hV=function(){},pV=function(t,e){e&=511,e&&t.push(mSe.slice(0,512-e))};function xEt(t){switch(t&_w.S_IFMT){case _w.S_IFBLK:return"block-device";case _w.S_IFCHR:return"character-device";case _w.S_IFDIR:return"directory";case _w.S_IFIFO:return"fifo";case _w.S_IFLNK:return"symlink"}return"file"}var QN=function(t){Hw.call(this),this.written=0,this._to=t,this._destroyed=!1};kN(QN,Hw);QN.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};QN.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var RN=function(){Hw.call(this),this.linkname="",this._decoder=new DEt("utf-8"),this._destroyed=!1};kN(RN,Hw);RN.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};RN.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var cP=function(){Hw.call(this),this._destroyed=!1};kN(cP,Hw);cP.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};cP.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var mA=function(t){if(!(this instanceof mA))return new mA(t);dSe.call(this,t),this._drain=hV,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};kN(mA,dSe);mA.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=hV);var s=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=xEt(t.mode)),t.mode||(t.mode=t.type==="directory"?PEt:bEt),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 pV(s,t.size),a?process.nextTick(r):this._drain=r,new cP}if(t.type==="symlink"&&!t.linkname){var n=new RN;return gSe(n,function(f){if(f)return s.destroy(),r(f);t.linkname=n.linkname,s._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new cP;var c=new QN(this);return this._stream=c,gSe(c,function(f){if(s._stream=null,f)return s.destroy(),r(f);if(c.written!==t.size)return s.destroy(),r(new Error("size mismatch"));pV(s,t.size),s._finalizing&&s.finalize(),r()}),c}};mA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(mSe),this.push(null))};mA.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())};mA.prototype._encode=function(t){if(!t.pax){var e=xN.encode(t);if(e){this.push(e);return}}this._encodePax(t)};mA.prototype._encodePax=function(t){var e=xN.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(xN.encode(r)),this.push(e),pV(this,e.length),r.size=t.size,r.type=t.type,this.push(xN.encode(r))};mA.prototype._read=function(t){var e=this._drain;this._drain=hV,e()};ySe.exports=mA});var ISe=_(gV=>{gV.extract=ASe();gV.pack=ESe()});var TSe=_(Ra=>{"use strict";var jEt=Ra&&Ra.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Ra,"__esModule",{value:!0});Ra.Minipass=Ra.isWritable=Ra.isReadable=Ra.isStream=void 0;var bSe=typeof process=="object"&&process?process:{stdout:null,stderr:null},PV=Ie("node:events"),RSe=jEt(Ie("node:stream")),GEt=Ie("node:string_decoder"),qEt=t=>!!t&&typeof t=="object"&&(t instanceof HN||t instanceof RSe.default||(0,Ra.isReadable)(t)||(0,Ra.isWritable)(t));Ra.isStream=qEt;var WEt=t=>!!t&&typeof t=="object"&&t instanceof PV.EventEmitter&&typeof t.pipe=="function"&&t.pipe!==RSe.default.Writable.prototype.pipe;Ra.isReadable=WEt;var YEt=t=>!!t&&typeof t=="object"&&t instanceof PV.EventEmitter&&typeof t.write=="function"&&typeof t.end=="function";Ra.isWritable=YEt;var uh=Symbol("EOF"),fh=Symbol("maybeEmitEnd"),dg=Symbol("emittedEnd"),NN=Symbol("emittingEnd"),uP=Symbol("emittedError"),ON=Symbol("closed"),xSe=Symbol("read"),LN=Symbol("flush"),kSe=Symbol("flushChunk"),uf=Symbol("encoding"),Gw=Symbol("decoder"),Ks=Symbol("flowing"),fP=Symbol("paused"),qw=Symbol("resume"),zs=Symbol("buffer"),Qa=Symbol("pipes"),Zs=Symbol("bufferLength"),CV=Symbol("bufferPush"),MN=Symbol("bufferShift"),na=Symbol("objectMode"),es=Symbol("destroyed"),wV=Symbol("error"),BV=Symbol("emitData"),QSe=Symbol("emitEnd"),vV=Symbol("emitEnd2"),EA=Symbol("async"),SV=Symbol("abort"),UN=Symbol("aborted"),AP=Symbol("signal"),zm=Symbol("dataListeners"),rc=Symbol("discarded"),pP=t=>Promise.resolve().then(t),VEt=t=>t(),JEt=t=>t==="end"||t==="finish"||t==="prefinish",KEt=t=>t instanceof ArrayBuffer||!!t&&typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,zEt=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),_N=class{src;dest;opts;ondrain;constructor(e,r,s){this.src=e,this.dest=r,this.opts=s,this.ondrain=()=>e[qw](),this.dest.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(e){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},DV=class extends _N{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,s){super(e,r,s),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}},ZEt=t=>!!t.objectMode,XEt=t=>!t.objectMode&&!!t.encoding&&t.encoding!=="buffer",HN=class extends PV.EventEmitter{[Ks]=!1;[fP]=!1;[Qa]=[];[zs]=[];[na];[uf];[EA];[Gw];[uh]=!1;[dg]=!1;[NN]=!1;[ON]=!1;[uP]=null;[Zs]=0;[es]=!1;[AP];[UN]=!1;[zm]=0;[rc]=!1;writable=!0;readable=!0;constructor(...e){let r=e[0]||{};if(super(),r.objectMode&&typeof r.encoding=="string")throw new TypeError("Encoding and objectMode may not be used together");ZEt(r)?(this[na]=!0,this[uf]=null):XEt(r)?(this[uf]=r.encoding,this[na]=!1):(this[na]=!1,this[uf]=null),this[EA]=!!r.async,this[Gw]=this[uf]?new GEt.StringDecoder(this[uf]):null,r&&r.debugExposeBuffer===!0&&Object.defineProperty(this,"buffer",{get:()=>this[zs]}),r&&r.debugExposePipes===!0&&Object.defineProperty(this,"pipes",{get:()=>this[Qa]});let{signal:s}=r;s&&(this[AP]=s,s.aborted?this[SV]():s.addEventListener("abort",()=>this[SV]()))}get bufferLength(){return this[Zs]}get encoding(){return this[uf]}set encoding(e){throw new Error("Encoding must be set at instantiation time")}setEncoding(e){throw new Error("Encoding must be set at instantiation time")}get objectMode(){return this[na]}set objectMode(e){throw new Error("objectMode must be set at instantiation time")}get async(){return this[EA]}set async(e){this[EA]=this[EA]||!!e}[SV](){this[UN]=!0,this.emit("abort",this[AP]?.reason),this.destroy(this[AP]?.reason)}get aborted(){return this[UN]}set aborted(e){}write(e,r,s){if(this[UN])return!1;if(this[uh])throw new Error("write after end");if(this[es])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(s=r,r="utf8"),r||(r="utf8");let a=this[EA]?pP:VEt;if(!this[na]&&!Buffer.isBuffer(e)){if(zEt(e))e=Buffer.from(e.buffer,e.byteOffset,e.byteLength);else if(KEt(e))e=Buffer.from(e);else if(typeof e!="string")throw new Error("Non-contiguous data written to non-objectMode stream")}return this[na]?(this[Ks]&&this[Zs]!==0&&this[LN](!0),this[Ks]?this.emit("data",e):this[CV](e),this[Zs]!==0&&this.emit("readable"),s&&a(s),this[Ks]):e.length?(typeof e=="string"&&!(r===this[uf]&&!this[Gw]?.lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[uf]&&(e=this[Gw].write(e)),this[Ks]&&this[Zs]!==0&&this[LN](!0),this[Ks]?this.emit("data",e):this[CV](e),this[Zs]!==0&&this.emit("readable"),s&&a(s),this[Ks]):(this[Zs]!==0&&this.emit("readable"),s&&a(s),this[Ks])}read(e){if(this[es])return null;if(this[rc]=!1,this[Zs]===0||e===0||e&&e>this[Zs])return this[fh](),null;this[na]&&(e=null),this[zs].length>1&&!this[na]&&(this[zs]=[this[uf]?this[zs].join(""):Buffer.concat(this[zs],this[Zs])]);let r=this[xSe](e||null,this[zs][0]);return this[fh](),r}[xSe](e,r){if(this[na])this[MN]();else{let s=r;e===s.length||e===null?this[MN]():typeof s=="string"?(this[zs][0]=s.slice(e),r=s.slice(0,e),this[Zs]-=e):(this[zs][0]=s.subarray(e),r=s.subarray(0,e),this[Zs]-=e)}return this.emit("data",r),!this[zs].length&&!this[uh]&&this.emit("drain"),r}end(e,r,s){return typeof e=="function"&&(s=e,e=void 0),typeof r=="function"&&(s=r,r="utf8"),e!==void 0&&this.write(e,r),s&&this.once("end",s),this[uh]=!0,this.writable=!1,(this[Ks]||!this[fP])&&this[fh](),this}[qw](){this[es]||(!this[zm]&&!this[Qa].length&&(this[rc]=!0),this[fP]=!1,this[Ks]=!0,this.emit("resume"),this[zs].length?this[LN]():this[uh]?this[fh]():this.emit("drain"))}resume(){return this[qw]()}pause(){this[Ks]=!1,this[fP]=!0,this[rc]=!1}get destroyed(){return this[es]}get flowing(){return this[Ks]}get paused(){return this[fP]}[CV](e){this[na]?this[Zs]+=1:this[Zs]+=e.length,this[zs].push(e)}[MN](){return this[na]?this[Zs]-=1:this[Zs]-=this[zs][0].length,this[zs].shift()}[LN](e=!1){do;while(this[kSe](this[MN]())&&this[zs].length);!e&&!this[zs].length&&!this[uh]&&this.emit("drain")}[kSe](e){return this.emit("data",e),this[Ks]}pipe(e,r){if(this[es])return e;this[rc]=!1;let s=this[dg];return r=r||{},e===bSe.stdout||e===bSe.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,s?r.end&&e.end():(this[Qa].push(r.proxyErrors?new DV(this,e,r):new _N(this,e,r)),this[EA]?pP(()=>this[qw]()):this[qw]()),e}unpipe(e){let r=this[Qa].find(s=>s.dest===e);r&&(this[Qa].length===1?(this[Ks]&&this[zm]===0&&(this[Ks]=!1),this[Qa]=[]):this[Qa].splice(this[Qa].indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let s=super.on(e,r);if(e==="data")this[rc]=!1,this[zm]++,!this[Qa].length&&!this[Ks]&&this[qw]();else if(e==="readable"&&this[Zs]!==0)super.emit("readable");else if(JEt(e)&&this[dg])super.emit(e),this.removeAllListeners(e);else if(e==="error"&&this[uP]){let a=r;this[EA]?pP(()=>a.call(this,this[uP])):a.call(this,this[uP])}return s}removeListener(e,r){return this.off(e,r)}off(e,r){let s=super.off(e,r);return e==="data"&&(this[zm]=this.listeners("data").length,this[zm]===0&&!this[rc]&&!this[Qa].length&&(this[Ks]=!1)),s}removeAllListeners(e){let r=super.removeAllListeners(e);return(e==="data"||e===void 0)&&(this[zm]=0,!this[rc]&&!this[Qa].length&&(this[Ks]=!1)),r}get emittedEnd(){return this[dg]}[fh](){!this[NN]&&!this[dg]&&!this[es]&&this[zs].length===0&&this[uh]&&(this[NN]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[ON]&&this.emit("close"),this[NN]=!1)}emit(e,...r){let s=r[0];if(e!=="error"&&e!=="close"&&e!==es&&this[es])return!1;if(e==="data")return!this[na]&&!s?!1:this[EA]?(pP(()=>this[BV](s)),!0):this[BV](s);if(e==="end")return this[QSe]();if(e==="close"){if(this[ON]=!0,!this[dg]&&!this[es])return!1;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[uP]=s,super.emit(wV,s);let n=!this[AP]||this.listeners("error").length?super.emit("error",s):!1;return this[fh](),n}else if(e==="resume"){let n=super.emit("resume");return this[fh](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,...r);return this[fh](),a}[BV](e){for(let s of this[Qa])s.dest.write(e)===!1&&this.pause();let r=this[rc]?!1:super.emit("data",e);return this[fh](),r}[QSe](){return this[dg]?!1:(this[dg]=!0,this.readable=!1,this[EA]?(pP(()=>this[vV]()),!0):this[vV]())}[vV](){if(this[Gw]){let r=this[Gw].end();if(r){for(let s of this[Qa])s.dest.write(r);this[rc]||super.emit("data",r)}}for(let r of this[Qa])r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}async collect(){let e=Object.assign([],{dataLength:0});this[na]||(e.dataLength=0);let r=this.promise();return this.on("data",s=>{e.push(s),this[na]||(e.dataLength+=s.length)}),await r,e}async concat(){if(this[na])throw new Error("cannot concat in objectMode");let e=await this.collect();return this[uf]?e.join(""):Buffer.concat(e,e.dataLength)}async promise(){return new Promise((e,r)=>{this.on(es,()=>r(new Error("stream destroyed"))),this.on("error",s=>r(s)),this.on("end",()=>e())})}[Symbol.asyncIterator](){this[rc]=!1;let e=!1,r=async()=>(this.pause(),e=!0,{value:void 0,done:!0});return{next:()=>{if(e)return r();let a=this.read();if(a!==null)return Promise.resolve({done:!1,value:a});if(this[uh])return r();let n,c,f=C=>{this.off("data",p),this.off("end",h),this.off(es,E),r(),c(C)},p=C=>{this.off("error",f),this.off("end",h),this.off(es,E),this.pause(),n({value:C,done:!!this[uh]})},h=()=>{this.off("error",f),this.off("data",p),this.off(es,E),r(),n({done:!0,value:void 0})},E=()=>f(new Error("stream destroyed"));return new Promise((C,S)=>{c=S,n=C,this.once(es,E),this.once("error",f),this.once("end",h),this.once("data",p)})},throw:r,return:r,[Symbol.asyncIterator](){return this}}}[Symbol.iterator](){this[rc]=!1;let e=!1,r=()=>(this.pause(),this.off(wV,r),this.off(es,r),this.off("end",r),e=!0,{done:!0,value:void 0}),s=()=>{if(e)return r();let a=this.read();return a===null?r():{done:!1,value:a}};return this.once("end",r),this.once(wV,r),this.once(es,r),{next:s,throw:r,return:r,[Symbol.iterator](){return this}}}destroy(e){if(this[es])return e?this.emit("error",e):this.emit(es),this;this[es]=!0,this[rc]=!0,this[zs].length=0,this[Zs]=0;let r=this;return typeof r.close=="function"&&!this[ON]&&r.close(),e?this.emit("error",e):this.emit(es),this}static get isStream(){return Ra.isStream}};Ra.Minipass=HN});var OSe=_((prr,IA)=>{"use strict";var gP=Ie("crypto"),{Minipass:$Et}=TSe(),xV=["sha512","sha384","sha256"],QV=["sha512"],eIt=/^[a-z0-9+/]+(?:=?=?)$/i,tIt=/^([a-z0-9]+)-([^?]+)([?\S*]*)$/,rIt=/^([a-z0-9]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)?$/,nIt=/^[\x21-\x7E]+$/,dP=t=>t?.length?`?${t.join("?")}`:"",kV=class extends $Et{#t;#r;#i;constructor(e){super(),this.size=0,this.opts=e,this.#e(),e?.algorithms?this.algorithms=[...e.algorithms]:this.algorithms=[...QV],this.algorithm!==null&&!this.algorithms.includes(this.algorithm)&&this.algorithms.push(this.algorithm),this.hashes=this.algorithms.map(gP.createHash)}#e(){this.sri=this.opts?.integrity?nc(this.opts?.integrity,this.opts):null,this.expectedSize=this.opts?.size,this.sri?this.sri.isHash?(this.goodSri=!0,this.algorithm=this.sri.algorithm):(this.goodSri=!this.sri.isEmpty(),this.algorithm=this.sri.pickAlgorithm(this.opts)):this.algorithm=null,this.digests=this.goodSri?this.sri[this.algorithm]:null,this.optString=dP(this.opts?.options)}on(e,r){return e==="size"&&this.#r?r(this.#r):e==="integrity"&&this.#t?r(this.#t):e==="verified"&&this.#i?r(this.#i):super.on(e,r)}emit(e,r){return e==="end"&&this.#n(),super.emit(e,r)}write(e){return this.size+=e.length,this.hashes.forEach(r=>r.update(e)),super.write(e)}#n(){this.goodSri||this.#e();let e=nc(this.hashes.map((s,a)=>`${this.algorithms[a]}-${s.digest("base64")}${this.optString}`).join(" "),this.opts),r=this.goodSri&&e.match(this.sri,this.opts);if(typeof this.expectedSize=="number"&&this.size!==this.expectedSize){let s=new Error(`stream size mismatch when checking ${this.sri}. - Wanted: ${this.expectedSize} - Found: ${this.size}`);s.code="EBADSIZE",s.found=this.size,s.expected=this.expectedSize,s.sri=this.sri,this.emit("error",s)}else if(this.sri&&!r){let s=new Error(`${this.sri} integrity checksum failed when using ${this.algorithm}: wanted ${this.digests} but got ${e}. (${this.size} bytes)`);s.code="EINTEGRITY",s.found=e,s.expected=this.digests,s.algorithm=this.algorithm,s.sri=this.sri,this.emit("error",s)}else this.#r=this.size,this.emit("size",this.size),this.#t=e,this.emit("integrity",e),r&&(this.#i=r,this.emit("verified",r))}},Ah=class{get isHash(){return!0}constructor(e,r){let s=r?.strict;this.source=e.trim(),this.digest="",this.algorithm="",this.options=[];let a=this.source.match(s?rIt:tIt);if(!a||s&&!xV.includes(a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];n&&(this.options=n.slice(1).split("?"))}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}match(e,r){let s=nc(e,r);if(!s)return!1;if(s.isIntegrity){let a=s.pickAlgorithm(r,[this.algorithm]);if(!a)return!1;let n=s[a].find(c=>c.digest===this.digest);return n||!1}return s.digest===this.digest?s:!1}toString(e){return e?.strict&&!(xV.includes(this.algorithm)&&this.digest.match(eIt)&&this.options.every(r=>r.match(nIt)))?"":`${this.algorithm}-${this.digest}${dP(this.options)}`}};function FSe(t,e,r,s){let a=t!=="",n=!1,c="",f=s.length-1;for(let h=0;hs[a].find(c=>n.digest===c.digest)))throw new Error("hashes do not match, cannot update integrity")}else this[a]=s[a]}match(e,r){let s=nc(e,r);if(!s)return!1;let a=s.pickAlgorithm(r,Object.keys(this));return!!a&&this[a]&&s[a]&&this[a].find(n=>s[a].find(c=>n.digest===c.digest))||!1}pickAlgorithm(e,r){let s=e?.pickAlgorithm||fIt,a=Object.keys(this).filter(n=>r?.length?r.includes(n):!0);return a.length?a.reduce((n,c)=>s(n,c)||n):null}};IA.exports.parse=nc;function nc(t,e){if(!t)return null;if(typeof t=="string")return bV(t,e);if(t.algorithm&&t.digest){let r=new Zm;return r[t.algorithm]=[t],bV(hP(r,e),e)}else return bV(hP(t,e),e)}function bV(t,e){if(e?.single)return new Ah(t,e);let r=t.trim().split(/\s+/).reduce((s,a)=>{let n=new Ah(a,e);if(n.algorithm&&n.digest){let c=n.algorithm;s[c]||(s[c]=[]),s[c].push(n)}return s},new Zm);return r.isEmpty()?null:r}IA.exports.stringify=hP;function hP(t,e){return t.algorithm&&t.digest?Ah.prototype.toString.call(t,e):typeof t=="string"?hP(nc(t,e),e):Zm.prototype.toString.call(t,e)}IA.exports.fromHex=iIt;function iIt(t,e,r){let s=dP(r?.options);return nc(`${e}-${Buffer.from(t,"hex").toString("base64")}${s}`,r)}IA.exports.fromData=sIt;function sIt(t,e){let r=e?.algorithms||[...QV],s=dP(e?.options);return r.reduce((a,n)=>{let c=gP.createHash(n).update(t).digest("base64"),f=new Ah(`${n}-${c}${s}`,e);if(f.algorithm&&f.digest){let p=f.algorithm;a[p]||(a[p]=[]),a[p].push(f)}return a},new Zm)}IA.exports.fromStream=oIt;function oIt(t,e){let r=RV(e);return new Promise((s,a)=>{t.pipe(r),t.on("error",a),r.on("error",a);let n;r.on("integrity",c=>{n=c}),r.on("end",()=>s(n)),r.resume()})}IA.exports.checkData=aIt;function aIt(t,e,r){if(e=nc(e,r),!e||!Object.keys(e).length){if(r?.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let s=e.pickAlgorithm(r),a=gP.createHash(s).update(t).digest("base64"),n=nc({algorithm:s,digest:a}),c=n.match(e,r);if(r=r||{},c||!r.error)return c;if(typeof r.size=="number"&&t.length!==r.size){let f=new Error(`data size mismatch when checking ${e}. - Wanted: ${r.size} - Found: ${t.length}`);throw f.code="EBADSIZE",f.found=t.length,f.expected=r.size,f.sri=e,f}else{let f=new Error(`Integrity checksum failed when using ${s}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw f.code="EINTEGRITY",f.found=n,f.expected=e,f.algorithm=s,f.sri=e,f}}IA.exports.checkStream=lIt;function lIt(t,e,r){if(r=r||Object.create(null),r.integrity=e,e=nc(e,r),!e||!Object.keys(e).length)return Promise.reject(Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"}));let s=RV(r);return new Promise((a,n)=>{t.pipe(s),t.on("error",n),s.on("error",n);let c;s.on("verified",f=>{c=f}),s.on("end",()=>a(c)),s.resume()})}IA.exports.integrityStream=RV;function RV(t=Object.create(null)){return new kV(t)}IA.exports.create=cIt;function cIt(t){let e=t?.algorithms||[...QV],r=dP(t?.options),s=e.map(gP.createHash);return{update:function(a,n){return s.forEach(c=>c.update(a,n)),this},digest:function(){return e.reduce((n,c)=>{let f=s.shift().digest("base64"),p=new Ah(`${c}-${f}${r}`,t);if(p.algorithm&&p.digest){let h=p.algorithm;n[h]||(n[h]=[]),n[h].push(p)}return n},new Zm)}}}var uIt=gP.getHashes(),NSe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>uIt.includes(t));function fIt(t,e){return NSe.indexOf(t.toLowerCase())>=NSe.indexOf(e.toLowerCase())?t:e}});var TV=_(mg=>{"use strict";Object.defineProperty(mg,"__esModule",{value:!0});mg.Signature=mg.Envelope=void 0;mg.Envelope={fromJSON(t){return{payload:jN(t.payload)?Buffer.from(LSe(t.payload)):Buffer.alloc(0),payloadType:jN(t.payloadType)?globalThis.String(t.payloadType):"",signatures:globalThis.Array.isArray(t?.signatures)?t.signatures.map(e=>mg.Signature.fromJSON(e)):[]}},toJSON(t){let e={};return t.payload.length!==0&&(e.payload=MSe(t.payload)),t.payloadType!==""&&(e.payloadType=t.payloadType),t.signatures?.length&&(e.signatures=t.signatures.map(r=>mg.Signature.toJSON(r))),e}};mg.Signature={fromJSON(t){return{sig:jN(t.sig)?Buffer.from(LSe(t.sig)):Buffer.alloc(0),keyid:jN(t.keyid)?globalThis.String(t.keyid):""}},toJSON(t){let e={};return t.sig.length!==0&&(e.sig=MSe(t.sig)),t.keyid!==""&&(e.keyid=t.keyid),e}};function LSe(t){return Uint8Array.from(globalThis.Buffer.from(t,"base64"))}function MSe(t){return globalThis.Buffer.from(t).toString("base64")}function jN(t){return t!=null}});var _Se=_(GN=>{"use strict";Object.defineProperty(GN,"__esModule",{value:!0});GN.Timestamp=void 0;GN.Timestamp={fromJSON(t){return{seconds:USe(t.seconds)?globalThis.String(t.seconds):"0",nanos:USe(t.nanos)?globalThis.Number(t.nanos):0}},toJSON(t){let e={};return t.seconds!=="0"&&(e.seconds=t.seconds),t.nanos!==0&&(e.nanos=Math.round(t.nanos)),e}};function USe(t){return t!=null}});var Ww=_(Ur=>{"use strict";Object.defineProperty(Ur,"__esModule",{value:!0});Ur.TimeRange=Ur.X509CertificateChain=Ur.SubjectAlternativeName=Ur.X509Certificate=Ur.DistinguishedName=Ur.ObjectIdentifierValuePair=Ur.ObjectIdentifier=Ur.PublicKeyIdentifier=Ur.PublicKey=Ur.RFC3161SignedTimestamp=Ur.LogId=Ur.MessageSignature=Ur.HashOutput=Ur.SubjectAlternativeNameType=Ur.PublicKeyDetails=Ur.HashAlgorithm=void 0;Ur.hashAlgorithmFromJSON=jSe;Ur.hashAlgorithmToJSON=GSe;Ur.publicKeyDetailsFromJSON=qSe;Ur.publicKeyDetailsToJSON=WSe;Ur.subjectAlternativeNameTypeFromJSON=YSe;Ur.subjectAlternativeNameTypeToJSON=VSe;var AIt=_Se(),yl;(function(t){t[t.HASH_ALGORITHM_UNSPECIFIED=0]="HASH_ALGORITHM_UNSPECIFIED",t[t.SHA2_256=1]="SHA2_256",t[t.SHA2_384=2]="SHA2_384",t[t.SHA2_512=3]="SHA2_512",t[t.SHA3_256=4]="SHA3_256",t[t.SHA3_384=5]="SHA3_384"})(yl||(Ur.HashAlgorithm=yl={}));function jSe(t){switch(t){case 0:case"HASH_ALGORITHM_UNSPECIFIED":return yl.HASH_ALGORITHM_UNSPECIFIED;case 1:case"SHA2_256":return yl.SHA2_256;case 2:case"SHA2_384":return yl.SHA2_384;case 3:case"SHA2_512":return yl.SHA2_512;case 4:case"SHA3_256":return yl.SHA3_256;case 5:case"SHA3_384":return yl.SHA3_384;default:throw new globalThis.Error("Unrecognized enum value "+t+" for enum HashAlgorithm")}}function GSe(t){switch(t){case yl.HASH_ALGORITHM_UNSPECIFIED:return"HASH_ALGORITHM_UNSPECIFIED";case yl.SHA2_256:return"SHA2_256";case yl.SHA2_384:return"SHA2_384";case yl.SHA2_512:return"SHA2_512";case yl.SHA3_256:return"SHA3_256";case yl.SHA3_384:return"SHA3_384";default:throw new globalThis.Error("Unrecognized enum value "+t+" for enum HashAlgorithm")}}var rn;(function(t){t[t.PUBLIC_KEY_DETAILS_UNSPECIFIED=0]="PUBLIC_KEY_DETAILS_UNSPECIFIED",t[t.PKCS1_RSA_PKCS1V5=1]="PKCS1_RSA_PKCS1V5",t[t.PKCS1_RSA_PSS=2]="PKCS1_RSA_PSS",t[t.PKIX_RSA_PKCS1V5=3]="PKIX_RSA_PKCS1V5",t[t.PKIX_RSA_PSS=4]="PKIX_RSA_PSS",t[t.PKIX_RSA_PKCS1V15_2048_SHA256=9]="PKIX_RSA_PKCS1V15_2048_SHA256",t[t.PKIX_RSA_PKCS1V15_3072_SHA256=10]="PKIX_RSA_PKCS1V15_3072_SHA256",t[t.PKIX_RSA_PKCS1V15_4096_SHA256=11]="PKIX_RSA_PKCS1V15_4096_SHA256",t[t.PKIX_RSA_PSS_2048_SHA256=16]="PKIX_RSA_PSS_2048_SHA256",t[t.PKIX_RSA_PSS_3072_SHA256=17]="PKIX_RSA_PSS_3072_SHA256",t[t.PKIX_RSA_PSS_4096_SHA256=18]="PKIX_RSA_PSS_4096_SHA256",t[t.PKIX_ECDSA_P256_HMAC_SHA_256=6]="PKIX_ECDSA_P256_HMAC_SHA_256",t[t.PKIX_ECDSA_P256_SHA_256=5]="PKIX_ECDSA_P256_SHA_256",t[t.PKIX_ECDSA_P384_SHA_384=12]="PKIX_ECDSA_P384_SHA_384",t[t.PKIX_ECDSA_P521_SHA_512=13]="PKIX_ECDSA_P521_SHA_512",t[t.PKIX_ED25519=7]="PKIX_ED25519",t[t.PKIX_ED25519_PH=8]="PKIX_ED25519_PH",t[t.LMS_SHA256=14]="LMS_SHA256",t[t.LMOTS_SHA256=15]="LMOTS_SHA256"})(rn||(Ur.PublicKeyDetails=rn={}));function qSe(t){switch(t){case 0:case"PUBLIC_KEY_DETAILS_UNSPECIFIED":return rn.PUBLIC_KEY_DETAILS_UNSPECIFIED;case 1:case"PKCS1_RSA_PKCS1V5":return rn.PKCS1_RSA_PKCS1V5;case 2:case"PKCS1_RSA_PSS":return rn.PKCS1_RSA_PSS;case 3:case"PKIX_RSA_PKCS1V5":return rn.PKIX_RSA_PKCS1V5;case 4:case"PKIX_RSA_PSS":return rn.PKIX_RSA_PSS;case 9:case"PKIX_RSA_PKCS1V15_2048_SHA256":return rn.PKIX_RSA_PKCS1V15_2048_SHA256;case 10:case"PKIX_RSA_PKCS1V15_3072_SHA256":return rn.PKIX_RSA_PKCS1V15_3072_SHA256;case 11:case"PKIX_RSA_PKCS1V15_4096_SHA256":return rn.PKIX_RSA_PKCS1V15_4096_SHA256;case 16:case"PKIX_RSA_PSS_2048_SHA256":return rn.PKIX_RSA_PSS_2048_SHA256;case 17:case"PKIX_RSA_PSS_3072_SHA256":return rn.PKIX_RSA_PSS_3072_SHA256;case 18:case"PKIX_RSA_PSS_4096_SHA256":return rn.PKIX_RSA_PSS_4096_SHA256;case 6:case"PKIX_ECDSA_P256_HMAC_SHA_256":return rn.PKIX_ECDSA_P256_HMAC_SHA_256;case 5:case"PKIX_ECDSA_P256_SHA_256":return rn.PKIX_ECDSA_P256_SHA_256;case 12:case"PKIX_ECDSA_P384_SHA_384":return rn.PKIX_ECDSA_P384_SHA_384;case 13:case"PKIX_ECDSA_P521_SHA_512":return rn.PKIX_ECDSA_P521_SHA_512;case 7:case"PKIX_ED25519":return rn.PKIX_ED25519;case 8:case"PKIX_ED25519_PH":return rn.PKIX_ED25519_PH;case 14:case"LMS_SHA256":return rn.LMS_SHA256;case 15:case"LMOTS_SHA256":return rn.LMOTS_SHA256;default:throw new globalThis.Error("Unrecognized enum value "+t+" for enum PublicKeyDetails")}}function WSe(t){switch(t){case rn.PUBLIC_KEY_DETAILS_UNSPECIFIED:return"PUBLIC_KEY_DETAILS_UNSPECIFIED";case rn.PKCS1_RSA_PKCS1V5:return"PKCS1_RSA_PKCS1V5";case rn.PKCS1_RSA_PSS:return"PKCS1_RSA_PSS";case rn.PKIX_RSA_PKCS1V5:return"PKIX_RSA_PKCS1V5";case rn.PKIX_RSA_PSS:return"PKIX_RSA_PSS";case rn.PKIX_RSA_PKCS1V15_2048_SHA256:return"PKIX_RSA_PKCS1V15_2048_SHA256";case rn.PKIX_RSA_PKCS1V15_3072_SHA256:return"PKIX_RSA_PKCS1V15_3072_SHA256";case rn.PKIX_RSA_PKCS1V15_4096_SHA256:return"PKIX_RSA_PKCS1V15_4096_SHA256";case rn.PKIX_RSA_PSS_2048_SHA256:return"PKIX_RSA_PSS_2048_SHA256";case rn.PKIX_RSA_PSS_3072_SHA256:return"PKIX_RSA_PSS_3072_SHA256";case rn.PKIX_RSA_PSS_4096_SHA256:return"PKIX_RSA_PSS_4096_SHA256";case rn.PKIX_ECDSA_P256_HMAC_SHA_256:return"PKIX_ECDSA_P256_HMAC_SHA_256";case rn.PKIX_ECDSA_P256_SHA_256:return"PKIX_ECDSA_P256_SHA_256";case rn.PKIX_ECDSA_P384_SHA_384:return"PKIX_ECDSA_P384_SHA_384";case rn.PKIX_ECDSA_P521_SHA_512:return"PKIX_ECDSA_P521_SHA_512";case rn.PKIX_ED25519:return"PKIX_ED25519";case rn.PKIX_ED25519_PH:return"PKIX_ED25519_PH";case rn.LMS_SHA256:return"LMS_SHA256";case rn.LMOTS_SHA256:return"LMOTS_SHA256";default:throw new globalThis.Error("Unrecognized enum value "+t+" for enum PublicKeyDetails")}}var CA;(function(t){t[t.SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED=0]="SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED",t[t.EMAIL=1]="EMAIL",t[t.URI=2]="URI",t[t.OTHER_NAME=3]="OTHER_NAME"})(CA||(Ur.SubjectAlternativeNameType=CA={}));function YSe(t){switch(t){case 0:case"SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED":return CA.SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED;case 1:case"EMAIL":return CA.EMAIL;case 2:case"URI":return CA.URI;case 3:case"OTHER_NAME":return CA.OTHER_NAME;default:throw new globalThis.Error("Unrecognized enum value "+t+" for enum SubjectAlternativeNameType")}}function VSe(t){switch(t){case CA.SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED:return"SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED";case CA.EMAIL:return"EMAIL";case CA.URI:return"URI";case CA.OTHER_NAME:return"OTHER_NAME";default:throw new globalThis.Error("Unrecognized enum value "+t+" for enum SubjectAlternativeNameType")}}Ur.HashOutput={fromJSON(t){return{algorithm:ds(t.algorithm)?jSe(t.algorithm):0,digest:ds(t.digest)?Buffer.from(Xm(t.digest)):Buffer.alloc(0)}},toJSON(t){let e={};return t.algorithm!==0&&(e.algorithm=GSe(t.algorithm)),t.digest.length!==0&&(e.digest=$m(t.digest)),e}};Ur.MessageSignature={fromJSON(t){return{messageDigest:ds(t.messageDigest)?Ur.HashOutput.fromJSON(t.messageDigest):void 0,signature:ds(t.signature)?Buffer.from(Xm(t.signature)):Buffer.alloc(0)}},toJSON(t){let e={};return t.messageDigest!==void 0&&(e.messageDigest=Ur.HashOutput.toJSON(t.messageDigest)),t.signature.length!==0&&(e.signature=$m(t.signature)),e}};Ur.LogId={fromJSON(t){return{keyId:ds(t.keyId)?Buffer.from(Xm(t.keyId)):Buffer.alloc(0)}},toJSON(t){let e={};return t.keyId.length!==0&&(e.keyId=$m(t.keyId)),e}};Ur.RFC3161SignedTimestamp={fromJSON(t){return{signedTimestamp:ds(t.signedTimestamp)?Buffer.from(Xm(t.signedTimestamp)):Buffer.alloc(0)}},toJSON(t){let e={};return t.signedTimestamp.length!==0&&(e.signedTimestamp=$m(t.signedTimestamp)),e}};Ur.PublicKey={fromJSON(t){return{rawBytes:ds(t.rawBytes)?Buffer.from(Xm(t.rawBytes)):void 0,keyDetails:ds(t.keyDetails)?qSe(t.keyDetails):0,validFor:ds(t.validFor)?Ur.TimeRange.fromJSON(t.validFor):void 0}},toJSON(t){let e={};return t.rawBytes!==void 0&&(e.rawBytes=$m(t.rawBytes)),t.keyDetails!==0&&(e.keyDetails=WSe(t.keyDetails)),t.validFor!==void 0&&(e.validFor=Ur.TimeRange.toJSON(t.validFor)),e}};Ur.PublicKeyIdentifier={fromJSON(t){return{hint:ds(t.hint)?globalThis.String(t.hint):""}},toJSON(t){let e={};return t.hint!==""&&(e.hint=t.hint),e}};Ur.ObjectIdentifier={fromJSON(t){return{id:globalThis.Array.isArray(t?.id)?t.id.map(e=>globalThis.Number(e)):[]}},toJSON(t){let e={};return t.id?.length&&(e.id=t.id.map(r=>Math.round(r))),e}};Ur.ObjectIdentifierValuePair={fromJSON(t){return{oid:ds(t.oid)?Ur.ObjectIdentifier.fromJSON(t.oid):void 0,value:ds(t.value)?Buffer.from(Xm(t.value)):Buffer.alloc(0)}},toJSON(t){let e={};return t.oid!==void 0&&(e.oid=Ur.ObjectIdentifier.toJSON(t.oid)),t.value.length!==0&&(e.value=$m(t.value)),e}};Ur.DistinguishedName={fromJSON(t){return{organization:ds(t.organization)?globalThis.String(t.organization):"",commonName:ds(t.commonName)?globalThis.String(t.commonName):""}},toJSON(t){let e={};return t.organization!==""&&(e.organization=t.organization),t.commonName!==""&&(e.commonName=t.commonName),e}};Ur.X509Certificate={fromJSON(t){return{rawBytes:ds(t.rawBytes)?Buffer.from(Xm(t.rawBytes)):Buffer.alloc(0)}},toJSON(t){let e={};return t.rawBytes.length!==0&&(e.rawBytes=$m(t.rawBytes)),e}};Ur.SubjectAlternativeName={fromJSON(t){return{type:ds(t.type)?YSe(t.type):0,identity:ds(t.regexp)?{$case:"regexp",regexp:globalThis.String(t.regexp)}:ds(t.value)?{$case:"value",value:globalThis.String(t.value)}:void 0}},toJSON(t){let e={};return t.type!==0&&(e.type=VSe(t.type)),t.identity?.$case==="regexp"?e.regexp=t.identity.regexp:t.identity?.$case==="value"&&(e.value=t.identity.value),e}};Ur.X509CertificateChain={fromJSON(t){return{certificates:globalThis.Array.isArray(t?.certificates)?t.certificates.map(e=>Ur.X509Certificate.fromJSON(e)):[]}},toJSON(t){let e={};return t.certificates?.length&&(e.certificates=t.certificates.map(r=>Ur.X509Certificate.toJSON(r))),e}};Ur.TimeRange={fromJSON(t){return{start:ds(t.start)?HSe(t.start):void 0,end:ds(t.end)?HSe(t.end):void 0}},toJSON(t){let e={};return t.start!==void 0&&(e.start=t.start.toISOString()),t.end!==void 0&&(e.end=t.end.toISOString()),e}};function Xm(t){return Uint8Array.from(globalThis.Buffer.from(t,"base64"))}function $m(t){return globalThis.Buffer.from(t).toString("base64")}function pIt(t){let e=(globalThis.Number(t.seconds)||0)*1e3;return e+=(t.nanos||0)/1e6,new globalThis.Date(e)}function HSe(t){return t instanceof globalThis.Date?t:typeof t=="string"?new globalThis.Date(t):pIt(AIt.Timestamp.fromJSON(t))}function ds(t){return t!=null}});var FV=_(ms=>{"use strict";Object.defineProperty(ms,"__esModule",{value:!0});ms.TransparencyLogEntry=ms.InclusionPromise=ms.InclusionProof=ms.Checkpoint=ms.KindVersion=void 0;var JSe=Ww();ms.KindVersion={fromJSON(t){return{kind:Ta(t.kind)?globalThis.String(t.kind):"",version:Ta(t.version)?globalThis.String(t.version):""}},toJSON(t){let e={};return t.kind!==""&&(e.kind=t.kind),t.version!==""&&(e.version=t.version),e}};ms.Checkpoint={fromJSON(t){return{envelope:Ta(t.envelope)?globalThis.String(t.envelope):""}},toJSON(t){let e={};return t.envelope!==""&&(e.envelope=t.envelope),e}};ms.InclusionProof={fromJSON(t){return{logIndex:Ta(t.logIndex)?globalThis.String(t.logIndex):"0",rootHash:Ta(t.rootHash)?Buffer.from(qN(t.rootHash)):Buffer.alloc(0),treeSize:Ta(t.treeSize)?globalThis.String(t.treeSize):"0",hashes:globalThis.Array.isArray(t?.hashes)?t.hashes.map(e=>Buffer.from(qN(e))):[],checkpoint:Ta(t.checkpoint)?ms.Checkpoint.fromJSON(t.checkpoint):void 0}},toJSON(t){let e={};return t.logIndex!=="0"&&(e.logIndex=t.logIndex),t.rootHash.length!==0&&(e.rootHash=WN(t.rootHash)),t.treeSize!=="0"&&(e.treeSize=t.treeSize),t.hashes?.length&&(e.hashes=t.hashes.map(r=>WN(r))),t.checkpoint!==void 0&&(e.checkpoint=ms.Checkpoint.toJSON(t.checkpoint)),e}};ms.InclusionPromise={fromJSON(t){return{signedEntryTimestamp:Ta(t.signedEntryTimestamp)?Buffer.from(qN(t.signedEntryTimestamp)):Buffer.alloc(0)}},toJSON(t){let e={};return t.signedEntryTimestamp.length!==0&&(e.signedEntryTimestamp=WN(t.signedEntryTimestamp)),e}};ms.TransparencyLogEntry={fromJSON(t){return{logIndex:Ta(t.logIndex)?globalThis.String(t.logIndex):"0",logId:Ta(t.logId)?JSe.LogId.fromJSON(t.logId):void 0,kindVersion:Ta(t.kindVersion)?ms.KindVersion.fromJSON(t.kindVersion):void 0,integratedTime:Ta(t.integratedTime)?globalThis.String(t.integratedTime):"0",inclusionPromise:Ta(t.inclusionPromise)?ms.InclusionPromise.fromJSON(t.inclusionPromise):void 0,inclusionProof:Ta(t.inclusionProof)?ms.InclusionProof.fromJSON(t.inclusionProof):void 0,canonicalizedBody:Ta(t.canonicalizedBody)?Buffer.from(qN(t.canonicalizedBody)):Buffer.alloc(0)}},toJSON(t){let e={};return t.logIndex!=="0"&&(e.logIndex=t.logIndex),t.logId!==void 0&&(e.logId=JSe.LogId.toJSON(t.logId)),t.kindVersion!==void 0&&(e.kindVersion=ms.KindVersion.toJSON(t.kindVersion)),t.integratedTime!=="0"&&(e.integratedTime=t.integratedTime),t.inclusionPromise!==void 0&&(e.inclusionPromise=ms.InclusionPromise.toJSON(t.inclusionPromise)),t.inclusionProof!==void 0&&(e.inclusionProof=ms.InclusionProof.toJSON(t.inclusionProof)),t.canonicalizedBody.length!==0&&(e.canonicalizedBody=WN(t.canonicalizedBody)),e}};function qN(t){return Uint8Array.from(globalThis.Buffer.from(t,"base64"))}function WN(t){return globalThis.Buffer.from(t).toString("base64")}function Ta(t){return t!=null}});var NV=_(Zc=>{"use strict";Object.defineProperty(Zc,"__esModule",{value:!0});Zc.Bundle=Zc.VerificationMaterial=Zc.TimestampVerificationData=void 0;var KSe=TV(),wA=Ww(),zSe=FV();Zc.TimestampVerificationData={fromJSON(t){return{rfc3161Timestamps:globalThis.Array.isArray(t?.rfc3161Timestamps)?t.rfc3161Timestamps.map(e=>wA.RFC3161SignedTimestamp.fromJSON(e)):[]}},toJSON(t){let e={};return t.rfc3161Timestamps?.length&&(e.rfc3161Timestamps=t.rfc3161Timestamps.map(r=>wA.RFC3161SignedTimestamp.toJSON(r))),e}};Zc.VerificationMaterial={fromJSON(t){return{content:yg(t.publicKey)?{$case:"publicKey",publicKey:wA.PublicKeyIdentifier.fromJSON(t.publicKey)}:yg(t.x509CertificateChain)?{$case:"x509CertificateChain",x509CertificateChain:wA.X509CertificateChain.fromJSON(t.x509CertificateChain)}:yg(t.certificate)?{$case:"certificate",certificate:wA.X509Certificate.fromJSON(t.certificate)}:void 0,tlogEntries:globalThis.Array.isArray(t?.tlogEntries)?t.tlogEntries.map(e=>zSe.TransparencyLogEntry.fromJSON(e)):[],timestampVerificationData:yg(t.timestampVerificationData)?Zc.TimestampVerificationData.fromJSON(t.timestampVerificationData):void 0}},toJSON(t){let e={};return t.content?.$case==="publicKey"?e.publicKey=wA.PublicKeyIdentifier.toJSON(t.content.publicKey):t.content?.$case==="x509CertificateChain"?e.x509CertificateChain=wA.X509CertificateChain.toJSON(t.content.x509CertificateChain):t.content?.$case==="certificate"&&(e.certificate=wA.X509Certificate.toJSON(t.content.certificate)),t.tlogEntries?.length&&(e.tlogEntries=t.tlogEntries.map(r=>zSe.TransparencyLogEntry.toJSON(r))),t.timestampVerificationData!==void 0&&(e.timestampVerificationData=Zc.TimestampVerificationData.toJSON(t.timestampVerificationData)),e}};Zc.Bundle={fromJSON(t){return{mediaType:yg(t.mediaType)?globalThis.String(t.mediaType):"",verificationMaterial:yg(t.verificationMaterial)?Zc.VerificationMaterial.fromJSON(t.verificationMaterial):void 0,content:yg(t.messageSignature)?{$case:"messageSignature",messageSignature:wA.MessageSignature.fromJSON(t.messageSignature)}:yg(t.dsseEnvelope)?{$case:"dsseEnvelope",dsseEnvelope:KSe.Envelope.fromJSON(t.dsseEnvelope)}:void 0}},toJSON(t){let e={};return t.mediaType!==""&&(e.mediaType=t.mediaType),t.verificationMaterial!==void 0&&(e.verificationMaterial=Zc.VerificationMaterial.toJSON(t.verificationMaterial)),t.content?.$case==="messageSignature"?e.messageSignature=wA.MessageSignature.toJSON(t.content.messageSignature):t.content?.$case==="dsseEnvelope"&&(e.dsseEnvelope=KSe.Envelope.toJSON(t.content.dsseEnvelope)),e}};function yg(t){return t!=null}});var OV=_(Ti=>{"use strict";Object.defineProperty(Ti,"__esModule",{value:!0});Ti.ClientTrustConfig=Ti.SigningConfig=Ti.TrustedRoot=Ti.CertificateAuthority=Ti.TransparencyLogInstance=void 0;var El=Ww();Ti.TransparencyLogInstance={fromJSON(t){return{baseUrl:ia(t.baseUrl)?globalThis.String(t.baseUrl):"",hashAlgorithm:ia(t.hashAlgorithm)?(0,El.hashAlgorithmFromJSON)(t.hashAlgorithm):0,publicKey:ia(t.publicKey)?El.PublicKey.fromJSON(t.publicKey):void 0,logId:ia(t.logId)?El.LogId.fromJSON(t.logId):void 0,checkpointKeyId:ia(t.checkpointKeyId)?El.LogId.fromJSON(t.checkpointKeyId):void 0}},toJSON(t){let e={};return t.baseUrl!==""&&(e.baseUrl=t.baseUrl),t.hashAlgorithm!==0&&(e.hashAlgorithm=(0,El.hashAlgorithmToJSON)(t.hashAlgorithm)),t.publicKey!==void 0&&(e.publicKey=El.PublicKey.toJSON(t.publicKey)),t.logId!==void 0&&(e.logId=El.LogId.toJSON(t.logId)),t.checkpointKeyId!==void 0&&(e.checkpointKeyId=El.LogId.toJSON(t.checkpointKeyId)),e}};Ti.CertificateAuthority={fromJSON(t){return{subject:ia(t.subject)?El.DistinguishedName.fromJSON(t.subject):void 0,uri:ia(t.uri)?globalThis.String(t.uri):"",certChain:ia(t.certChain)?El.X509CertificateChain.fromJSON(t.certChain):void 0,validFor:ia(t.validFor)?El.TimeRange.fromJSON(t.validFor):void 0}},toJSON(t){let e={};return t.subject!==void 0&&(e.subject=El.DistinguishedName.toJSON(t.subject)),t.uri!==""&&(e.uri=t.uri),t.certChain!==void 0&&(e.certChain=El.X509CertificateChain.toJSON(t.certChain)),t.validFor!==void 0&&(e.validFor=El.TimeRange.toJSON(t.validFor)),e}};Ti.TrustedRoot={fromJSON(t){return{mediaType:ia(t.mediaType)?globalThis.String(t.mediaType):"",tlogs:globalThis.Array.isArray(t?.tlogs)?t.tlogs.map(e=>Ti.TransparencyLogInstance.fromJSON(e)):[],certificateAuthorities:globalThis.Array.isArray(t?.certificateAuthorities)?t.certificateAuthorities.map(e=>Ti.CertificateAuthority.fromJSON(e)):[],ctlogs:globalThis.Array.isArray(t?.ctlogs)?t.ctlogs.map(e=>Ti.TransparencyLogInstance.fromJSON(e)):[],timestampAuthorities:globalThis.Array.isArray(t?.timestampAuthorities)?t.timestampAuthorities.map(e=>Ti.CertificateAuthority.fromJSON(e)):[]}},toJSON(t){let e={};return t.mediaType!==""&&(e.mediaType=t.mediaType),t.tlogs?.length&&(e.tlogs=t.tlogs.map(r=>Ti.TransparencyLogInstance.toJSON(r))),t.certificateAuthorities?.length&&(e.certificateAuthorities=t.certificateAuthorities.map(r=>Ti.CertificateAuthority.toJSON(r))),t.ctlogs?.length&&(e.ctlogs=t.ctlogs.map(r=>Ti.TransparencyLogInstance.toJSON(r))),t.timestampAuthorities?.length&&(e.timestampAuthorities=t.timestampAuthorities.map(r=>Ti.CertificateAuthority.toJSON(r))),e}};Ti.SigningConfig={fromJSON(t){return{mediaType:ia(t.mediaType)?globalThis.String(t.mediaType):"",caUrl:ia(t.caUrl)?globalThis.String(t.caUrl):"",oidcUrl:ia(t.oidcUrl)?globalThis.String(t.oidcUrl):"",tlogUrls:globalThis.Array.isArray(t?.tlogUrls)?t.tlogUrls.map(e=>globalThis.String(e)):[],tsaUrls:globalThis.Array.isArray(t?.tsaUrls)?t.tsaUrls.map(e=>globalThis.String(e)):[]}},toJSON(t){let e={};return t.mediaType!==""&&(e.mediaType=t.mediaType),t.caUrl!==""&&(e.caUrl=t.caUrl),t.oidcUrl!==""&&(e.oidcUrl=t.oidcUrl),t.tlogUrls?.length&&(e.tlogUrls=t.tlogUrls),t.tsaUrls?.length&&(e.tsaUrls=t.tsaUrls),e}};Ti.ClientTrustConfig={fromJSON(t){return{mediaType:ia(t.mediaType)?globalThis.String(t.mediaType):"",trustedRoot:ia(t.trustedRoot)?Ti.TrustedRoot.fromJSON(t.trustedRoot):void 0,signingConfig:ia(t.signingConfig)?Ti.SigningConfig.fromJSON(t.signingConfig):void 0}},toJSON(t){let e={};return t.mediaType!==""&&(e.mediaType=t.mediaType),t.trustedRoot!==void 0&&(e.trustedRoot=Ti.TrustedRoot.toJSON(t.trustedRoot)),t.signingConfig!==void 0&&(e.signingConfig=Ti.SigningConfig.toJSON(t.signingConfig)),e}};function ia(t){return t!=null}});var $Se=_(Vr=>{"use strict";Object.defineProperty(Vr,"__esModule",{value:!0});Vr.Input=Vr.Artifact=Vr.ArtifactVerificationOptions_ObserverTimestampOptions=Vr.ArtifactVerificationOptions_TlogIntegratedTimestampOptions=Vr.ArtifactVerificationOptions_TimestampAuthorityOptions=Vr.ArtifactVerificationOptions_CtlogOptions=Vr.ArtifactVerificationOptions_TlogOptions=Vr.ArtifactVerificationOptions=Vr.PublicKeyIdentities=Vr.CertificateIdentities=Vr.CertificateIdentity=void 0;var ZSe=NV(),Eg=Ww(),XSe=OV();Vr.CertificateIdentity={fromJSON(t){return{issuer:gi(t.issuer)?globalThis.String(t.issuer):"",san:gi(t.san)?Eg.SubjectAlternativeName.fromJSON(t.san):void 0,oids:globalThis.Array.isArray(t?.oids)?t.oids.map(e=>Eg.ObjectIdentifierValuePair.fromJSON(e)):[]}},toJSON(t){let e={};return t.issuer!==""&&(e.issuer=t.issuer),t.san!==void 0&&(e.san=Eg.SubjectAlternativeName.toJSON(t.san)),t.oids?.length&&(e.oids=t.oids.map(r=>Eg.ObjectIdentifierValuePair.toJSON(r))),e}};Vr.CertificateIdentities={fromJSON(t){return{identities:globalThis.Array.isArray(t?.identities)?t.identities.map(e=>Vr.CertificateIdentity.fromJSON(e)):[]}},toJSON(t){let e={};return t.identities?.length&&(e.identities=t.identities.map(r=>Vr.CertificateIdentity.toJSON(r))),e}};Vr.PublicKeyIdentities={fromJSON(t){return{publicKeys:globalThis.Array.isArray(t?.publicKeys)?t.publicKeys.map(e=>Eg.PublicKey.fromJSON(e)):[]}},toJSON(t){let e={};return t.publicKeys?.length&&(e.publicKeys=t.publicKeys.map(r=>Eg.PublicKey.toJSON(r))),e}};Vr.ArtifactVerificationOptions={fromJSON(t){return{signers:gi(t.certificateIdentities)?{$case:"certificateIdentities",certificateIdentities:Vr.CertificateIdentities.fromJSON(t.certificateIdentities)}:gi(t.publicKeys)?{$case:"publicKeys",publicKeys:Vr.PublicKeyIdentities.fromJSON(t.publicKeys)}:void 0,tlogOptions:gi(t.tlogOptions)?Vr.ArtifactVerificationOptions_TlogOptions.fromJSON(t.tlogOptions):void 0,ctlogOptions:gi(t.ctlogOptions)?Vr.ArtifactVerificationOptions_CtlogOptions.fromJSON(t.ctlogOptions):void 0,tsaOptions:gi(t.tsaOptions)?Vr.ArtifactVerificationOptions_TimestampAuthorityOptions.fromJSON(t.tsaOptions):void 0,integratedTsOptions:gi(t.integratedTsOptions)?Vr.ArtifactVerificationOptions_TlogIntegratedTimestampOptions.fromJSON(t.integratedTsOptions):void 0,observerOptions:gi(t.observerOptions)?Vr.ArtifactVerificationOptions_ObserverTimestampOptions.fromJSON(t.observerOptions):void 0}},toJSON(t){let e={};return t.signers?.$case==="certificateIdentities"?e.certificateIdentities=Vr.CertificateIdentities.toJSON(t.signers.certificateIdentities):t.signers?.$case==="publicKeys"&&(e.publicKeys=Vr.PublicKeyIdentities.toJSON(t.signers.publicKeys)),t.tlogOptions!==void 0&&(e.tlogOptions=Vr.ArtifactVerificationOptions_TlogOptions.toJSON(t.tlogOptions)),t.ctlogOptions!==void 0&&(e.ctlogOptions=Vr.ArtifactVerificationOptions_CtlogOptions.toJSON(t.ctlogOptions)),t.tsaOptions!==void 0&&(e.tsaOptions=Vr.ArtifactVerificationOptions_TimestampAuthorityOptions.toJSON(t.tsaOptions)),t.integratedTsOptions!==void 0&&(e.integratedTsOptions=Vr.ArtifactVerificationOptions_TlogIntegratedTimestampOptions.toJSON(t.integratedTsOptions)),t.observerOptions!==void 0&&(e.observerOptions=Vr.ArtifactVerificationOptions_ObserverTimestampOptions.toJSON(t.observerOptions)),e}};Vr.ArtifactVerificationOptions_TlogOptions={fromJSON(t){return{threshold:gi(t.threshold)?globalThis.Number(t.threshold):0,performOnlineVerification:gi(t.performOnlineVerification)?globalThis.Boolean(t.performOnlineVerification):!1,disable:gi(t.disable)?globalThis.Boolean(t.disable):!1}},toJSON(t){let e={};return t.threshold!==0&&(e.threshold=Math.round(t.threshold)),t.performOnlineVerification!==!1&&(e.performOnlineVerification=t.performOnlineVerification),t.disable!==!1&&(e.disable=t.disable),e}};Vr.ArtifactVerificationOptions_CtlogOptions={fromJSON(t){return{threshold:gi(t.threshold)?globalThis.Number(t.threshold):0,disable:gi(t.disable)?globalThis.Boolean(t.disable):!1}},toJSON(t){let e={};return t.threshold!==0&&(e.threshold=Math.round(t.threshold)),t.disable!==!1&&(e.disable=t.disable),e}};Vr.ArtifactVerificationOptions_TimestampAuthorityOptions={fromJSON(t){return{threshold:gi(t.threshold)?globalThis.Number(t.threshold):0,disable:gi(t.disable)?globalThis.Boolean(t.disable):!1}},toJSON(t){let e={};return t.threshold!==0&&(e.threshold=Math.round(t.threshold)),t.disable!==!1&&(e.disable=t.disable),e}};Vr.ArtifactVerificationOptions_TlogIntegratedTimestampOptions={fromJSON(t){return{threshold:gi(t.threshold)?globalThis.Number(t.threshold):0,disable:gi(t.disable)?globalThis.Boolean(t.disable):!1}},toJSON(t){let e={};return t.threshold!==0&&(e.threshold=Math.round(t.threshold)),t.disable!==!1&&(e.disable=t.disable),e}};Vr.ArtifactVerificationOptions_ObserverTimestampOptions={fromJSON(t){return{threshold:gi(t.threshold)?globalThis.Number(t.threshold):0,disable:gi(t.disable)?globalThis.Boolean(t.disable):!1}},toJSON(t){let e={};return t.threshold!==0&&(e.threshold=Math.round(t.threshold)),t.disable!==!1&&(e.disable=t.disable),e}};Vr.Artifact={fromJSON(t){return{data:gi(t.artifactUri)?{$case:"artifactUri",artifactUri:globalThis.String(t.artifactUri)}:gi(t.artifact)?{$case:"artifact",artifact:Buffer.from(hIt(t.artifact))}:gi(t.artifactDigest)?{$case:"artifactDigest",artifactDigest:Eg.HashOutput.fromJSON(t.artifactDigest)}:void 0}},toJSON(t){let e={};return t.data?.$case==="artifactUri"?e.artifactUri=t.data.artifactUri:t.data?.$case==="artifact"?e.artifact=gIt(t.data.artifact):t.data?.$case==="artifactDigest"&&(e.artifactDigest=Eg.HashOutput.toJSON(t.data.artifactDigest)),e}};Vr.Input={fromJSON(t){return{artifactTrustRoot:gi(t.artifactTrustRoot)?XSe.TrustedRoot.fromJSON(t.artifactTrustRoot):void 0,artifactVerificationOptions:gi(t.artifactVerificationOptions)?Vr.ArtifactVerificationOptions.fromJSON(t.artifactVerificationOptions):void 0,bundle:gi(t.bundle)?ZSe.Bundle.fromJSON(t.bundle):void 0,artifact:gi(t.artifact)?Vr.Artifact.fromJSON(t.artifact):void 0}},toJSON(t){let e={};return t.artifactTrustRoot!==void 0&&(e.artifactTrustRoot=XSe.TrustedRoot.toJSON(t.artifactTrustRoot)),t.artifactVerificationOptions!==void 0&&(e.artifactVerificationOptions=Vr.ArtifactVerificationOptions.toJSON(t.artifactVerificationOptions)),t.bundle!==void 0&&(e.bundle=ZSe.Bundle.toJSON(t.bundle)),t.artifact!==void 0&&(e.artifact=Vr.Artifact.toJSON(t.artifact)),e}};function hIt(t){return Uint8Array.from(globalThis.Buffer.from(t,"base64"))}function gIt(t){return globalThis.Buffer.from(t).toString("base64")}function gi(t){return t!=null}});var mP=_(Xc=>{"use strict";var dIt=Xc&&Xc.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),Yw=Xc&&Xc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&dIt(e,t,r)};Object.defineProperty(Xc,"__esModule",{value:!0});Yw(TV(),Xc);Yw(NV(),Xc);Yw(Ww(),Xc);Yw(FV(),Xc);Yw(OV(),Xc);Yw($Se(),Xc)});var YN=_(Il=>{"use strict";Object.defineProperty(Il,"__esModule",{value:!0});Il.BUNDLE_V03_MEDIA_TYPE=Il.BUNDLE_V03_LEGACY_MEDIA_TYPE=Il.BUNDLE_V02_MEDIA_TYPE=Il.BUNDLE_V01_MEDIA_TYPE=void 0;Il.isBundleWithCertificateChain=mIt;Il.isBundleWithPublicKey=yIt;Il.isBundleWithMessageSignature=EIt;Il.isBundleWithDsseEnvelope=IIt;Il.BUNDLE_V01_MEDIA_TYPE="application/vnd.dev.sigstore.bundle+json;version=0.1";Il.BUNDLE_V02_MEDIA_TYPE="application/vnd.dev.sigstore.bundle+json;version=0.2";Il.BUNDLE_V03_LEGACY_MEDIA_TYPE="application/vnd.dev.sigstore.bundle+json;version=0.3";Il.BUNDLE_V03_MEDIA_TYPE="application/vnd.dev.sigstore.bundle.v0.3+json";function mIt(t){return t.verificationMaterial.content.$case==="x509CertificateChain"}function yIt(t){return t.verificationMaterial.content.$case==="publicKey"}function EIt(t){return t.content.$case==="messageSignature"}function IIt(t){return t.content.$case==="dsseEnvelope"}});var tDe=_(JN=>{"use strict";Object.defineProperty(JN,"__esModule",{value:!0});JN.toMessageSignatureBundle=wIt;JN.toDSSEBundle=BIt;var CIt=mP(),VN=YN();function wIt(t){return{mediaType:t.certificateChain?VN.BUNDLE_V02_MEDIA_TYPE:VN.BUNDLE_V03_MEDIA_TYPE,content:{$case:"messageSignature",messageSignature:{messageDigest:{algorithm:CIt.HashAlgorithm.SHA2_256,digest:t.digest},signature:t.signature}},verificationMaterial:eDe(t)}}function BIt(t){return{mediaType:t.certificateChain?VN.BUNDLE_V02_MEDIA_TYPE:VN.BUNDLE_V03_MEDIA_TYPE,content:{$case:"dsseEnvelope",dsseEnvelope:vIt(t)},verificationMaterial:eDe(t)}}function vIt(t){return{payloadType:t.artifactType,payload:t.artifact,signatures:[SIt(t)]}}function SIt(t){return{keyid:t.keyHint||"",sig:t.signature}}function eDe(t){return{content:DIt(t),tlogEntries:[],timestampVerificationData:{rfc3161Timestamps:[]}}}function DIt(t){return t.certificate?t.certificateChain?{$case:"x509CertificateChain",x509CertificateChain:{certificates:[{rawBytes:t.certificate}]}}:{$case:"certificate",certificate:{rawBytes:t.certificate}}:{$case:"publicKey",publicKey:{hint:t.keyHint||""}}}});var MV=_(KN=>{"use strict";Object.defineProperty(KN,"__esModule",{value:!0});KN.ValidationError=void 0;var LV=class extends Error{constructor(e,r){super(e),this.fields=r}};KN.ValidationError=LV});var UV=_(ey=>{"use strict";Object.defineProperty(ey,"__esModule",{value:!0});ey.assertBundle=PIt;ey.assertBundleV01=rDe;ey.isBundleV01=bIt;ey.assertBundleV02=xIt;ey.assertBundleLatest=kIt;var zN=MV();function PIt(t){let e=ZN(t);if(e.length>0)throw new zN.ValidationError("invalid bundle",e)}function rDe(t){let e=[];if(e.push(...ZN(t)),e.push(...QIt(t)),e.length>0)throw new zN.ValidationError("invalid v0.1 bundle",e)}function bIt(t){try{return rDe(t),!0}catch{return!1}}function xIt(t){let e=[];if(e.push(...ZN(t)),e.push(...nDe(t)),e.length>0)throw new zN.ValidationError("invalid v0.2 bundle",e)}function kIt(t){let e=[];if(e.push(...ZN(t)),e.push(...nDe(t)),e.push(...RIt(t)),e.length>0)throw new zN.ValidationError("invalid bundle",e)}function ZN(t){let e=[];if((t.mediaType===void 0||!t.mediaType.match(/^application\/vnd\.dev\.sigstore\.bundle\+json;version=\d\.\d/)&&!t.mediaType.match(/^application\/vnd\.dev\.sigstore\.bundle\.v\d\.\d\+json/))&&e.push("mediaType"),t.content===void 0)e.push("content");else switch(t.content.$case){case"messageSignature":t.content.messageSignature.messageDigest===void 0?e.push("content.messageSignature.messageDigest"):t.content.messageSignature.messageDigest.digest.length===0&&e.push("content.messageSignature.messageDigest.digest"),t.content.messageSignature.signature.length===0&&e.push("content.messageSignature.signature");break;case"dsseEnvelope":t.content.dsseEnvelope.payload.length===0&&e.push("content.dsseEnvelope.payload"),t.content.dsseEnvelope.signatures.length!==1?e.push("content.dsseEnvelope.signatures"):t.content.dsseEnvelope.signatures[0].sig.length===0&&e.push("content.dsseEnvelope.signatures[0].sig");break}if(t.verificationMaterial===void 0)e.push("verificationMaterial");else{if(t.verificationMaterial.content===void 0)e.push("verificationMaterial.content");else switch(t.verificationMaterial.content.$case){case"x509CertificateChain":t.verificationMaterial.content.x509CertificateChain.certificates.length===0&&e.push("verificationMaterial.content.x509CertificateChain.certificates"),t.verificationMaterial.content.x509CertificateChain.certificates.forEach((r,s)=>{r.rawBytes.length===0&&e.push(`verificationMaterial.content.x509CertificateChain.certificates[${s}].rawBytes`)});break;case"certificate":t.verificationMaterial.content.certificate.rawBytes.length===0&&e.push("verificationMaterial.content.certificate.rawBytes");break}t.verificationMaterial.tlogEntries===void 0?e.push("verificationMaterial.tlogEntries"):t.verificationMaterial.tlogEntries.length>0&&t.verificationMaterial.tlogEntries.forEach((r,s)=>{r.logId===void 0&&e.push(`verificationMaterial.tlogEntries[${s}].logId`),r.kindVersion===void 0&&e.push(`verificationMaterial.tlogEntries[${s}].kindVersion`)})}return e}function QIt(t){let e=[];return t.verificationMaterial&&t.verificationMaterial.tlogEntries?.length>0&&t.verificationMaterial.tlogEntries.forEach((r,s)=>{r.inclusionPromise===void 0&&e.push(`verificationMaterial.tlogEntries[${s}].inclusionPromise`)}),e}function nDe(t){let e=[];return t.verificationMaterial&&t.verificationMaterial.tlogEntries?.length>0&&t.verificationMaterial.tlogEntries.forEach((r,s)=>{r.inclusionProof===void 0?e.push(`verificationMaterial.tlogEntries[${s}].inclusionProof`):r.inclusionProof.checkpoint===void 0&&e.push(`verificationMaterial.tlogEntries[${s}].inclusionProof.checkpoint`)}),e}function RIt(t){let e=[];return t.verificationMaterial?.content?.$case==="x509CertificateChain"&&e.push("verificationMaterial.content.$case"),e}});var sDe=_(BA=>{"use strict";Object.defineProperty(BA,"__esModule",{value:!0});BA.envelopeToJSON=BA.envelopeFromJSON=BA.bundleToJSON=BA.bundleFromJSON=void 0;var XN=mP(),iDe=YN(),_V=UV(),TIt=t=>{let e=XN.Bundle.fromJSON(t);switch(e.mediaType){case iDe.BUNDLE_V01_MEDIA_TYPE:(0,_V.assertBundleV01)(e);break;case iDe.BUNDLE_V02_MEDIA_TYPE:(0,_V.assertBundleV02)(e);break;default:(0,_V.assertBundleLatest)(e);break}return e};BA.bundleFromJSON=TIt;var FIt=t=>XN.Bundle.toJSON(t);BA.bundleToJSON=FIt;var NIt=t=>XN.Envelope.fromJSON(t);BA.envelopeFromJSON=NIt;var OIt=t=>XN.Envelope.toJSON(t);BA.envelopeToJSON=OIt});var EP=_(Zr=>{"use strict";Object.defineProperty(Zr,"__esModule",{value:!0});Zr.isBundleV01=Zr.assertBundleV02=Zr.assertBundleV01=Zr.assertBundleLatest=Zr.assertBundle=Zr.envelopeToJSON=Zr.envelopeFromJSON=Zr.bundleToJSON=Zr.bundleFromJSON=Zr.ValidationError=Zr.isBundleWithPublicKey=Zr.isBundleWithMessageSignature=Zr.isBundleWithDsseEnvelope=Zr.isBundleWithCertificateChain=Zr.BUNDLE_V03_MEDIA_TYPE=Zr.BUNDLE_V03_LEGACY_MEDIA_TYPE=Zr.BUNDLE_V02_MEDIA_TYPE=Zr.BUNDLE_V01_MEDIA_TYPE=Zr.toMessageSignatureBundle=Zr.toDSSEBundle=void 0;var oDe=tDe();Object.defineProperty(Zr,"toDSSEBundle",{enumerable:!0,get:function(){return oDe.toDSSEBundle}});Object.defineProperty(Zr,"toMessageSignatureBundle",{enumerable:!0,get:function(){return oDe.toMessageSignatureBundle}});var Ig=YN();Object.defineProperty(Zr,"BUNDLE_V01_MEDIA_TYPE",{enumerable:!0,get:function(){return Ig.BUNDLE_V01_MEDIA_TYPE}});Object.defineProperty(Zr,"BUNDLE_V02_MEDIA_TYPE",{enumerable:!0,get:function(){return Ig.BUNDLE_V02_MEDIA_TYPE}});Object.defineProperty(Zr,"BUNDLE_V03_LEGACY_MEDIA_TYPE",{enumerable:!0,get:function(){return Ig.BUNDLE_V03_LEGACY_MEDIA_TYPE}});Object.defineProperty(Zr,"BUNDLE_V03_MEDIA_TYPE",{enumerable:!0,get:function(){return Ig.BUNDLE_V03_MEDIA_TYPE}});Object.defineProperty(Zr,"isBundleWithCertificateChain",{enumerable:!0,get:function(){return Ig.isBundleWithCertificateChain}});Object.defineProperty(Zr,"isBundleWithDsseEnvelope",{enumerable:!0,get:function(){return Ig.isBundleWithDsseEnvelope}});Object.defineProperty(Zr,"isBundleWithMessageSignature",{enumerable:!0,get:function(){return Ig.isBundleWithMessageSignature}});Object.defineProperty(Zr,"isBundleWithPublicKey",{enumerable:!0,get:function(){return Ig.isBundleWithPublicKey}});var LIt=MV();Object.defineProperty(Zr,"ValidationError",{enumerable:!0,get:function(){return LIt.ValidationError}});var $N=sDe();Object.defineProperty(Zr,"bundleFromJSON",{enumerable:!0,get:function(){return $N.bundleFromJSON}});Object.defineProperty(Zr,"bundleToJSON",{enumerable:!0,get:function(){return $N.bundleToJSON}});Object.defineProperty(Zr,"envelopeFromJSON",{enumerable:!0,get:function(){return $N.envelopeFromJSON}});Object.defineProperty(Zr,"envelopeToJSON",{enumerable:!0,get:function(){return $N.envelopeToJSON}});var yP=UV();Object.defineProperty(Zr,"assertBundle",{enumerable:!0,get:function(){return yP.assertBundle}});Object.defineProperty(Zr,"assertBundleLatest",{enumerable:!0,get:function(){return yP.assertBundleLatest}});Object.defineProperty(Zr,"assertBundleV01",{enumerable:!0,get:function(){return yP.assertBundleV01}});Object.defineProperty(Zr,"assertBundleV02",{enumerable:!0,get:function(){return yP.assertBundleV02}});Object.defineProperty(Zr,"isBundleV01",{enumerable:!0,get:function(){return yP.isBundleV01}})});var IP=_(tO=>{"use strict";Object.defineProperty(tO,"__esModule",{value:!0});tO.ByteStream=void 0;var HV=class extends Error{},eO=class t{constructor(e){this.start=0,e?(this.buf=e,this.view=Buffer.from(e)):(this.buf=new ArrayBuffer(0),this.view=Buffer.from(this.buf))}get buffer(){return this.view.subarray(0,this.start)}get length(){return this.view.byteLength}get position(){return this.start}seek(e){this.start=e}slice(e,r){let s=e+r;if(s>this.length)throw new HV("request past end of buffer");return this.view.subarray(e,s)}appendChar(e){this.ensureCapacity(1),this.view[this.start]=e,this.start+=1}appendUint16(e){this.ensureCapacity(2);let r=new Uint16Array([e]),s=new Uint8Array(r.buffer);this.view[this.start]=s[1],this.view[this.start+1]=s[0],this.start+=2}appendUint24(e){this.ensureCapacity(3);let r=new Uint32Array([e]),s=new Uint8Array(r.buffer);this.view[this.start]=s[2],this.view[this.start+1]=s[1],this.view[this.start+2]=s[0],this.start+=3}appendView(e){this.ensureCapacity(e.length),this.view.set(e,this.start),this.start+=e.length}getBlock(e){if(e<=0)return Buffer.alloc(0);if(this.start+e>this.view.length)throw new Error("request past end of buffer");let r=this.view.subarray(this.start,this.start+e);return this.start+=e,r}getUint8(){return this.getBlock(1)[0]}getUint16(){let e=this.getBlock(2);return e[0]<<8|e[1]}ensureCapacity(e){if(this.start+e>this.view.byteLength){let r=t.BLOCK_SIZE+(e>t.BLOCK_SIZE?e:0);this.realloc(this.view.byteLength+r)}}realloc(e){let r=new ArrayBuffer(e),s=Buffer.from(r);s.set(this.view),this.buf=r,this.view=s}};tO.ByteStream=eO;eO.BLOCK_SIZE=1024});var rO=_(Vw=>{"use strict";Object.defineProperty(Vw,"__esModule",{value:!0});Vw.ASN1TypeError=Vw.ASN1ParseError=void 0;var jV=class extends Error{};Vw.ASN1ParseError=jV;var GV=class extends Error{};Vw.ASN1TypeError=GV});var lDe=_(nO=>{"use strict";Object.defineProperty(nO,"__esModule",{value:!0});nO.decodeLength=MIt;nO.encodeLength=UIt;var aDe=rO();function MIt(t){let e=t.getUint8();if(!(e&128))return e;let r=e&127;if(r>6)throw new aDe.ASN1ParseError("length exceeds 6 byte limit");let s=0;for(let a=0;a0n;)r.unshift(Number(e&255n)),e=e>>8n;return Buffer.from([128|r.length,...r])}});var uDe=_(Cg=>{"use strict";Object.defineProperty(Cg,"__esModule",{value:!0});Cg.parseInteger=jIt;Cg.parseStringASCII=cDe;Cg.parseTime=GIt;Cg.parseOID=qIt;Cg.parseBoolean=WIt;Cg.parseBitString=YIt;var _It=/^(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\.\d{3})?Z$/,HIt=/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\.\d{3})?Z$/;function jIt(t){let e=0,r=t.length,s=t[e],a=s>127,n=a?255:0;for(;s==n&&++e=50?1900:2e3,s[1]=a.toString()}return new Date(`${s[1]}-${s[2]}-${s[3]}T${s[4]}:${s[5]}:${s[6]}Z`)}function qIt(t){let e=0,r=t.length,s=t[e++],a=Math.floor(s/40),n=s%40,c=`${a}.${n}`,f=0;for(;e=f;--p)a.push(c>>p&1)}return a}});var ADe=_(iO=>{"use strict";Object.defineProperty(iO,"__esModule",{value:!0});iO.ASN1Tag=void 0;var fDe=rO(),ty={BOOLEAN:1,INTEGER:2,BIT_STRING:3,OCTET_STRING:4,OBJECT_IDENTIFIER:6,SEQUENCE:16,SET:17,PRINTABLE_STRING:19,UTC_TIME:23,GENERALIZED_TIME:24},qV={UNIVERSAL:0,APPLICATION:1,CONTEXT_SPECIFIC:2,PRIVATE:3},WV=class{constructor(e){if(this.number=e&31,this.constructed=(e&32)===32,this.class=e>>6,this.number===31)throw new fDe.ASN1ParseError("long form tags not supported");if(this.class===qV.UNIVERSAL&&this.number===0)throw new fDe.ASN1ParseError("unsupported tag 0x00")}isUniversal(){return this.class===qV.UNIVERSAL}isContextSpecific(e){let r=this.class===qV.CONTEXT_SPECIFIC;return e!==void 0?r&&this.number===e:r}isBoolean(){return this.isUniversal()&&this.number===ty.BOOLEAN}isInteger(){return this.isUniversal()&&this.number===ty.INTEGER}isBitString(){return this.isUniversal()&&this.number===ty.BIT_STRING}isOctetString(){return this.isUniversal()&&this.number===ty.OCTET_STRING}isOID(){return this.isUniversal()&&this.number===ty.OBJECT_IDENTIFIER}isUTCTime(){return this.isUniversal()&&this.number===ty.UTC_TIME}isGeneralizedTime(){return this.isUniversal()&&this.number===ty.GENERALIZED_TIME}toDER(){return this.number|(this.constructed?32:0)|this.class<<6}};iO.ASN1Tag=WV});var dDe=_(oO=>{"use strict";Object.defineProperty(oO,"__esModule",{value:!0});oO.ASN1Obj=void 0;var YV=IP(),ry=rO(),hDe=lDe(),Jw=uDe(),VIt=ADe(),sO=class{constructor(e,r,s){this.tag=e,this.value=r,this.subs=s}static parseBuffer(e){return gDe(new YV.ByteStream(e))}toDER(){let e=new YV.ByteStream;if(this.subs.length>0)for(let a of this.subs)e.appendView(a.toDER());else e.appendView(this.value);let r=e.buffer,s=new YV.ByteStream;return s.appendChar(this.tag.toDER()),s.appendView((0,hDe.encodeLength)(r.length)),s.appendView(r),s.buffer}toBoolean(){if(!this.tag.isBoolean())throw new ry.ASN1TypeError("not a boolean");return(0,Jw.parseBoolean)(this.value)}toInteger(){if(!this.tag.isInteger())throw new ry.ASN1TypeError("not an integer");return(0,Jw.parseInteger)(this.value)}toOID(){if(!this.tag.isOID())throw new ry.ASN1TypeError("not an OID");return(0,Jw.parseOID)(this.value)}toDate(){switch(!0){case this.tag.isUTCTime():return(0,Jw.parseTime)(this.value,!0);case this.tag.isGeneralizedTime():return(0,Jw.parseTime)(this.value,!1);default:throw new ry.ASN1TypeError("not a date")}}toBitString(){if(!this.tag.isBitString())throw new ry.ASN1TypeError("not a bit string");return(0,Jw.parseBitString)(this.value)}};oO.ASN1Obj=sO;function gDe(t){let e=new VIt.ASN1Tag(t.getUint8()),r=(0,hDe.decodeLength)(t),s=t.slice(t.position,r),a=t.position,n=[];if(e.constructed)n=pDe(t,r);else if(e.isOctetString())try{n=pDe(t,r)}catch{}return n.length===0&&t.seek(a+r),new sO(e,s,n)}function pDe(t,e){let r=t.position+e;if(r>t.length)throw new ry.ASN1ParseError("invalid length");let s=[];for(;t.position{"use strict";Object.defineProperty(aO,"__esModule",{value:!0});aO.ASN1Obj=void 0;var JIt=dDe();Object.defineProperty(aO,"ASN1Obj",{enumerable:!0,get:function(){return JIt.ASN1Obj}})});var Kw=_(wg=>{"use strict";var KIt=wg&&wg.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(wg,"__esModule",{value:!0});wg.createPublicKey=zIt;wg.digest=ZIt;wg.verify=XIt;wg.bufferEqual=$It;var CP=KIt(Ie("crypto"));function zIt(t,e="spki"){return typeof t=="string"?CP.default.createPublicKey(t):CP.default.createPublicKey({key:t,format:"der",type:e})}function ZIt(t,...e){let r=CP.default.createHash(t);for(let s of e)r.update(s);return r.digest()}function XIt(t,e,r,s){try{return CP.default.verify(s,t,e,r)}catch{return!1}}function $It(t,e){try{return CP.default.timingSafeEqual(t,e)}catch{return!1}}});var mDe=_(VV=>{"use strict";Object.defineProperty(VV,"__esModule",{value:!0});VV.preAuthEncoding=tCt;var eCt="DSSEv1";function tCt(t,e){let r=[eCt,t.length,t,e.length,""].join(" ");return Buffer.concat([Buffer.from(r,"ascii"),e])}});var IDe=_(cO=>{"use strict";Object.defineProperty(cO,"__esModule",{value:!0});cO.base64Encode=rCt;cO.base64Decode=nCt;var yDe="base64",EDe="utf-8";function rCt(t){return Buffer.from(t,EDe).toString(yDe)}function nCt(t){return Buffer.from(t,yDe).toString(EDe)}});var CDe=_(KV=>{"use strict";Object.defineProperty(KV,"__esModule",{value:!0});KV.canonicalize=JV;function JV(t){let e="";if(t===null||typeof t!="object"||t.toJSON!=null)e+=JSON.stringify(t);else if(Array.isArray(t)){e+="[";let r=!0;t.forEach(s=>{r||(e+=","),r=!1,e+=JV(s)}),e+="]"}else{e+="{";let r=!0;Object.keys(t).sort().forEach(s=>{r||(e+=","),r=!1,e+=JSON.stringify(s),e+=":",e+=JV(t[s])}),e+="}"}return e}});var zV=_(uO=>{"use strict";Object.defineProperty(uO,"__esModule",{value:!0});uO.toDER=oCt;uO.fromDER=aCt;var iCt=/-----BEGIN (.*)-----/,sCt=/-----END (.*)-----/;function oCt(t){let e="";return t.split(` -`).forEach(r=>{r.match(iCt)||r.match(sCt)||(e+=r)}),Buffer.from(e,"base64")}function aCt(t,e="CERTIFICATE"){let s=t.toString("base64").match(/.{1,64}/g)||"";return[`-----BEGIN ${e}-----`,...s,`-----END ${e}-----`].join(` -`).concat(` -`)}});var fO=_(zw=>{"use strict";Object.defineProperty(zw,"__esModule",{value:!0});zw.SHA2_HASH_ALGOS=zw.ECDSA_SIGNATURE_ALGOS=void 0;zw.ECDSA_SIGNATURE_ALGOS={"1.2.840.10045.4.3.1":"sha224","1.2.840.10045.4.3.2":"sha256","1.2.840.10045.4.3.3":"sha384","1.2.840.10045.4.3.4":"sha512"};zw.SHA2_HASH_ALGOS={"2.16.840.1.101.3.4.2.1":"sha256","2.16.840.1.101.3.4.2.2":"sha384","2.16.840.1.101.3.4.2.3":"sha512"}});var XV=_(AO=>{"use strict";Object.defineProperty(AO,"__esModule",{value:!0});AO.RFC3161TimestampVerificationError=void 0;var ZV=class extends Error{};AO.RFC3161TimestampVerificationError=ZV});var BDe=_(vA=>{"use strict";var lCt=vA&&vA.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),cCt=vA&&vA.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),uCt=vA&&vA.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&lCt(e,t,r);return cCt(e,t),e};Object.defineProperty(vA,"__esModule",{value:!0});vA.TSTInfo=void 0;var wDe=uCt(Kw()),fCt=fO(),ACt=XV(),$V=class{constructor(e){this.root=e}get version(){return this.root.subs[0].toInteger()}get genTime(){return this.root.subs[4].toDate()}get messageImprintHashAlgorithm(){let e=this.messageImprintObj.subs[0].subs[0].toOID();return fCt.SHA2_HASH_ALGOS[e]}get messageImprintHashedMessage(){return this.messageImprintObj.subs[1].value}get raw(){return this.root.toDER()}verify(e){let r=wDe.digest(this.messageImprintHashAlgorithm,e);if(!wDe.bufferEqual(r,this.messageImprintHashedMessage))throw new ACt.RFC3161TimestampVerificationError("message imprint does not match artifact")}get messageImprintObj(){return this.root.subs[2]}};vA.TSTInfo=$V});var SDe=_(SA=>{"use strict";var pCt=SA&&SA.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),hCt=SA&&SA.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),gCt=SA&&SA.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&pCt(e,t,r);return hCt(e,t),e};Object.defineProperty(SA,"__esModule",{value:!0});SA.RFC3161Timestamp=void 0;var dCt=lO(),e7=gCt(Kw()),vDe=fO(),wP=XV(),mCt=BDe(),yCt="1.2.840.113549.1.7.2",ECt="1.2.840.113549.1.9.16.1.4",ICt="1.2.840.113549.1.9.4",t7=class t{constructor(e){this.root=e}static parse(e){let r=dCt.ASN1Obj.parseBuffer(e);return new t(r)}get status(){return this.pkiStatusInfoObj.subs[0].toInteger()}get contentType(){return this.contentTypeObj.toOID()}get eContentType(){return this.eContentTypeObj.toOID()}get signingTime(){return this.tstInfo.genTime}get signerIssuer(){return this.signerSidObj.subs[0].value}get signerSerialNumber(){return this.signerSidObj.subs[1].value}get signerDigestAlgorithm(){let e=this.signerDigestAlgorithmObj.subs[0].toOID();return vDe.SHA2_HASH_ALGOS[e]}get signatureAlgorithm(){let e=this.signatureAlgorithmObj.subs[0].toOID();return vDe.ECDSA_SIGNATURE_ALGOS[e]}get signatureValue(){return this.signatureValueObj.value}get tstInfo(){return new mCt.TSTInfo(this.eContentObj.subs[0].subs[0])}verify(e,r){if(!this.timeStampTokenObj)throw new wP.RFC3161TimestampVerificationError("timeStampToken is missing");if(this.contentType!==yCt)throw new wP.RFC3161TimestampVerificationError(`incorrect content type: ${this.contentType}`);if(this.eContentType!==ECt)throw new wP.RFC3161TimestampVerificationError(`incorrect encapsulated content type: ${this.eContentType}`);this.tstInfo.verify(e),this.verifyMessageDigest(),this.verifySignature(r)}verifyMessageDigest(){let e=e7.digest(this.signerDigestAlgorithm,this.tstInfo.raw),r=this.messageDigestAttributeObj.subs[1].subs[0].value;if(!e7.bufferEqual(e,r))throw new wP.RFC3161TimestampVerificationError("signed data does not match tstInfo")}verifySignature(e){let r=this.signedAttrsObj.toDER();if(r[0]=49,!e7.verify(r,e,this.signatureValue,this.signatureAlgorithm))throw new wP.RFC3161TimestampVerificationError("signature verification failed")}get pkiStatusInfoObj(){return this.root.subs[0]}get timeStampTokenObj(){return this.root.subs[1]}get contentTypeObj(){return this.timeStampTokenObj.subs[0]}get signedDataObj(){return this.timeStampTokenObj.subs.find(r=>r.tag.isContextSpecific(0)).subs[0]}get encapContentInfoObj(){return this.signedDataObj.subs[2]}get signerInfosObj(){let e=this.signedDataObj;return e.subs[e.subs.length-1]}get signerInfoObj(){return this.signerInfosObj.subs[0]}get eContentTypeObj(){return this.encapContentInfoObj.subs[0]}get eContentObj(){return this.encapContentInfoObj.subs[1]}get signedAttrsObj(){return this.signerInfoObj.subs.find(r=>r.tag.isContextSpecific(0))}get messageDigestAttributeObj(){return this.signedAttrsObj.subs.find(r=>r.subs[0].tag.isOID()&&r.subs[0].toOID()===ICt)}get signerSidObj(){return this.signerInfoObj.subs[1]}get signerDigestAlgorithmObj(){return this.signerInfoObj.subs[2]}get signatureAlgorithmObj(){return this.signerInfoObj.subs[4]}get signatureValueObj(){return this.signerInfoObj.subs[5]}};SA.RFC3161Timestamp=t7});var DDe=_(pO=>{"use strict";Object.defineProperty(pO,"__esModule",{value:!0});pO.RFC3161Timestamp=void 0;var CCt=SDe();Object.defineProperty(pO,"RFC3161Timestamp",{enumerable:!0,get:function(){return CCt.RFC3161Timestamp}})});var bDe=_(DA=>{"use strict";var wCt=DA&&DA.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),BCt=DA&&DA.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),vCt=DA&&DA.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&wCt(e,t,r);return BCt(e,t),e};Object.defineProperty(DA,"__esModule",{value:!0});DA.SignedCertificateTimestamp=void 0;var SCt=vCt(Kw()),PDe=IP(),r7=class t{constructor(e){this.version=e.version,this.logID=e.logID,this.timestamp=e.timestamp,this.extensions=e.extensions,this.hashAlgorithm=e.hashAlgorithm,this.signatureAlgorithm=e.signatureAlgorithm,this.signature=e.signature}get datetime(){return new Date(Number(this.timestamp.readBigInt64BE()))}get algorithm(){switch(this.hashAlgorithm){case 0:return"none";case 1:return"md5";case 2:return"sha1";case 3:return"sha224";case 4:return"sha256";case 5:return"sha384";case 6:return"sha512";default:return"unknown"}}verify(e,r){let s=new PDe.ByteStream;return s.appendChar(this.version),s.appendChar(0),s.appendView(this.timestamp),s.appendUint16(1),s.appendView(e),s.appendUint16(this.extensions.byteLength),this.extensions.byteLength>0&&s.appendView(this.extensions),SCt.verify(s.buffer,r,this.signature,this.algorithm)}static parse(e){let r=new PDe.ByteStream(e),s=r.getUint8(),a=r.getBlock(32),n=r.getBlock(8),c=r.getUint16(),f=r.getBlock(c),p=r.getUint8(),h=r.getUint8(),E=r.getUint16(),C=r.getBlock(E);if(r.position!==e.length)throw new Error("SCT buffer length mismatch");return new t({version:s,logID:a,timestamp:n,extensions:f,hashAlgorithm:p,signatureAlgorithm:h,signature:C})}};DA.SignedCertificateTimestamp=r7});var c7=_(sa=>{"use strict";Object.defineProperty(sa,"__esModule",{value:!0});sa.X509SCTExtension=sa.X509SubjectKeyIDExtension=sa.X509AuthorityKeyIDExtension=sa.X509SubjectAlternativeNameExtension=sa.X509KeyUsageExtension=sa.X509BasicConstraintsExtension=sa.X509Extension=void 0;var DCt=IP(),PCt=bDe(),ph=class{constructor(e){this.root=e}get oid(){return this.root.subs[0].toOID()}get critical(){return this.root.subs.length===3?this.root.subs[1].toBoolean():!1}get value(){return this.extnValueObj.value}get valueObj(){return this.extnValueObj}get extnValueObj(){return this.root.subs[this.root.subs.length-1]}};sa.X509Extension=ph;var n7=class extends ph{get isCA(){return this.sequence.subs[0]?.toBoolean()??!1}get pathLenConstraint(){return this.sequence.subs.length>1?this.sequence.subs[1].toInteger():void 0}get sequence(){return this.extnValueObj.subs[0]}};sa.X509BasicConstraintsExtension=n7;var i7=class extends ph{get digitalSignature(){return this.bitString[0]===1}get keyCertSign(){return this.bitString[5]===1}get crlSign(){return this.bitString[6]===1}get bitString(){return this.extnValueObj.subs[0].toBitString()}};sa.X509KeyUsageExtension=i7;var s7=class extends ph{get rfc822Name(){return this.findGeneralName(1)?.value.toString("ascii")}get uri(){return this.findGeneralName(6)?.value.toString("ascii")}otherName(e){let r=this.findGeneralName(0);return r===void 0||r.subs[0].toOID()!==e?void 0:r.subs[1].subs[0].value.toString("ascii")}findGeneralName(e){return this.generalNames.find(r=>r.tag.isContextSpecific(e))}get generalNames(){return this.extnValueObj.subs[0].subs}};sa.X509SubjectAlternativeNameExtension=s7;var o7=class extends ph{get keyIdentifier(){return this.findSequenceMember(0)?.value}findSequenceMember(e){return this.sequence.subs.find(r=>r.tag.isContextSpecific(e))}get sequence(){return this.extnValueObj.subs[0]}};sa.X509AuthorityKeyIDExtension=o7;var a7=class extends ph{get keyIdentifier(){return this.extnValueObj.subs[0].value}};sa.X509SubjectKeyIDExtension=a7;var l7=class extends ph{constructor(e){super(e)}get signedCertificateTimestamps(){let e=this.extnValueObj.subs[0].value,r=new DCt.ByteStream(e),s=r.getUint16()+2,a=[];for(;r.position{"use strict";var bCt=ic&&ic.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),xCt=ic&&ic.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),kDe=ic&&ic.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&bCt(e,t,r);return xCt(e,t),e};Object.defineProperty(ic,"__esModule",{value:!0});ic.X509Certificate=ic.EXTENSION_OID_SCT=void 0;var kCt=lO(),xDe=kDe(Kw()),QCt=fO(),RCt=kDe(zV()),ny=c7(),TCt="2.5.29.14",FCt="2.5.29.15",NCt="2.5.29.17",OCt="2.5.29.19",LCt="2.5.29.35";ic.EXTENSION_OID_SCT="1.3.6.1.4.1.11129.2.4.2";var u7=class t{constructor(e){this.root=e}static parse(e){let r=typeof e=="string"?RCt.toDER(e):e,s=kCt.ASN1Obj.parseBuffer(r);return new t(s)}get tbsCertificate(){return this.tbsCertificateObj}get version(){return`v${(this.versionObj.subs[0].toInteger()+BigInt(1)).toString()}`}get serialNumber(){return this.serialNumberObj.value}get notBefore(){return this.validityObj.subs[0].toDate()}get notAfter(){return this.validityObj.subs[1].toDate()}get issuer(){return this.issuerObj.value}get subject(){return this.subjectObj.value}get publicKey(){return this.subjectPublicKeyInfoObj.toDER()}get signatureAlgorithm(){let e=this.signatureAlgorithmObj.subs[0].toOID();return QCt.ECDSA_SIGNATURE_ALGOS[e]}get signatureValue(){return this.signatureValueObj.value.subarray(1)}get subjectAltName(){let e=this.extSubjectAltName;return e?.uri||e?.rfc822Name}get extensions(){return this.extensionsObj?.subs[0]?.subs||[]}get extKeyUsage(){let e=this.findExtension(FCt);return e?new ny.X509KeyUsageExtension(e):void 0}get extBasicConstraints(){let e=this.findExtension(OCt);return e?new ny.X509BasicConstraintsExtension(e):void 0}get extSubjectAltName(){let e=this.findExtension(NCt);return e?new ny.X509SubjectAlternativeNameExtension(e):void 0}get extAuthorityKeyID(){let e=this.findExtension(LCt);return e?new ny.X509AuthorityKeyIDExtension(e):void 0}get extSubjectKeyID(){let e=this.findExtension(TCt);return e?new ny.X509SubjectKeyIDExtension(e):void 0}get extSCT(){let e=this.findExtension(ic.EXTENSION_OID_SCT);return e?new ny.X509SCTExtension(e):void 0}get isCA(){let e=this.extBasicConstraints?.isCA||!1;return this.extKeyUsage?e&&this.extKeyUsage.keyCertSign:e}extension(e){let r=this.findExtension(e);return r?new ny.X509Extension(r):void 0}verify(e){let r=e?.publicKey||this.publicKey,s=xDe.createPublicKey(r);return xDe.verify(this.tbsCertificate.toDER(),s,this.signatureValue,this.signatureAlgorithm)}validForDate(e){return this.notBefore<=e&&e<=this.notAfter}equals(e){return this.root.toDER().equals(e.root.toDER())}clone(){let e=this.root.toDER(),r=Buffer.alloc(e.length);return e.copy(r),t.parse(r)}findExtension(e){return this.extensions.find(r=>r.subs[0].toOID()===e)}get tbsCertificateObj(){return this.root.subs[0]}get signatureAlgorithmObj(){return this.root.subs[1]}get signatureValueObj(){return this.root.subs[2]}get versionObj(){return this.tbsCertificateObj.subs[0]}get serialNumberObj(){return this.tbsCertificateObj.subs[1]}get issuerObj(){return this.tbsCertificateObj.subs[3]}get validityObj(){return this.tbsCertificateObj.subs[4]}get subjectObj(){return this.tbsCertificateObj.subs[5]}get subjectPublicKeyInfoObj(){return this.tbsCertificateObj.subs[6]}get extensionsObj(){return this.tbsCertificateObj.subs.find(e=>e.tag.isContextSpecific(3))}};ic.X509Certificate=u7});var TDe=_(Bg=>{"use strict";Object.defineProperty(Bg,"__esModule",{value:!0});Bg.X509SCTExtension=Bg.X509Certificate=Bg.EXTENSION_OID_SCT=void 0;var RDe=QDe();Object.defineProperty(Bg,"EXTENSION_OID_SCT",{enumerable:!0,get:function(){return RDe.EXTENSION_OID_SCT}});Object.defineProperty(Bg,"X509Certificate",{enumerable:!0,get:function(){return RDe.X509Certificate}});var MCt=c7();Object.defineProperty(Bg,"X509SCTExtension",{enumerable:!0,get:function(){return MCt.X509SCTExtension}})});var Cl=_(Jn=>{"use strict";var UCt=Jn&&Jn.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),_Ct=Jn&&Jn.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),BP=Jn&&Jn.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&UCt(e,t,r);return _Ct(e,t),e};Object.defineProperty(Jn,"__esModule",{value:!0});Jn.X509SCTExtension=Jn.X509Certificate=Jn.EXTENSION_OID_SCT=Jn.ByteStream=Jn.RFC3161Timestamp=Jn.pem=Jn.json=Jn.encoding=Jn.dsse=Jn.crypto=Jn.ASN1Obj=void 0;var HCt=lO();Object.defineProperty(Jn,"ASN1Obj",{enumerable:!0,get:function(){return HCt.ASN1Obj}});Jn.crypto=BP(Kw());Jn.dsse=BP(mDe());Jn.encoding=BP(IDe());Jn.json=BP(CDe());Jn.pem=BP(zV());var jCt=DDe();Object.defineProperty(Jn,"RFC3161Timestamp",{enumerable:!0,get:function(){return jCt.RFC3161Timestamp}});var GCt=IP();Object.defineProperty(Jn,"ByteStream",{enumerable:!0,get:function(){return GCt.ByteStream}});var f7=TDe();Object.defineProperty(Jn,"EXTENSION_OID_SCT",{enumerable:!0,get:function(){return f7.EXTENSION_OID_SCT}});Object.defineProperty(Jn,"X509Certificate",{enumerable:!0,get:function(){return f7.X509Certificate}});Object.defineProperty(Jn,"X509SCTExtension",{enumerable:!0,get:function(){return f7.X509SCTExtension}})});var FDe=_(A7=>{"use strict";Object.defineProperty(A7,"__esModule",{value:!0});A7.extractJWTSubject=WCt;var qCt=Cl();function WCt(t){let e=t.split(".",3),r=JSON.parse(qCt.encoding.base64Decode(e[1]));switch(r.iss){case"https://accounts.google.com":case"https://oauth2.sigstore.dev/auth":return r.email;default:return r.sub}}});var NDe=_((Zrr,YCt)=>{YCt.exports={name:"@sigstore/sign",version:"3.1.0",description:"Sigstore signing library",main:"dist/index.js",types:"dist/index.d.ts",scripts:{clean:"shx rm -rf dist *.tsbuildinfo",build:"tsc --build",test:"jest"},files:["dist"],author:"bdehamer@github.com",license:"Apache-2.0",repository:{type:"git",url:"git+https://github.com/sigstore/sigstore-js.git"},bugs:{url:"https://github.com/sigstore/sigstore-js/issues"},homepage:"https://github.com/sigstore/sigstore-js/tree/main/packages/sign#readme",publishConfig:{provenance:!0},devDependencies:{"@sigstore/jest":"^0.0.0","@sigstore/mock":"^0.10.0","@sigstore/rekor-types":"^3.0.0","@types/make-fetch-happen":"^10.0.4","@types/promise-retry":"^1.1.6"},dependencies:{"@sigstore/bundle":"^3.1.0","@sigstore/core":"^2.0.0","@sigstore/protobuf-specs":"^0.4.0","make-fetch-happen":"^14.0.2","proc-log":"^5.0.0","promise-retry":"^2.0.1"},engines:{node:"^18.17.0 || >=20.5.0"}}});var LDe=_(Zw=>{"use strict";var VCt=Zw&&Zw.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Zw,"__esModule",{value:!0});Zw.getUserAgent=void 0;var ODe=VCt(Ie("os")),JCt=()=>{let t=NDe().version,e=process.version,r=ODe.default.platform(),s=ODe.default.arch();return`sigstore-js/${t} (Node ${e}) (${r}/${s})`};Zw.getUserAgent=JCt});var vg=_(Vi=>{"use strict";var KCt=Vi&&Vi.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),zCt=Vi&&Vi.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),MDe=Vi&&Vi.__importStar||function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var s=[];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(s[s.length]=a);return s},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var s=t(e),a=0;a{"use strict";Object.defineProperty(hO,"__esModule",{value:!0});hO.BaseBundleBuilder=void 0;var p7=class{constructor(e){this.signer=e.signer,this.witnesses=e.witnesses}async create(e){let r=await this.prepare(e).then(f=>this.signer.sign(f)),s=await this.package(e,r),a=await Promise.all(this.witnesses.map(f=>f.testify(s.content,ZCt(r.key)))),n=[],c=[];return a.forEach(({tlogEntries:f,rfc3161Timestamps:p})=>{n.push(...f??[]),c.push(...p??[])}),s.verificationMaterial.tlogEntries=n,s.verificationMaterial.timestampVerificationData={rfc3161Timestamps:c},s}async prepare(e){return e.data}};hO.BaseBundleBuilder=p7;function ZCt(t){switch(t.$case){case"publicKey":return t.publicKey;case"x509Certificate":return t.certificate}}});var d7=_(PA=>{"use strict";var XCt=PA&&PA.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),$Ct=PA&&PA.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),ewt=PA&&PA.__importStar||function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var s=[];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(s[s.length]=a);return s},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var s=t(e),a=0;a{"use strict";Object.defineProperty(gO,"__esModule",{value:!0});gO.DSSEBundleBuilder=void 0;var nwt=vg(),iwt=h7(),swt=d7(),m7=class extends iwt.BaseBundleBuilder{constructor(e){super(e),this.certificateChain=e.certificateChain??!1}async prepare(e){let r=_De(e);return nwt.dsse.preAuthEncoding(r.type,r.data)}async package(e,r){return(0,swt.toDSSEBundle)(_De(e),r,this.certificateChain)}};gO.DSSEBundleBuilder=m7;function _De(t){return{...t,type:t.type??""}}});var jDe=_(dO=>{"use strict";Object.defineProperty(dO,"__esModule",{value:!0});dO.MessageSignatureBundleBuilder=void 0;var owt=h7(),awt=d7(),y7=class extends owt.BaseBundleBuilder{constructor(e){super(e)}async package(e,r){return(0,awt.toMessageSignatureBundle)(e,r)}};dO.MessageSignatureBundleBuilder=y7});var GDe=_(Xw=>{"use strict";Object.defineProperty(Xw,"__esModule",{value:!0});Xw.MessageSignatureBundleBuilder=Xw.DSSEBundleBuilder=void 0;var lwt=HDe();Object.defineProperty(Xw,"DSSEBundleBuilder",{enumerable:!0,get:function(){return lwt.DSSEBundleBuilder}});var cwt=jDe();Object.defineProperty(Xw,"MessageSignatureBundleBuilder",{enumerable:!0,get:function(){return cwt.MessageSignatureBundleBuilder}})});var yO=_(mO=>{"use strict";Object.defineProperty(mO,"__esModule",{value:!0});mO.HTTPError=void 0;var E7=class extends Error{constructor({status:e,message:r,location:s}){super(`(${e}) ${r}`),this.statusCode=e,this.location=s}};mO.HTTPError=E7});var $w=_(SP=>{"use strict";Object.defineProperty(SP,"__esModule",{value:!0});SP.InternalError=void 0;SP.internalError=fwt;var uwt=yO(),EO=class extends Error{constructor({code:e,message:r,cause:s}){super(r),this.name=this.constructor.name,this.cause=s,this.code=e}};SP.InternalError=EO;function fwt(t,e,r){throw t instanceof uwt.HTTPError&&(r+=` - ${t.message}`),new EO({code:e,message:r,cause:t})}});var IO=_((anr,qDe)=>{qDe.exports=fetch});var WDe=_(e1=>{"use strict";var Awt=e1&&e1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e1,"__esModule",{value:!0});e1.CIContextProvider=void 0;var pwt=Awt(IO()),hwt=[gwt,dwt],I7=class{constructor(e="sigstore"){this.audience=e}async getToken(){return Promise.any(hwt.map(e=>e(this.audience))).catch(()=>Promise.reject("CI: no tokens available"))}};e1.CIContextProvider=I7;async function gwt(t){if(!process.env.ACTIONS_ID_TOKEN_REQUEST_URL||!process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN)return Promise.reject("no token available");let e=new URL(process.env.ACTIONS_ID_TOKEN_REQUEST_URL);return e.searchParams.append("audience",t),(await(0,pwt.default)(e.href,{retry:2,headers:{Accept:"application/json",Authorization:`Bearer ${process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN}`}})).json().then(s=>s.value)}async function dwt(){return process.env.SIGSTORE_ID_TOKEN?process.env.SIGSTORE_ID_TOKEN:Promise.reject("no token available")}});var YDe=_(CO=>{"use strict";Object.defineProperty(CO,"__esModule",{value:!0});CO.CIContextProvider=void 0;var mwt=WDe();Object.defineProperty(CO,"CIContextProvider",{enumerable:!0,get:function(){return mwt.CIContextProvider}})});var JDe=_((unr,VDe)=>{var ywt=Symbol("proc-log.meta");VDe.exports={META:ywt,output:{LEVELS:["standard","error","buffer","flush"],KEYS:{standard:"standard",error:"error",buffer:"buffer",flush:"flush"},standard:function(...t){return process.emit("output","standard",...t)},error:function(...t){return process.emit("output","error",...t)},buffer:function(...t){return process.emit("output","buffer",...t)},flush:function(...t){return process.emit("output","flush",...t)}},log:{LEVELS:["notice","error","warn","info","verbose","http","silly","timing","pause","resume"],KEYS:{notice:"notice",error:"error",warn:"warn",info:"info",verbose:"verbose",http:"http",silly:"silly",timing:"timing",pause:"pause",resume:"resume"},error:function(...t){return process.emit("log","error",...t)},notice:function(...t){return process.emit("log","notice",...t)},warn:function(...t){return process.emit("log","warn",...t)},info:function(...t){return process.emit("log","info",...t)},verbose:function(...t){return process.emit("log","verbose",...t)},http:function(...t){return process.emit("log","http",...t)},silly:function(...t){return process.emit("log","silly",...t)},timing:function(...t){return process.emit("log","timing",...t)},pause:function(){return process.emit("log","pause")},resume:function(){return process.emit("log","resume")}},time:{LEVELS:["start","end"],KEYS:{start:"start",end:"end"},start:function(t,e){process.emit("time","start",t);function r(){return process.emit("time","end",t)}if(typeof e=="function"){let s=e();return s&&s.finally?s.finally(r):(r(),s)}return r},end:function(t){return process.emit("time","end",t)}},input:{LEVELS:["start","end","read"],KEYS:{start:"start",end:"end",read:"read"},start:function(t){process.emit("input","start");function e(){return process.emit("input","end")}if(typeof t=="function"){let r=t();return r&&r.finally?r.finally(e):(e(),r)}return e},end:function(){return process.emit("input","end")},read:function(...t){let e,r,s=new Promise((a,n)=>{e=a,r=n});return process.emit("input","read",e,r,...t),s}}}});var ZDe=_((fnr,zDe)=>{"use strict";function KDe(t,e){for(let r in e)Object.defineProperty(t,r,{value:e[r],enumerable:!0,configurable:!0});return t}function Ewt(t,e,r){if(!t||typeof t=="string")throw new TypeError("Please pass an Error to err-code");r||(r={}),typeof e=="object"&&(r=e,e=void 0),e!=null&&(r.code=e);try{return KDe(t,r)}catch{r.message=t.message,r.stack=t.stack;let a=function(){};return a.prototype=Object.create(Object.getPrototypeOf(t)),KDe(new a,r)}}zDe.exports=Ewt});var $De=_((Anr,XDe)=>{function $c(t,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(t)),this._timeouts=t,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}XDe.exports=$c;$c.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts};$c.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timeouts=[],this._cachedTimeouts=null};$c.prototype.retry=function(t){if(this._timeout&&clearTimeout(this._timeout),!t)return!1;var e=new Date().getTime();if(t&&e-this._operationStart>=this._maxRetryTime)return this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(t);var r=this._timeouts.shift();if(r===void 0)if(this._cachedTimeouts)this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),r=this._timeouts.shift();else return!1;var s=this,a=setTimeout(function(){s._attempts++,s._operationTimeoutCb&&(s._timeout=setTimeout(function(){s._operationTimeoutCb(s._attempts)},s._operationTimeout),s._options.unref&&s._timeout.unref()),s._fn(s._attempts)},r);return this._options.unref&&a.unref(),!0};$c.prototype.attempt=function(t,e){this._fn=t,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var r=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){r._operationTimeoutCb()},r._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};$c.prototype.try=function(t){console.log("Using RetryOperation.try() is deprecated"),this.attempt(t)};$c.prototype.start=function(t){console.log("Using RetryOperation.start() is deprecated"),this.attempt(t)};$c.prototype.start=$c.prototype.try;$c.prototype.errors=function(){return this._errors};$c.prototype.attempts=function(){return this._attempts};$c.prototype.mainError=function(){if(this._errors.length===0)return null;for(var t={},e=null,r=0,s=0;s=r&&(e=a,r=c)}return e}});var ePe=_(iy=>{var Iwt=$De();iy.operation=function(t){var e=iy.timeouts(t);return new Iwt(e,{forever:t&&t.forever,unref:t&&t.unref,maxRetryTime:t&&t.maxRetryTime})};iy.timeouts=function(t){if(t instanceof Array)return[].concat(t);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var r in t)e[r]=t[r];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var s=[],a=0;a{tPe.exports=ePe()});var sPe=_((gnr,iPe)=>{"use strict";var Cwt=ZDe(),wwt=rPe(),Bwt=Object.prototype.hasOwnProperty;function nPe(t){return t&&t.code==="EPROMISERETRY"&&Bwt.call(t,"retried")}function vwt(t,e){var r,s;return typeof t=="object"&&typeof e=="function"&&(r=e,e=t,t=r),s=wwt.operation(e),new Promise(function(a,n){s.attempt(function(c){Promise.resolve().then(function(){return t(function(f){throw nPe(f)&&(f=f.retried),Cwt(new Error("Retrying"),"EPROMISERETRY",{retried:f})},c)}).then(a,function(f){nPe(f)&&(f=f.retried,s.retry(f||new Error))||n(f)})})})}iPe.exports=vwt});var wO=_(DP=>{"use strict";var aPe=DP&&DP.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(DP,"__esModule",{value:!0});DP.fetchWithRetry=Owt;var Swt=Ie("http2"),Dwt=aPe(IO()),oPe=JDe(),Pwt=aPe(sPe()),bwt=vg(),xwt=yO(),{HTTP2_HEADER_LOCATION:kwt,HTTP2_HEADER_CONTENT_TYPE:Qwt,HTTP2_HEADER_USER_AGENT:Rwt,HTTP_STATUS_INTERNAL_SERVER_ERROR:Twt,HTTP_STATUS_TOO_MANY_REQUESTS:Fwt,HTTP_STATUS_REQUEST_TIMEOUT:Nwt}=Swt.constants;async function Owt(t,e){return(0,Pwt.default)(async(r,s)=>{let a=e.method||"POST",n={[Rwt]:bwt.ua.getUserAgent(),...e.headers},c=await(0,Dwt.default)(t,{method:a,headers:n,body:e.body,timeout:e.timeout,retry:!1}).catch(f=>(oPe.log.http("fetch",`${a} ${t} attempt ${s} failed with ${f}`),r(f)));if(c.ok)return c;{let f=await Lwt(c);if(oPe.log.http("fetch",`${a} ${t} attempt ${s} failed with ${c.status}`),Mwt(c.status))return r(f);throw f}},Uwt(e.retry))}var Lwt=async t=>{let e=t.statusText,r=t.headers.get(kwt)||void 0;if(t.headers.get(Qwt)?.includes("application/json"))try{e=(await t.json()).message||e}catch{}return new xwt.HTTPError({status:t.status,message:e,location:r})},Mwt=t=>[Nwt,Fwt].includes(t)||t>=Twt,Uwt=t=>typeof t=="boolean"?{retries:t?1:0}:typeof t=="number"?{retries:t}:{retries:0,...t}});var lPe=_(BO=>{"use strict";Object.defineProperty(BO,"__esModule",{value:!0});BO.Fulcio=void 0;var _wt=wO(),C7=class{constructor(e){this.options=e}async createSigningCertificate(e){let{baseURL:r,retry:s,timeout:a}=this.options,n=`${r}/api/v2/signingCert`;return(await(0,_wt.fetchWithRetry)(n,{headers:{"Content-Type":"application/json"},body:JSON.stringify(e),timeout:a,retry:s})).json()}};BO.Fulcio=C7});var cPe=_(vO=>{"use strict";Object.defineProperty(vO,"__esModule",{value:!0});vO.CAClient=void 0;var Hwt=$w(),jwt=lPe(),w7=class{constructor(e){this.fulcio=new jwt.Fulcio({baseURL:e.fulcioBaseURL,retry:e.retry,timeout:e.timeout})}async createSigningCertificate(e,r,s){let a=Gwt(e,r,s);try{let n=await this.fulcio.createSigningCertificate(a);return(n.signedCertificateEmbeddedSct?n.signedCertificateEmbeddedSct:n.signedCertificateDetachedSct).chain.certificates}catch(n){(0,Hwt.internalError)(n,"CA_CREATE_SIGNING_CERTIFICATE_ERROR","error creating signing certificate")}}};vO.CAClient=w7;function Gwt(t,e,r){return{credentials:{oidcIdentityToken:t},publicKeyRequest:{publicKey:{algorithm:"ECDSA",content:e},proofOfPossession:r.toString("base64")}}}});var fPe=_(t1=>{"use strict";var qwt=t1&&t1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(t1,"__esModule",{value:!0});t1.EphemeralSigner=void 0;var uPe=qwt(Ie("crypto")),Wwt="ec",Ywt="P-256",B7=class{constructor(){this.keypair=uPe.default.generateKeyPairSync(Wwt,{namedCurve:Ywt})}async sign(e){let r=uPe.default.sign(null,e,this.keypair.privateKey),s=this.keypair.publicKey.export({format:"pem",type:"spki"}).toString("ascii");return{signature:r,key:{$case:"publicKey",publicKey:s}}}};t1.EphemeralSigner=B7});var APe=_(sy=>{"use strict";Object.defineProperty(sy,"__esModule",{value:!0});sy.FulcioSigner=sy.DEFAULT_FULCIO_URL=void 0;var v7=$w(),Vwt=vg(),Jwt=cPe(),Kwt=fPe();sy.DEFAULT_FULCIO_URL="https://fulcio.sigstore.dev";var S7=class{constructor(e){this.ca=new Jwt.CAClient({...e,fulcioBaseURL:e.fulcioBaseURL||sy.DEFAULT_FULCIO_URL}),this.identityProvider=e.identityProvider,this.keyHolder=e.keyHolder||new Kwt.EphemeralSigner}async sign(e){let r=await this.getIdentityToken(),s;try{s=Vwt.oidc.extractJWTSubject(r)}catch(f){throw new v7.InternalError({code:"IDENTITY_TOKEN_PARSE_ERROR",message:`invalid identity token: ${r}`,cause:f})}let a=await this.keyHolder.sign(Buffer.from(s));if(a.key.$case!=="publicKey")throw new v7.InternalError({code:"CA_CREATE_SIGNING_CERTIFICATE_ERROR",message:"unexpected format for signing key"});let n=await this.ca.createSigningCertificate(r,a.key.publicKey,a.signature);return{signature:(await this.keyHolder.sign(e)).signature,key:{$case:"x509Certificate",certificate:n[0]}}}async getIdentityToken(){try{return await this.identityProvider.getToken()}catch(e){throw new v7.InternalError({code:"IDENTITY_TOKEN_READ_ERROR",message:"error retrieving identity token",cause:e})}}};sy.FulcioSigner=S7});var hPe=_(r1=>{"use strict";Object.defineProperty(r1,"__esModule",{value:!0});r1.FulcioSigner=r1.DEFAULT_FULCIO_URL=void 0;var pPe=APe();Object.defineProperty(r1,"DEFAULT_FULCIO_URL",{enumerable:!0,get:function(){return pPe.DEFAULT_FULCIO_URL}});Object.defineProperty(r1,"FulcioSigner",{enumerable:!0,get:function(){return pPe.FulcioSigner}})});var mPe=_(SO=>{"use strict";Object.defineProperty(SO,"__esModule",{value:!0});SO.Rekor=void 0;var gPe=wO(),D7=class{constructor(e){this.options=e}async createEntry(e){let{baseURL:r,timeout:s,retry:a}=this.options,n=`${r}/api/v1/log/entries`,f=await(await(0,gPe.fetchWithRetry)(n,{headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(e),timeout:s,retry:a})).json();return dPe(f)}async getEntry(e){let{baseURL:r,timeout:s,retry:a}=this.options,n=`${r}/api/v1/log/entries/${e}`,f=await(await(0,gPe.fetchWithRetry)(n,{method:"GET",headers:{Accept:"application/json"},timeout:s,retry:a})).json();return dPe(f)}};SO.Rekor=D7;function dPe(t){let e=Object.entries(t);if(e.length!=1)throw new Error("Received multiple entries in Rekor response");let[r,s]=e[0];return{...s,uuid:r}}});var EPe=_(DO=>{"use strict";Object.defineProperty(DO,"__esModule",{value:!0});DO.TLogClient=void 0;var yPe=$w(),zwt=yO(),Zwt=mPe(),P7=class{constructor(e){this.fetchOnConflict=e.fetchOnConflict??!1,this.rekor=new Zwt.Rekor({baseURL:e.rekorBaseURL,retry:e.retry,timeout:e.timeout})}async createEntry(e){let r;try{r=await this.rekor.createEntry(e)}catch(s){if(Xwt(s)&&this.fetchOnConflict){let a=s.location.split("/").pop()||"";try{r=await this.rekor.getEntry(a)}catch(n){(0,yPe.internalError)(n,"TLOG_FETCH_ENTRY_ERROR","error fetching tlog entry")}}else(0,yPe.internalError)(s,"TLOG_CREATE_ENTRY_ERROR","error creating tlog entry")}return r}};DO.TLogClient=P7;function Xwt(t){return t instanceof zwt.HTTPError&&t.statusCode===409&&t.location!==void 0}});var IPe=_(b7=>{"use strict";Object.defineProperty(b7,"__esModule",{value:!0});b7.toProposedEntry=e1t;var $wt=EP(),Sg=vg(),PP="sha256";function e1t(t,e,r="dsse"){switch(t.$case){case"dsseEnvelope":return r==="intoto"?n1t(t.dsseEnvelope,e):r1t(t.dsseEnvelope,e);case"messageSignature":return t1t(t.messageSignature,e)}}function t1t(t,e){let r=t.messageDigest.digest.toString("hex"),s=t.signature.toString("base64"),a=Sg.encoding.base64Encode(e);return{apiVersion:"0.0.1",kind:"hashedrekord",spec:{data:{hash:{algorithm:PP,value:r}},signature:{content:s,publicKey:{content:a}}}}}function r1t(t,e){let r=JSON.stringify((0,$wt.envelopeToJSON)(t)),s=Sg.encoding.base64Encode(e);return{apiVersion:"0.0.1",kind:"dsse",spec:{proposedContent:{envelope:r,verifiers:[s]}}}}function n1t(t,e){let r=Sg.crypto.digest(PP,t.payload).toString("hex"),s=i1t(t,e),a=Sg.encoding.base64Encode(t.payload.toString("base64")),n=Sg.encoding.base64Encode(t.signatures[0].sig.toString("base64")),c=t.signatures[0].keyid,f=Sg.encoding.base64Encode(e),p={payloadType:t.payloadType,payload:a,signatures:[{sig:n,publicKey:f}]};return c.length>0&&(p.signatures[0].keyid=c),{apiVersion:"0.0.2",kind:"intoto",spec:{content:{envelope:p,hash:{algorithm:PP,value:s},payloadHash:{algorithm:PP,value:r}}}}}function i1t(t,e){let r={payloadType:t.payloadType,payload:t.payload.toString("base64"),signatures:[{sig:t.signatures[0].sig.toString("base64"),publicKey:e}]};return t.signatures[0].keyid.length>0&&(r.signatures[0].keyid=t.signatures[0].keyid),Sg.crypto.digest(PP,Sg.json.canonicalize(r)).toString("hex")}});var CPe=_(oy=>{"use strict";Object.defineProperty(oy,"__esModule",{value:!0});oy.RekorWitness=oy.DEFAULT_REKOR_URL=void 0;var s1t=vg(),o1t=EPe(),a1t=IPe();oy.DEFAULT_REKOR_URL="https://rekor.sigstore.dev";var x7=class{constructor(e){this.entryType=e.entryType,this.tlog=new o1t.TLogClient({...e,rekorBaseURL:e.rekorBaseURL||oy.DEFAULT_REKOR_URL})}async testify(e,r){let s=(0,a1t.toProposedEntry)(e,r,this.entryType),a=await this.tlog.createEntry(s);return l1t(a)}};oy.RekorWitness=x7;function l1t(t){let e=Buffer.from(t.logID,"hex"),r=s1t.encoding.base64Decode(t.body),s=JSON.parse(r),a=t?.verification?.signedEntryTimestamp?c1t(t.verification.signedEntryTimestamp):void 0,n=t?.verification?.inclusionProof?u1t(t.verification.inclusionProof):void 0;return{tlogEntries:[{logIndex:t.logIndex.toString(),logId:{keyId:e},integratedTime:t.integratedTime.toString(),kindVersion:{kind:s.kind,version:s.apiVersion},inclusionPromise:a,inclusionProof:n,canonicalizedBody:Buffer.from(t.body,"base64")}]}}function c1t(t){return{signedEntryTimestamp:Buffer.from(t,"base64")}}function u1t(t){return{logIndex:t.logIndex.toString(),treeSize:t.treeSize.toString(),rootHash:Buffer.from(t.rootHash,"hex"),hashes:t.hashes.map(e=>Buffer.from(e,"hex")),checkpoint:{envelope:t.checkpoint}}}});var wPe=_(PO=>{"use strict";Object.defineProperty(PO,"__esModule",{value:!0});PO.TimestampAuthority=void 0;var f1t=wO(),k7=class{constructor(e){this.options=e}async createTimestamp(e){let{baseURL:r,timeout:s,retry:a}=this.options,n=`${r}/api/v1/timestamp`;return(await(0,f1t.fetchWithRetry)(n,{headers:{"Content-Type":"application/json"},body:JSON.stringify(e),timeout:s,retry:a})).buffer()}};PO.TimestampAuthority=k7});var vPe=_(bO=>{"use strict";Object.defineProperty(bO,"__esModule",{value:!0});bO.TSAClient=void 0;var A1t=$w(),p1t=wPe(),h1t=vg(),BPe="sha256",Q7=class{constructor(e){this.tsa=new p1t.TimestampAuthority({baseURL:e.tsaBaseURL,retry:e.retry,timeout:e.timeout})}async createTimestamp(e){let r={artifactHash:h1t.crypto.digest(BPe,e).toString("base64"),hashAlgorithm:BPe};try{return await this.tsa.createTimestamp(r)}catch(s){(0,A1t.internalError)(s,"TSA_CREATE_TIMESTAMP_ERROR","error creating timestamp")}}};bO.TSAClient=Q7});var SPe=_(xO=>{"use strict";Object.defineProperty(xO,"__esModule",{value:!0});xO.TSAWitness=void 0;var g1t=vPe(),R7=class{constructor(e){this.tsa=new g1t.TSAClient({tsaBaseURL:e.tsaBaseURL,retry:e.retry,timeout:e.timeout})}async testify(e){let r=d1t(e);return{rfc3161Timestamps:[{signedTimestamp:await this.tsa.createTimestamp(r)}]}}};xO.TSAWitness=R7;function d1t(t){switch(t.$case){case"dsseEnvelope":return t.dsseEnvelope.signatures[0].sig;case"messageSignature":return t.messageSignature.signature}}});var PPe=_(Dg=>{"use strict";Object.defineProperty(Dg,"__esModule",{value:!0});Dg.TSAWitness=Dg.RekorWitness=Dg.DEFAULT_REKOR_URL=void 0;var DPe=CPe();Object.defineProperty(Dg,"DEFAULT_REKOR_URL",{enumerable:!0,get:function(){return DPe.DEFAULT_REKOR_URL}});Object.defineProperty(Dg,"RekorWitness",{enumerable:!0,get:function(){return DPe.RekorWitness}});var m1t=SPe();Object.defineProperty(Dg,"TSAWitness",{enumerable:!0,get:function(){return m1t.TSAWitness}})});var F7=_(ys=>{"use strict";Object.defineProperty(ys,"__esModule",{value:!0});ys.TSAWitness=ys.RekorWitness=ys.DEFAULT_REKOR_URL=ys.FulcioSigner=ys.DEFAULT_FULCIO_URL=ys.CIContextProvider=ys.InternalError=ys.MessageSignatureBundleBuilder=ys.DSSEBundleBuilder=void 0;var bPe=GDe();Object.defineProperty(ys,"DSSEBundleBuilder",{enumerable:!0,get:function(){return bPe.DSSEBundleBuilder}});Object.defineProperty(ys,"MessageSignatureBundleBuilder",{enumerable:!0,get:function(){return bPe.MessageSignatureBundleBuilder}});var y1t=$w();Object.defineProperty(ys,"InternalError",{enumerable:!0,get:function(){return y1t.InternalError}});var E1t=YDe();Object.defineProperty(ys,"CIContextProvider",{enumerable:!0,get:function(){return E1t.CIContextProvider}});var xPe=hPe();Object.defineProperty(ys,"DEFAULT_FULCIO_URL",{enumerable:!0,get:function(){return xPe.DEFAULT_FULCIO_URL}});Object.defineProperty(ys,"FulcioSigner",{enumerable:!0,get:function(){return xPe.FulcioSigner}});var T7=PPe();Object.defineProperty(ys,"DEFAULT_REKOR_URL",{enumerable:!0,get:function(){return T7.DEFAULT_REKOR_URL}});Object.defineProperty(ys,"RekorWitness",{enumerable:!0,get:function(){return T7.RekorWitness}});Object.defineProperty(ys,"TSAWitness",{enumerable:!0,get:function(){return T7.TSAWitness}})});var QPe=_(bP=>{"use strict";var kPe=bP&&bP.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(bP,"__esModule",{value:!0});bP.appDataPath=C1t;var I1t=kPe(Ie("os")),n1=kPe(Ie("path"));function C1t(t){let e=I1t.default.homedir();switch(process.platform){case"darwin":{let r=n1.default.join(e,"Library","Application Support");return n1.default.join(r,t)}case"win32":{let r=process.env.LOCALAPPDATA||n1.default.join(e,"AppData","Local");return n1.default.join(r,t,"Data")}default:{let r=process.env.XDG_DATA_HOME||n1.default.join(e,".local","share");return n1.default.join(r,t)}}}});var bA=_(wl=>{"use strict";Object.defineProperty(wl,"__esModule",{value:!0});wl.UnsupportedAlgorithmError=wl.CryptoError=wl.LengthOrHashMismatchError=wl.UnsignedMetadataError=wl.RepositoryError=wl.ValueError=void 0;var N7=class extends Error{};wl.ValueError=N7;var xP=class extends Error{};wl.RepositoryError=xP;var O7=class extends xP{};wl.UnsignedMetadataError=O7;var L7=class extends xP{};wl.LengthOrHashMismatchError=L7;var kO=class extends Error{};wl.CryptoError=kO;var M7=class extends kO{};wl.UnsupportedAlgorithmError=M7});var TPe=_(Pg=>{"use strict";Object.defineProperty(Pg,"__esModule",{value:!0});Pg.isDefined=w1t;Pg.isObject=RPe;Pg.isStringArray=B1t;Pg.isObjectArray=v1t;Pg.isStringRecord=S1t;Pg.isObjectRecord=D1t;function w1t(t){return t!==void 0}function RPe(t){return typeof t=="object"&&t!==null}function B1t(t){return Array.isArray(t)&&t.every(e=>typeof e=="string")}function v1t(t){return Array.isArray(t)&&t.every(RPe)}function S1t(t){return typeof t=="object"&&t!==null&&Object.keys(t).every(e=>typeof e=="string")&&Object.values(t).every(e=>typeof e=="string")}function D1t(t){return typeof t=="object"&&t!==null&&Object.keys(t).every(e=>typeof e=="string")&&Object.values(t).every(e=>typeof e=="object"&&e!==null)}});var _7=_((Fnr,OPe)=>{var FPe=",",P1t=":",b1t="[",x1t="]",k1t="{",Q1t="}";function U7(t){let e=[];if(typeof t=="string")e.push(NPe(t));else if(typeof t=="boolean")e.push(JSON.stringify(t));else if(Number.isInteger(t))e.push(JSON.stringify(t));else if(t===null)e.push(JSON.stringify(t));else if(Array.isArray(t)){e.push(b1t);let r=!0;t.forEach(s=>{r||e.push(FPe),r=!1,e.push(U7(s))}),e.push(x1t)}else if(typeof t=="object"){e.push(k1t);let r=!0;Object.keys(t).sort().forEach(s=>{r||e.push(FPe),r=!1,e.push(NPe(s)),e.push(P1t),e.push(U7(t[s]))}),e.push(Q1t)}else throw new TypeError("cannot encode "+t.toString());return e.join("")}function NPe(t){return'"'+t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'}OPe.exports={canonicalize:U7}});var LPe=_(i1=>{"use strict";var R1t=i1&&i1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(i1,"__esModule",{value:!0});i1.verifySignature=void 0;var T1t=_7(),F1t=R1t(Ie("crypto")),N1t=(t,e,r)=>{let s=Buffer.from((0,T1t.canonicalize)(t));return F1t.default.verify(void 0,s,e,Buffer.from(r,"hex"))};i1.verifySignature=N1t});var ff=_(eu=>{"use strict";var O1t=eu&&eu.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),L1t=eu&&eu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),MPe=eu&&eu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&O1t(e,t,r);return L1t(e,t),e};Object.defineProperty(eu,"__esModule",{value:!0});eu.crypto=eu.guard=void 0;eu.guard=MPe(TPe());eu.crypto=MPe(LPe())});var ay=_(hh=>{"use strict";var M1t=hh&&hh.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(hh,"__esModule",{value:!0});hh.Signed=hh.MetadataKind=void 0;hh.isMetadataKind=_1t;var U1t=M1t(Ie("util")),kP=bA(),H7=ff(),UPe=["1","0","31"],j7;(function(t){t.Root="root",t.Timestamp="timestamp",t.Snapshot="snapshot",t.Targets="targets"})(j7||(hh.MetadataKind=j7={}));function _1t(t){return typeof t=="string"&&Object.values(j7).includes(t)}var G7=class t{constructor(e){this.specVersion=e.specVersion||UPe.join(".");let r=this.specVersion.split(".");if(!(r.length===2||r.length===3)||!r.every(s=>H1t(s)))throw new kP.ValueError("Failed to parse specVersion");if(r[0]!=UPe[0])throw new kP.ValueError("Unsupported specVersion");this.expires=e.expires,this.version=e.version,this.unrecognizedFields=e.unrecognizedFields||{}}equals(e){return e instanceof t?this.specVersion===e.specVersion&&this.expires===e.expires&&this.version===e.version&&U1t.default.isDeepStrictEqual(this.unrecognizedFields,e.unrecognizedFields):!1}isExpired(e){return e||(e=new Date),e>=new Date(this.expires)}static commonFieldsFromJSON(e){let{spec_version:r,expires:s,version:a,...n}=e;if(H7.guard.isDefined(r)){if(typeof r!="string")throw new TypeError("spec_version must be a string")}else throw new kP.ValueError("spec_version is not defined");if(H7.guard.isDefined(s)){if(typeof s!="string")throw new TypeError("expires must be a string")}else throw new kP.ValueError("expires is not defined");if(H7.guard.isDefined(a)){if(typeof a!="number")throw new TypeError("version must be a number")}else throw new kP.ValueError("version is not defined");return{specVersion:r,expires:s,version:a,unrecognizedFields:n}}};hh.Signed=G7;function H1t(t){return!isNaN(Number(t))}});var QP=_(xg=>{"use strict";var _Pe=xg&&xg.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xg,"__esModule",{value:!0});xg.TargetFile=xg.MetaFile=void 0;var HPe=_Pe(Ie("crypto")),RO=_Pe(Ie("util")),bg=bA(),QO=ff(),q7=class t{constructor(e){if(e.version<=0)throw new bg.ValueError("Metafile version must be at least 1");e.length!==void 0&&jPe(e.length),this.version=e.version,this.length=e.length,this.hashes=e.hashes,this.unrecognizedFields=e.unrecognizedFields||{}}equals(e){return e instanceof t?this.version===e.version&&this.length===e.length&&RO.default.isDeepStrictEqual(this.hashes,e.hashes)&&RO.default.isDeepStrictEqual(this.unrecognizedFields,e.unrecognizedFields):!1}verify(e){if(this.length!==void 0&&e.length!==this.length)throw new bg.LengthOrHashMismatchError(`Expected length ${this.length} but got ${e.length}`);this.hashes&&Object.entries(this.hashes).forEach(([r,s])=>{let a;try{a=HPe.default.createHash(r)}catch{throw new bg.LengthOrHashMismatchError(`Hash algorithm ${r} not supported`)}let n=a.update(e).digest("hex");if(n!==s)throw new bg.LengthOrHashMismatchError(`Expected hash ${s} but got ${n}`)})}toJSON(){let e={version:this.version,...this.unrecognizedFields};return this.length!==void 0&&(e.length=this.length),this.hashes&&(e.hashes=this.hashes),e}static fromJSON(e){let{version:r,length:s,hashes:a,...n}=e;if(typeof r!="number")throw new TypeError("version must be a number");if(QO.guard.isDefined(s)&&typeof s!="number")throw new TypeError("length must be a number");if(QO.guard.isDefined(a)&&!QO.guard.isStringRecord(a))throw new TypeError("hashes must be string keys and values");return new t({version:r,length:s,hashes:a,unrecognizedFields:n})}};xg.MetaFile=q7;var W7=class t{constructor(e){jPe(e.length),this.length=e.length,this.path=e.path,this.hashes=e.hashes,this.unrecognizedFields=e.unrecognizedFields||{}}get custom(){let e=this.unrecognizedFields.custom;return!e||Array.isArray(e)||typeof e!="object"?{}:e}equals(e){return e instanceof t?this.length===e.length&&this.path===e.path&&RO.default.isDeepStrictEqual(this.hashes,e.hashes)&&RO.default.isDeepStrictEqual(this.unrecognizedFields,e.unrecognizedFields):!1}async verify(e){let r=0,s=Object.keys(this.hashes).reduce((a,n)=>{try{a[n]=HPe.default.createHash(n)}catch{throw new bg.LengthOrHashMismatchError(`Hash algorithm ${n} not supported`)}return a},{});for await(let a of e)r+=a.length,Object.values(s).forEach(n=>{n.update(a)});if(r!==this.length)throw new bg.LengthOrHashMismatchError(`Expected length ${this.length} but got ${r}`);Object.entries(s).forEach(([a,n])=>{let c=this.hashes[a],f=n.digest("hex");if(f!==c)throw new bg.LengthOrHashMismatchError(`Expected hash ${c} but got ${f}`)})}toJSON(){return{length:this.length,hashes:this.hashes,...this.unrecognizedFields}}static fromJSON(e,r){let{length:s,hashes:a,...n}=r;if(typeof s!="number")throw new TypeError("length must be a number");if(!QO.guard.isStringRecord(a))throw new TypeError("hashes must have string keys and values");return new t({length:s,path:e,hashes:a,unrecognizedFields:n})}};xg.TargetFile=W7;function jPe(t){if(t<0)throw new bg.ValueError("Length must be at least 0")}});var GPe=_(Y7=>{"use strict";Object.defineProperty(Y7,"__esModule",{value:!0});Y7.encodeOIDString=G1t;var j1t=6;function G1t(t){let e=t.split("."),r=parseInt(e[0],10)*40+parseInt(e[1],10),s=[];e.slice(2).forEach(n=>{let c=q1t(parseInt(n,10));s.push(...c)});let a=Buffer.from([r,...s]);return Buffer.from([j1t,a.length,...a])}function q1t(t){let e=[],r=0;for(;t>0;)e.unshift(t&127|r),t>>=7,r=128;return e}});var VPe=_(TP=>{"use strict";var W1t=TP&&TP.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(TP,"__esModule",{value:!0});TP.getPublicKey=K1t;var s1=W1t(Ie("crypto")),RP=bA(),V7=GPe(),TO=48,qPe=3,WPe=0,Y1t="1.3.101.112",V1t="1.2.840.10045.2.1",J1t="1.2.840.10045.3.1.7",J7="-----BEGIN PUBLIC KEY-----";function K1t(t){switch(t.keyType){case"rsa":return z1t(t);case"ed25519":return Z1t(t);case"ecdsa":case"ecdsa-sha2-nistp256":case"ecdsa-sha2-nistp384":return X1t(t);default:throw new RP.UnsupportedAlgorithmError(`Unsupported key type: ${t.keyType}`)}}function z1t(t){if(!t.keyVal.startsWith(J7))throw new RP.CryptoError("Invalid key format");let e=s1.default.createPublicKey(t.keyVal);switch(t.scheme){case"rsassa-pss-sha256":return{key:e,padding:s1.default.constants.RSA_PKCS1_PSS_PADDING};default:throw new RP.UnsupportedAlgorithmError(`Unsupported RSA scheme: ${t.scheme}`)}}function Z1t(t){let e;if(t.keyVal.startsWith(J7))e=s1.default.createPublicKey(t.keyVal);else{if(!YPe(t.keyVal))throw new RP.CryptoError("Invalid key format");e=s1.default.createPublicKey({key:$1t.hexToDER(t.keyVal),format:"der",type:"spki"})}return{key:e}}function X1t(t){let e;if(t.keyVal.startsWith(J7))e=s1.default.createPublicKey(t.keyVal);else{if(!YPe(t.keyVal))throw new RP.CryptoError("Invalid key format");e=s1.default.createPublicKey({key:e2t.hexToDER(t.keyVal),format:"der",type:"spki"})}return{key:e}}var $1t={hexToDER:t=>{let e=Buffer.from(t,"hex"),r=(0,V7.encodeOIDString)(Y1t),s=Buffer.concat([Buffer.concat([Buffer.from([TO]),Buffer.from([r.length]),r]),Buffer.concat([Buffer.from([qPe]),Buffer.from([e.length+1]),Buffer.from([WPe]),e])]);return Buffer.concat([Buffer.from([TO]),Buffer.from([s.length]),s])}},e2t={hexToDER:t=>{let e=Buffer.from(t,"hex"),r=Buffer.concat([Buffer.from([qPe]),Buffer.from([e.length+1]),Buffer.from([WPe]),e]),s=Buffer.concat([(0,V7.encodeOIDString)(V1t),(0,V7.encodeOIDString)(J1t)]),a=Buffer.concat([Buffer.from([TO]),Buffer.from([s.length]),s]);return Buffer.concat([Buffer.from([TO]),Buffer.from([a.length+r.length]),a,r])}},YPe=t=>/^[0-9a-fA-F]+$/.test(t)});var FO=_(o1=>{"use strict";var t2t=o1&&o1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(o1,"__esModule",{value:!0});o1.Key=void 0;var JPe=t2t(Ie("util")),FP=bA(),KPe=ff(),r2t=VPe(),K7=class t{constructor(e){let{keyID:r,keyType:s,scheme:a,keyVal:n,unrecognizedFields:c}=e;this.keyID=r,this.keyType=s,this.scheme=a,this.keyVal=n,this.unrecognizedFields=c||{}}verifySignature(e){let r=e.signatures[this.keyID];if(!r)throw new FP.UnsignedMetadataError("no signature for key found in metadata");if(!this.keyVal.public)throw new FP.UnsignedMetadataError("no public key found");let s=(0,r2t.getPublicKey)({keyType:this.keyType,scheme:this.scheme,keyVal:this.keyVal.public}),a=e.signed.toJSON();try{if(!KPe.crypto.verifySignature(a,s,r.sig))throw new FP.UnsignedMetadataError(`failed to verify ${this.keyID} signature`)}catch(n){throw n instanceof FP.UnsignedMetadataError?n:new FP.UnsignedMetadataError(`failed to verify ${this.keyID} signature`)}}equals(e){return e instanceof t?this.keyID===e.keyID&&this.keyType===e.keyType&&this.scheme===e.scheme&&JPe.default.isDeepStrictEqual(this.keyVal,e.keyVal)&&JPe.default.isDeepStrictEqual(this.unrecognizedFields,e.unrecognizedFields):!1}toJSON(){return{keytype:this.keyType,scheme:this.scheme,keyval:this.keyVal,...this.unrecognizedFields}}static fromJSON(e,r){let{keytype:s,scheme:a,keyval:n,...c}=r;if(typeof s!="string")throw new TypeError("keytype must be a string");if(typeof a!="string")throw new TypeError("scheme must be a string");if(!KPe.guard.isStringRecord(n))throw new TypeError("keyval must be a string record");return new t({keyID:e,keyType:s,scheme:a,keyVal:n,unrecognizedFields:c})}};o1.Key=K7});var ebe=_((jnr,$Pe)=>{"use strict";$Pe.exports=ZPe;function ZPe(t,e,r){t instanceof RegExp&&(t=zPe(t,r)),e instanceof RegExp&&(e=zPe(e,r));var s=XPe(t,e,r);return s&&{start:s[0],end:s[1],pre:r.slice(0,s[0]),body:r.slice(s[0]+t.length,s[1]),post:r.slice(s[1]+e.length)}}function zPe(t,e){var r=e.match(t);return r?r[0]:null}ZPe.range=XPe;function XPe(t,e,r){var s,a,n,c,f,p=r.indexOf(t),h=r.indexOf(e,p+1),E=p;if(p>=0&&h>0){for(s=[],n=r.length;E>=0&&!f;)E==p?(s.push(E),p=r.indexOf(t,E+1)):s.length==1?f=[s.pop(),h]:(a=s.pop(),a=0?p:h;s.length&&(f=[n,c])}return f}});var lbe=_((Gnr,abe)=>{var tbe=ebe();abe.exports=s2t;var rbe="\0SLASH"+Math.random()+"\0",nbe="\0OPEN"+Math.random()+"\0",Z7="\0CLOSE"+Math.random()+"\0",ibe="\0COMMA"+Math.random()+"\0",sbe="\0PERIOD"+Math.random()+"\0";function z7(t){return parseInt(t,10)==t?parseInt(t,10):t.charCodeAt(0)}function n2t(t){return t.split("\\\\").join(rbe).split("\\{").join(nbe).split("\\}").join(Z7).split("\\,").join(ibe).split("\\.").join(sbe)}function i2t(t){return t.split(rbe).join("\\").split(nbe).join("{").split(Z7).join("}").split(ibe).join(",").split(sbe).join(".")}function obe(t){if(!t)return[""];var e=[],r=tbe("{","}",t);if(!r)return t.split(",");var s=r.pre,a=r.body,n=r.post,c=s.split(",");c[c.length-1]+="{"+a+"}";var f=obe(n);return n.length&&(c[c.length-1]+=f.shift(),c.push.apply(c,f)),e.push.apply(e,c),e}function s2t(t){return t?(t.substr(0,2)==="{}"&&(t="\\{\\}"+t.substr(2)),NP(n2t(t),!0).map(i2t)):[]}function o2t(t){return"{"+t+"}"}function a2t(t){return/^-?0\d/.test(t)}function l2t(t,e){return t<=e}function c2t(t,e){return t>=e}function NP(t,e){var r=[],s=tbe("{","}",t);if(!s)return[t];var a=s.pre,n=s.post.length?NP(s.post,!1):[""];if(/\$$/.test(s.pre))for(var c=0;c=0;if(!E&&!C)return s.post.match(/,.*\}/)?(t=s.pre+"{"+s.body+Z7+s.post,NP(t)):[t];var S;if(E)S=s.body.split(/\.\./);else if(S=obe(s.body),S.length===1&&(S=NP(S[0],!1).map(o2t),S.length===1))return n.map(function(Ce){return s.pre+S[0]+Ce});var b;if(E){var I=z7(S[0]),T=z7(S[1]),N=Math.max(S[0].length,S[1].length),U=S.length==3?Math.abs(z7(S[2])):1,W=l2t,ee=T0){var pe=new Array(me+1).join("0");ue<0?le="-"+pe+le.slice(1):le=pe+le}}b.push(le)}}else{b=[];for(var Be=0;Be{"use strict";Object.defineProperty(NO,"__esModule",{value:!0});NO.assertValidPattern=void 0;var u2t=1024*64,f2t=t=>{if(typeof t!="string")throw new TypeError("invalid pattern");if(t.length>u2t)throw new TypeError("pattern is too long")};NO.assertValidPattern=f2t});var fbe=_(OO=>{"use strict";Object.defineProperty(OO,"__esModule",{value:!0});OO.parseClass=void 0;var A2t={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},OP=t=>t.replace(/[[\]\\-]/g,"\\$&"),p2t=t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),ube=t=>t.join(""),h2t=(t,e)=>{let r=e;if(t.charAt(r)!=="[")throw new Error("not in a brace expression");let s=[],a=[],n=r+1,c=!1,f=!1,p=!1,h=!1,E=r,C="";e:for(;nC?s.push(OP(C)+"-"+OP(T)):T===C&&s.push(OP(T)),C="",n++;continue}if(t.startsWith("-]",n+1)){s.push(OP(T+"-")),n+=2;continue}if(t.startsWith("-",n+1)){C=T,n+=2;continue}s.push(OP(T)),n++}if(E{"use strict";Object.defineProperty(LO,"__esModule",{value:!0});LO.unescape=void 0;var g2t=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/\[([^\/\\])\]/g,"$1"):t.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1");LO.unescape=g2t});var eJ=_(HO=>{"use strict";Object.defineProperty(HO,"__esModule",{value:!0});HO.AST=void 0;var d2t=fbe(),UO=MO(),m2t=new Set(["!","?","+","*","@"]),Abe=t=>m2t.has(t),y2t="(?!(?:^|/)\\.\\.?(?:$|/))",_O="(?!\\.)",E2t=new Set(["[","."]),I2t=new Set(["..","."]),C2t=new Set("().*{}+?[]^$\\!"),w2t=t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),$7="[^/]",pbe=$7+"*?",hbe=$7+"+?",X7=class t{type;#t;#r;#i=!1;#e=[];#n;#o;#l;#a=!1;#s;#c;#f=!1;constructor(e,r,s={}){this.type=e,e&&(this.#r=!0),this.#n=r,this.#t=this.#n?this.#n.#t:this,this.#s=this.#t===this?s:this.#t.#s,this.#l=this.#t===this?[]:this.#t.#l,e==="!"&&!this.#t.#a&&this.#l.push(this),this.#o=this.#n?this.#n.#e.length:0}get hasMagic(){if(this.#r!==void 0)return this.#r;for(let e of this.#e)if(typeof e!="string"&&(e.type||e.hasMagic))return this.#r=!0;return this.#r}toString(){return this.#c!==void 0?this.#c:this.type?this.#c=this.type+"("+this.#e.map(e=>String(e)).join("|")+")":this.#c=this.#e.map(e=>String(e)).join("")}#p(){if(this!==this.#t)throw new Error("should only call on root");if(this.#a)return this;this.toString(),this.#a=!0;let e;for(;e=this.#l.pop();){if(e.type!=="!")continue;let r=e,s=r.#n;for(;s;){for(let a=r.#o+1;!s.type&&atypeof r=="string"?r:r.toJSON()):[this.type,...this.#e.map(r=>r.toJSON())];return this.isStart()&&!this.type&&e.unshift([]),this.isEnd()&&(this===this.#t||this.#t.#a&&this.#n?.type==="!")&&e.push({}),e}isStart(){if(this.#t===this)return!0;if(!this.#n?.isStart())return!1;if(this.#o===0)return!0;let e=this.#n;for(let r=0;r{let[I,T,N,U]=typeof b=="string"?t.#h(b,this.#r,p):b.toRegExpSource(e);return this.#r=this.#r||N,this.#i=this.#i||U,I}).join(""),E="";if(this.isStart()&&typeof this.#e[0]=="string"&&!(this.#e.length===1&&I2t.has(this.#e[0]))){let I=E2t,T=r&&I.has(h.charAt(0))||h.startsWith("\\.")&&I.has(h.charAt(2))||h.startsWith("\\.\\.")&&I.has(h.charAt(4)),N=!r&&!e&&I.has(h.charAt(0));E=T?y2t:N?_O:""}let C="";return this.isEnd()&&this.#t.#a&&this.#n?.type==="!"&&(C="(?:$|\\/)"),[E+h+C,(0,UO.unescape)(h),this.#r=!!this.#r,this.#i]}let s=this.type==="*"||this.type==="+",a=this.type==="!"?"(?:(?!(?:":"(?:",n=this.#A(r);if(this.isStart()&&this.isEnd()&&!n&&this.type!=="!"){let p=this.toString();return this.#e=[p],this.type=null,this.#r=void 0,[p,(0,UO.unescape)(this.toString()),!1,!1]}let c=!s||e||r||!_O?"":this.#A(!0);c===n&&(c=""),c&&(n=`(?:${n})(?:${c})*?`);let f="";if(this.type==="!"&&this.#f)f=(this.isStart()&&!r?_O:"")+hbe;else{let p=this.type==="!"?"))"+(this.isStart()&&!r&&!e?_O:"")+pbe+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&c?")":this.type==="*"&&c?")?":`)${this.type}`;f=a+n+p}return[f,(0,UO.unescape)(n),this.#r=!!this.#r,this.#i]}#A(e){return this.#e.map(r=>{if(typeof r=="string")throw new Error("string type in extglob ast??");let[s,a,n,c]=r.toRegExpSource(e);return this.#i=this.#i||c,s}).filter(r=>!(this.isStart()&&this.isEnd())||!!r).join("|")}static#h(e,r,s=!1){let a=!1,n="",c=!1;for(let f=0;f{"use strict";Object.defineProperty(jO,"__esModule",{value:!0});jO.escape=void 0;var B2t=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/[?*()[\]]/g,"[$&]"):t.replace(/[?*()[\]\\]/g,"\\$&");jO.escape=B2t});var Cbe=_(pr=>{"use strict";var v2t=pr&&pr.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pr,"__esModule",{value:!0});pr.unescape=pr.escape=pr.AST=pr.Minimatch=pr.match=pr.makeRe=pr.braceExpand=pr.defaults=pr.filter=pr.GLOBSTAR=pr.sep=pr.minimatch=void 0;var S2t=v2t(lbe()),GO=cbe(),mbe=eJ(),D2t=tJ(),P2t=MO(),b2t=(t,e,r={})=>((0,GO.assertValidPattern)(e),!r.nocomment&&e.charAt(0)==="#"?!1:new ly(e,r).match(t));pr.minimatch=b2t;var x2t=/^\*+([^+@!?\*\[\(]*)$/,k2t=t=>e=>!e.startsWith(".")&&e.endsWith(t),Q2t=t=>e=>e.endsWith(t),R2t=t=>(t=t.toLowerCase(),e=>!e.startsWith(".")&&e.toLowerCase().endsWith(t)),T2t=t=>(t=t.toLowerCase(),e=>e.toLowerCase().endsWith(t)),F2t=/^\*+\.\*+$/,N2t=t=>!t.startsWith(".")&&t.includes("."),O2t=t=>t!=="."&&t!==".."&&t.includes("."),L2t=/^\.\*+$/,M2t=t=>t!=="."&&t!==".."&&t.startsWith("."),U2t=/^\*+$/,_2t=t=>t.length!==0&&!t.startsWith("."),H2t=t=>t.length!==0&&t!=="."&&t!=="..",j2t=/^\?+([^+@!?\*\[\(]*)?$/,G2t=([t,e=""])=>{let r=ybe([t]);return e?(e=e.toLowerCase(),s=>r(s)&&s.toLowerCase().endsWith(e)):r},q2t=([t,e=""])=>{let r=Ebe([t]);return e?(e=e.toLowerCase(),s=>r(s)&&s.toLowerCase().endsWith(e)):r},W2t=([t,e=""])=>{let r=Ebe([t]);return e?s=>r(s)&&s.endsWith(e):r},Y2t=([t,e=""])=>{let r=ybe([t]);return e?s=>r(s)&&s.endsWith(e):r},ybe=([t])=>{let e=t.length;return r=>r.length===e&&!r.startsWith(".")},Ebe=([t])=>{let e=t.length;return r=>r.length===e&&r!=="."&&r!==".."},Ibe=typeof process=="object"&&process?typeof process.env=="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",gbe={win32:{sep:"\\"},posix:{sep:"/"}};pr.sep=Ibe==="win32"?gbe.win32.sep:gbe.posix.sep;pr.minimatch.sep=pr.sep;pr.GLOBSTAR=Symbol("globstar **");pr.minimatch.GLOBSTAR=pr.GLOBSTAR;var V2t="[^/]",J2t=V2t+"*?",K2t="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",z2t="(?:(?!(?:\\/|^)\\.).)*?",Z2t=(t,e={})=>r=>(0,pr.minimatch)(r,t,e);pr.filter=Z2t;pr.minimatch.filter=pr.filter;var tu=(t,e={})=>Object.assign({},t,e),X2t=t=>{if(!t||typeof t!="object"||!Object.keys(t).length)return pr.minimatch;let e=pr.minimatch;return Object.assign((s,a,n={})=>e(s,a,tu(t,n)),{Minimatch:class extends e.Minimatch{constructor(a,n={}){super(a,tu(t,n))}static defaults(a){return e.defaults(tu(t,a)).Minimatch}},AST:class extends e.AST{constructor(a,n,c={}){super(a,n,tu(t,c))}static fromGlob(a,n={}){return e.AST.fromGlob(a,tu(t,n))}},unescape:(s,a={})=>e.unescape(s,tu(t,a)),escape:(s,a={})=>e.escape(s,tu(t,a)),filter:(s,a={})=>e.filter(s,tu(t,a)),defaults:s=>e.defaults(tu(t,s)),makeRe:(s,a={})=>e.makeRe(s,tu(t,a)),braceExpand:(s,a={})=>e.braceExpand(s,tu(t,a)),match:(s,a,n={})=>e.match(s,a,tu(t,n)),sep:e.sep,GLOBSTAR:pr.GLOBSTAR})};pr.defaults=X2t;pr.minimatch.defaults=pr.defaults;var $2t=(t,e={})=>((0,GO.assertValidPattern)(t),e.nobrace||!/\{(?:(?!\{).)*\}/.test(t)?[t]:(0,S2t.default)(t));pr.braceExpand=$2t;pr.minimatch.braceExpand=pr.braceExpand;var eBt=(t,e={})=>new ly(t,e).makeRe();pr.makeRe=eBt;pr.minimatch.makeRe=pr.makeRe;var tBt=(t,e,r={})=>{let s=new ly(e,r);return t=t.filter(a=>s.match(a)),s.options.nonull&&!t.length&&t.push(e),t};pr.match=tBt;pr.minimatch.match=pr.match;var dbe=/[?*]|[+@!]\(.*?\)|\[|\]/,rBt=t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),ly=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(e,r={}){(0,GO.assertValidPattern)(e),r=r||{},this.options=r,this.pattern=e,this.platform=r.platform||Ibe,this.isWindows=this.platform==="win32",this.windowsPathsNoEscape=!!r.windowsPathsNoEscape||r.allowWindowsEscape===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!r.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!r.nonegate,this.comment=!1,this.empty=!1,this.partial=!!r.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=r.windowsNoMagicRoot!==void 0?r.windowsNoMagicRoot:!!(this.isWindows&&this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let e of this.set)for(let r of e)if(typeof r!="string")return!0;return!1}debug(...e){}make(){let e=this.pattern,r=this.options;if(!r.nocomment&&e.charAt(0)==="#"){this.comment=!0;return}if(!e){this.empty=!0;return}this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],r.debug&&(this.debug=(...n)=>console.error(...n)),this.debug(this.pattern,this.globSet);let s=this.globSet.map(n=>this.slashSplit(n));this.globParts=this.preprocess(s),this.debug(this.pattern,this.globParts);let a=this.globParts.map((n,c,f)=>{if(this.isWindows&&this.windowsNoMagicRoot){let p=n[0]===""&&n[1]===""&&(n[2]==="?"||!dbe.test(n[2]))&&!dbe.test(n[3]),h=/^[a-z]:/i.test(n[0]);if(p)return[...n.slice(0,4),...n.slice(4).map(E=>this.parse(E))];if(h)return[n[0],...n.slice(1).map(E=>this.parse(E))]}return n.map(p=>this.parse(p))});if(this.debug(this.pattern,a),this.set=a.filter(n=>n.indexOf(!1)===-1),this.isWindows)for(let n=0;n=2?(e=this.firstPhasePreProcess(e),e=this.secondPhasePreProcess(e)):r>=1?e=this.levelOneOptimize(e):e=this.adjascentGlobstarOptimize(e),e}adjascentGlobstarOptimize(e){return e.map(r=>{let s=-1;for(;(s=r.indexOf("**",s+1))!==-1;){let a=s;for(;r[a+1]==="**";)a++;a!==s&&r.splice(s,a-s)}return r})}levelOneOptimize(e){return e.map(r=>(r=r.reduce((s,a)=>{let n=s[s.length-1];return a==="**"&&n==="**"?s:a===".."&&n&&n!==".."&&n!=="."&&n!=="**"?(s.pop(),s):(s.push(a),s)},[]),r.length===0?[""]:r))}levelTwoFileOptimize(e){Array.isArray(e)||(e=this.slashSplit(e));let r=!1;do{if(r=!1,!this.preserveMultipleSlashes){for(let a=1;aa&&s.splice(a+1,c-a);let f=s[a+1],p=s[a+2],h=s[a+3];if(f!==".."||!p||p==="."||p===".."||!h||h==="."||h==="..")continue;r=!0,s.splice(a,1);let E=s.slice(0);E[a]="**",e.push(E),a--}if(!this.preserveMultipleSlashes){for(let c=1;cr.length)}partsMatch(e,r,s=!1){let a=0,n=0,c=[],f="";for(;aee?r=r.slice(ie):ee>ie&&(e=e.slice(ee)))}}let{optimizationLevel:n=1}=this.options;n>=2&&(e=this.levelTwoFileOptimize(e)),this.debug("matchOne",this,{file:e,pattern:r}),this.debug("matchOne",e.length,r.length);for(var c=0,f=0,p=e.length,h=r.length;c>> no match, partial?`,e,S,r,b),S===p))}let T;if(typeof E=="string"?(T=C===E,this.debug("string match",E,C,T)):(T=E.test(C),this.debug("pattern match",E,C,T)),!T)return!1}if(c===p&&f===h)return!0;if(c===p)return s;if(f===h)return c===p-1&&e[c]==="";throw new Error("wtf?")}braceExpand(){return(0,pr.braceExpand)(this.pattern,this.options)}parse(e){(0,GO.assertValidPattern)(e);let r=this.options;if(e==="**")return pr.GLOBSTAR;if(e==="")return"";let s,a=null;(s=e.match(U2t))?a=r.dot?H2t:_2t:(s=e.match(x2t))?a=(r.nocase?r.dot?T2t:R2t:r.dot?Q2t:k2t)(s[1]):(s=e.match(j2t))?a=(r.nocase?r.dot?q2t:G2t:r.dot?W2t:Y2t)(s):(s=e.match(F2t))?a=r.dot?O2t:N2t:(s=e.match(L2t))&&(a=M2t);let n=mbe.AST.fromGlob(e,this.options).toMMPattern();return a&&typeof n=="object"&&Reflect.defineProperty(n,"test",{value:a}),n}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let e=this.set;if(!e.length)return this.regexp=!1,this.regexp;let r=this.options,s=r.noglobstar?J2t:r.dot?K2t:z2t,a=new Set(r.nocase?["i"]:[]),n=e.map(p=>{let h=p.map(E=>{if(E instanceof RegExp)for(let C of E.flags.split(""))a.add(C);return typeof E=="string"?rBt(E):E===pr.GLOBSTAR?pr.GLOBSTAR:E._src});return h.forEach((E,C)=>{let S=h[C+1],b=h[C-1];E!==pr.GLOBSTAR||b===pr.GLOBSTAR||(b===void 0?S!==void 0&&S!==pr.GLOBSTAR?h[C+1]="(?:\\/|"+s+"\\/)?"+S:h[C]=s:S===void 0?h[C-1]=b+"(?:\\/|"+s+")?":S!==pr.GLOBSTAR&&(h[C-1]=b+"(?:\\/|\\/"+s+"\\/)"+S,h[C+1]=pr.GLOBSTAR))}),h.filter(E=>E!==pr.GLOBSTAR).join("/")}).join("|"),[c,f]=e.length>1?["(?:",")"]:["",""];n="^"+c+n+f+"$",this.negate&&(n="^(?!"+n+").+$");try{this.regexp=new RegExp(n,[...a].join(""))}catch{this.regexp=!1}return this.regexp}slashSplit(e){return this.preserveMultipleSlashes?e.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(e)?["",...e.split(/\/+/)]:e.split(/\/+/)}match(e,r=this.partial){if(this.debug("match",e,this.pattern),this.comment)return!1;if(this.empty)return e==="";if(e==="/"&&r)return!0;let s=this.options;this.isWindows&&(e=e.split("\\").join("/"));let a=this.slashSplit(e);this.debug(this.pattern,"split",a);let n=this.set;this.debug(this.pattern,"set",n);let c=a[a.length-1];if(!c)for(let f=a.length-2;!c&&f>=0;f--)c=a[f];for(let f=0;f{"use strict";var wbe=ru&&ru.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ru,"__esModule",{value:!0});ru.SuccinctRoles=ru.DelegatedRole=ru.Role=ru.TOP_LEVEL_ROLE_NAMES=void 0;var Bbe=wbe(Ie("crypto")),oBt=Cbe(),qO=wbe(Ie("util")),WO=bA(),cy=ff();ru.TOP_LEVEL_ROLE_NAMES=["root","targets","snapshot","timestamp"];var LP=class t{constructor(e){let{keyIDs:r,threshold:s,unrecognizedFields:a}=e;if(aBt(r))throw new WO.ValueError("duplicate key IDs found");if(s<1)throw new WO.ValueError("threshold must be at least 1");this.keyIDs=r,this.threshold=s,this.unrecognizedFields=a||{}}equals(e){return e instanceof t?this.threshold===e.threshold&&qO.default.isDeepStrictEqual(this.keyIDs,e.keyIDs)&&qO.default.isDeepStrictEqual(this.unrecognizedFields,e.unrecognizedFields):!1}toJSON(){return{keyids:this.keyIDs,threshold:this.threshold,...this.unrecognizedFields}}static fromJSON(e){let{keyids:r,threshold:s,...a}=e;if(!cy.guard.isStringArray(r))throw new TypeError("keyids must be an array");if(typeof s!="number")throw new TypeError("threshold must be a number");return new t({keyIDs:r,threshold:s,unrecognizedFields:a})}};ru.Role=LP;function aBt(t){return new Set(t).size!==t.length}var rJ=class t extends LP{constructor(e){super(e);let{name:r,terminating:s,paths:a,pathHashPrefixes:n}=e;if(this.name=r,this.terminating=s,e.paths&&e.pathHashPrefixes)throw new WO.ValueError("paths and pathHashPrefixes are mutually exclusive");this.paths=a,this.pathHashPrefixes=n}equals(e){return e instanceof t?super.equals(e)&&this.name===e.name&&this.terminating===e.terminating&&qO.default.isDeepStrictEqual(this.paths,e.paths)&&qO.default.isDeepStrictEqual(this.pathHashPrefixes,e.pathHashPrefixes):!1}isDelegatedPath(e){if(this.paths)return this.paths.some(r=>cBt(e,r));if(this.pathHashPrefixes){let s=Bbe.default.createHash("sha256").update(e).digest("hex");return this.pathHashPrefixes.some(a=>s.startsWith(a))}return!1}toJSON(){let e={...super.toJSON(),name:this.name,terminating:this.terminating};return this.paths&&(e.paths=this.paths),this.pathHashPrefixes&&(e.path_hash_prefixes=this.pathHashPrefixes),e}static fromJSON(e){let{keyids:r,threshold:s,name:a,terminating:n,paths:c,path_hash_prefixes:f,...p}=e;if(!cy.guard.isStringArray(r))throw new TypeError("keyids must be an array of strings");if(typeof s!="number")throw new TypeError("threshold must be a number");if(typeof a!="string")throw new TypeError("name must be a string");if(typeof n!="boolean")throw new TypeError("terminating must be a boolean");if(cy.guard.isDefined(c)&&!cy.guard.isStringArray(c))throw new TypeError("paths must be an array of strings");if(cy.guard.isDefined(f)&&!cy.guard.isStringArray(f))throw new TypeError("path_hash_prefixes must be an array of strings");return new t({keyIDs:r,threshold:s,name:a,terminating:n,paths:c,pathHashPrefixes:f,unrecognizedFields:p})}};ru.DelegatedRole=rJ;var lBt=(t,e)=>t.map((r,s)=>[r,e[s]]);function cBt(t,e){let r=t.split("/"),s=e.split("/");return s.length!=r.length?!1:lBt(r,s).every(([a,n])=>(0,oBt.minimatch)(a,n))}var nJ=class t extends LP{constructor(e){super(e);let{bitLength:r,namePrefix:s}=e;if(r<=0||r>32)throw new WO.ValueError("bitLength must be between 1 and 32");this.bitLength=r,this.namePrefix=s,this.numberOfBins=Math.pow(2,r),this.suffixLen=(this.numberOfBins-1).toString(16).length}equals(e){return e instanceof t?super.equals(e)&&this.bitLength===e.bitLength&&this.namePrefix===e.namePrefix:!1}getRoleForTarget(e){let a=Bbe.default.createHash("sha256").update(e).digest().subarray(0,4),n=32-this.bitLength,f=(a.readUInt32BE()>>>n).toString(16).padStart(this.suffixLen,"0");return`${this.namePrefix}-${f}`}*getRoles(){for(let e=0;e{"use strict";var uBt=a1&&a1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(a1,"__esModule",{value:!0});a1.Root=void 0;var vbe=uBt(Ie("util")),sJ=ay(),Sbe=bA(),fBt=FO(),YO=iJ(),VO=ff(),oJ=class t extends sJ.Signed{constructor(e){if(super(e),this.type=sJ.MetadataKind.Root,this.keys=e.keys||{},this.consistentSnapshot=e.consistentSnapshot??!0,!e.roles)this.roles=YO.TOP_LEVEL_ROLE_NAMES.reduce((r,s)=>({...r,[s]:new YO.Role({keyIDs:[],threshold:1})}),{});else{let r=new Set(Object.keys(e.roles));if(!YO.TOP_LEVEL_ROLE_NAMES.every(s=>r.has(s)))throw new Sbe.ValueError("missing top-level role");this.roles=e.roles}}addKey(e,r){if(!this.roles[r])throw new Sbe.ValueError(`role ${r} does not exist`);this.roles[r].keyIDs.includes(e.keyID)||this.roles[r].keyIDs.push(e.keyID),this.keys[e.keyID]=e}equals(e){return e instanceof t?super.equals(e)&&this.consistentSnapshot===e.consistentSnapshot&&vbe.default.isDeepStrictEqual(this.keys,e.keys)&&vbe.default.isDeepStrictEqual(this.roles,e.roles):!1}toJSON(){return{_type:this.type,spec_version:this.specVersion,version:this.version,expires:this.expires,keys:ABt(this.keys),roles:pBt(this.roles),consistent_snapshot:this.consistentSnapshot,...this.unrecognizedFields}}static fromJSON(e){let{unrecognizedFields:r,...s}=sJ.Signed.commonFieldsFromJSON(e),{keys:a,roles:n,consistent_snapshot:c,...f}=r;if(typeof c!="boolean")throw new TypeError("consistent_snapshot must be a boolean");return new t({...s,keys:hBt(a),roles:gBt(n),consistentSnapshot:c,unrecognizedFields:f})}};a1.Root=oJ;function ABt(t){return Object.entries(t).reduce((e,[r,s])=>({...e,[r]:s.toJSON()}),{})}function pBt(t){return Object.entries(t).reduce((e,[r,s])=>({...e,[r]:s.toJSON()}),{})}function hBt(t){let e;if(VO.guard.isDefined(t)){if(!VO.guard.isObjectRecord(t))throw new TypeError("keys must be an object");e=Object.entries(t).reduce((r,[s,a])=>({...r,[s]:fBt.Key.fromJSON(s,a)}),{})}return e}function gBt(t){let e;if(VO.guard.isDefined(t)){if(!VO.guard.isObjectRecord(t))throw new TypeError("roles must be an object");e=Object.entries(t).reduce((r,[s,a])=>({...r,[s]:YO.Role.fromJSON(a)}),{})}return e}});var cJ=_(JO=>{"use strict";Object.defineProperty(JO,"__esModule",{value:!0});JO.Signature=void 0;var lJ=class t{constructor(e){let{keyID:r,sig:s}=e;this.keyID=r,this.sig=s}toJSON(){return{keyid:this.keyID,sig:this.sig}}static fromJSON(e){let{keyid:r,sig:s}=e;if(typeof r!="string")throw new TypeError("keyid must be a string");if(typeof s!="string")throw new TypeError("sig must be a string");return new t({keyID:r,sig:s})}};JO.Signature=lJ});var AJ=_(l1=>{"use strict";var dBt=l1&&l1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(l1,"__esModule",{value:!0});l1.Snapshot=void 0;var mBt=dBt(Ie("util")),uJ=ay(),Pbe=QP(),Dbe=ff(),fJ=class t extends uJ.Signed{constructor(e){super(e),this.type=uJ.MetadataKind.Snapshot,this.meta=e.meta||{"targets.json":new Pbe.MetaFile({version:1})}}equals(e){return e instanceof t?super.equals(e)&&mBt.default.isDeepStrictEqual(this.meta,e.meta):!1}toJSON(){return{_type:this.type,meta:yBt(this.meta),spec_version:this.specVersion,version:this.version,expires:this.expires,...this.unrecognizedFields}}static fromJSON(e){let{unrecognizedFields:r,...s}=uJ.Signed.commonFieldsFromJSON(e),{meta:a,...n}=r;return new t({...s,meta:EBt(a),unrecognizedFields:n})}};l1.Snapshot=fJ;function yBt(t){return Object.entries(t).reduce((e,[r,s])=>({...e,[r]:s.toJSON()}),{})}function EBt(t){let e;if(Dbe.guard.isDefined(t))if(Dbe.guard.isObjectRecord(t))e=Object.entries(t).reduce((r,[s,a])=>({...r,[s]:Pbe.MetaFile.fromJSON(a)}),{});else throw new TypeError("meta field is malformed");return e}});var bbe=_(c1=>{"use strict";var IBt=c1&&c1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(c1,"__esModule",{value:!0});c1.Delegations=void 0;var KO=IBt(Ie("util")),CBt=bA(),wBt=FO(),pJ=iJ(),zO=ff(),hJ=class t{constructor(e){if(this.keys=e.keys,this.unrecognizedFields=e.unrecognizedFields||{},e.roles&&Object.keys(e.roles).some(r=>pJ.TOP_LEVEL_ROLE_NAMES.includes(r)))throw new CBt.ValueError("Delegated role name conflicts with top-level role name");this.succinctRoles=e.succinctRoles,this.roles=e.roles}equals(e){return e instanceof t?KO.default.isDeepStrictEqual(this.keys,e.keys)&&KO.default.isDeepStrictEqual(this.roles,e.roles)&&KO.default.isDeepStrictEqual(this.unrecognizedFields,e.unrecognizedFields)&&KO.default.isDeepStrictEqual(this.succinctRoles,e.succinctRoles):!1}*rolesForTarget(e){if(this.roles)for(let r of Object.values(this.roles))r.isDelegatedPath(e)&&(yield{role:r.name,terminating:r.terminating});else this.succinctRoles&&(yield{role:this.succinctRoles.getRoleForTarget(e),terminating:!0})}toJSON(){let e={keys:BBt(this.keys),...this.unrecognizedFields};return this.roles?e.roles=vBt(this.roles):this.succinctRoles&&(e.succinct_roles=this.succinctRoles.toJSON()),e}static fromJSON(e){let{keys:r,roles:s,succinct_roles:a,...n}=e,c;return zO.guard.isObject(a)&&(c=pJ.SuccinctRoles.fromJSON(a)),new t({keys:SBt(r),roles:DBt(s),unrecognizedFields:n,succinctRoles:c})}};c1.Delegations=hJ;function BBt(t){return Object.entries(t).reduce((e,[r,s])=>({...e,[r]:s.toJSON()}),{})}function vBt(t){return Object.values(t).map(e=>e.toJSON())}function SBt(t){if(!zO.guard.isObjectRecord(t))throw new TypeError("keys is malformed");return Object.entries(t).reduce((e,[r,s])=>({...e,[r]:wBt.Key.fromJSON(r,s)}),{})}function DBt(t){let e;if(zO.guard.isDefined(t)){if(!zO.guard.isObjectArray(t))throw new TypeError("roles is malformed");e=t.reduce((r,s)=>{let a=pJ.DelegatedRole.fromJSON(s);return{...r,[a.name]:a}},{})}return e}});var mJ=_(u1=>{"use strict";var PBt=u1&&u1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(u1,"__esModule",{value:!0});u1.Targets=void 0;var xbe=PBt(Ie("util")),gJ=ay(),bBt=bbe(),xBt=QP(),ZO=ff(),dJ=class t extends gJ.Signed{constructor(e){super(e),this.type=gJ.MetadataKind.Targets,this.targets=e.targets||{},this.delegations=e.delegations}addTarget(e){this.targets[e.path]=e}equals(e){return e instanceof t?super.equals(e)&&xbe.default.isDeepStrictEqual(this.targets,e.targets)&&xbe.default.isDeepStrictEqual(this.delegations,e.delegations):!1}toJSON(){let e={_type:this.type,spec_version:this.specVersion,version:this.version,expires:this.expires,targets:kBt(this.targets),...this.unrecognizedFields};return this.delegations&&(e.delegations=this.delegations.toJSON()),e}static fromJSON(e){let{unrecognizedFields:r,...s}=gJ.Signed.commonFieldsFromJSON(e),{targets:a,delegations:n,...c}=r;return new t({...s,targets:QBt(a),delegations:RBt(n),unrecognizedFields:c})}};u1.Targets=dJ;function kBt(t){return Object.entries(t).reduce((e,[r,s])=>({...e,[r]:s.toJSON()}),{})}function QBt(t){let e;if(ZO.guard.isDefined(t))if(ZO.guard.isObjectRecord(t))e=Object.entries(t).reduce((r,[s,a])=>({...r,[s]:xBt.TargetFile.fromJSON(s,a)}),{});else throw new TypeError("targets must be an object");return e}function RBt(t){let e;if(ZO.guard.isDefined(t))if(ZO.guard.isObject(t))e=bBt.Delegations.fromJSON(t);else throw new TypeError("delegations must be an object");return e}});var CJ=_(XO=>{"use strict";Object.defineProperty(XO,"__esModule",{value:!0});XO.Timestamp=void 0;var yJ=ay(),kbe=QP(),EJ=ff(),IJ=class t extends yJ.Signed{constructor(e){super(e),this.type=yJ.MetadataKind.Timestamp,this.snapshotMeta=e.snapshotMeta||new kbe.MetaFile({version:1})}equals(e){return e instanceof t?super.equals(e)&&this.snapshotMeta.equals(e.snapshotMeta):!1}toJSON(){return{_type:this.type,spec_version:this.specVersion,version:this.version,expires:this.expires,meta:{"snapshot.json":this.snapshotMeta.toJSON()},...this.unrecognizedFields}}static fromJSON(e){let{unrecognizedFields:r,...s}=yJ.Signed.commonFieldsFromJSON(e),{meta:a,...n}=r;return new t({...s,snapshotMeta:TBt(a),unrecognizedFields:n})}};XO.Timestamp=IJ;function TBt(t){let e;if(EJ.guard.isDefined(t)){let r=t["snapshot.json"];if(!EJ.guard.isDefined(r)||!EJ.guard.isObject(r))throw new TypeError("missing snapshot.json in meta");e=kbe.MetaFile.fromJSON(r)}return e}});var Rbe=_(A1=>{"use strict";var FBt=A1&&A1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(A1,"__esModule",{value:!0});A1.Metadata=void 0;var NBt=_7(),Qbe=FBt(Ie("util")),f1=ay(),MP=bA(),OBt=aJ(),LBt=cJ(),MBt=AJ(),UBt=mJ(),_Bt=CJ(),wJ=ff(),BJ=class t{constructor(e,r,s){this.signed=e,this.signatures=r||{},this.unrecognizedFields=s||{}}sign(e,r=!0){let s=Buffer.from((0,NBt.canonicalize)(this.signed.toJSON())),a=e(s);r||(this.signatures={}),this.signatures[a.keyID]=a}verifyDelegate(e,r){let s,a={};switch(this.signed.type){case f1.MetadataKind.Root:a=this.signed.keys,s=this.signed.roles[e];break;case f1.MetadataKind.Targets:if(!this.signed.delegations)throw new MP.ValueError(`No delegations found for ${e}`);a=this.signed.delegations.keys,this.signed.delegations.roles?s=this.signed.delegations.roles[e]:this.signed.delegations.succinctRoles&&this.signed.delegations.succinctRoles.isDelegatedRole(e)&&(s=this.signed.delegations.succinctRoles);break;default:throw new TypeError("invalid metadata type")}if(!s)throw new MP.ValueError(`no delegation found for ${e}`);let n=new Set;if(s.keyIDs.forEach(c=>{let f=a[c];if(f)try{f.verifySignature(r),n.add(f.keyID)}catch{}}),n.sizer.toJSON()),signed:this.signed.toJSON(),...this.unrecognizedFields}}static fromJSON(e,r){let{signed:s,signatures:a,...n}=r;if(!wJ.guard.isDefined(s)||!wJ.guard.isObject(s))throw new TypeError("signed is not defined");if(e!==s._type)throw new MP.ValueError(`expected '${e}', got ${s._type}`);if(!wJ.guard.isObjectArray(a))throw new TypeError("signatures is not an array");let c;switch(e){case f1.MetadataKind.Root:c=OBt.Root.fromJSON(s);break;case f1.MetadataKind.Timestamp:c=_Bt.Timestamp.fromJSON(s);break;case f1.MetadataKind.Snapshot:c=MBt.Snapshot.fromJSON(s);break;case f1.MetadataKind.Targets:c=UBt.Targets.fromJSON(s);break;default:throw new TypeError("invalid metadata type")}let f={};return a.forEach(p=>{let h=LBt.Signature.fromJSON(p);if(f[h.keyID])throw new MP.ValueError(`multiple signatures found for keyid: ${h.keyID}`);f[h.keyID]=h}),new t(c,f,n)}};A1.Metadata=BJ});var $O=_(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});Fi.Timestamp=Fi.Targets=Fi.Snapshot=Fi.Signature=Fi.Root=Fi.Metadata=Fi.Key=Fi.TargetFile=Fi.MetaFile=Fi.ValueError=Fi.MetadataKind=void 0;var HBt=ay();Object.defineProperty(Fi,"MetadataKind",{enumerable:!0,get:function(){return HBt.MetadataKind}});var jBt=bA();Object.defineProperty(Fi,"ValueError",{enumerable:!0,get:function(){return jBt.ValueError}});var Tbe=QP();Object.defineProperty(Fi,"MetaFile",{enumerable:!0,get:function(){return Tbe.MetaFile}});Object.defineProperty(Fi,"TargetFile",{enumerable:!0,get:function(){return Tbe.TargetFile}});var GBt=FO();Object.defineProperty(Fi,"Key",{enumerable:!0,get:function(){return GBt.Key}});var qBt=Rbe();Object.defineProperty(Fi,"Metadata",{enumerable:!0,get:function(){return qBt.Metadata}});var WBt=aJ();Object.defineProperty(Fi,"Root",{enumerable:!0,get:function(){return WBt.Root}});var YBt=cJ();Object.defineProperty(Fi,"Signature",{enumerable:!0,get:function(){return YBt.Signature}});var VBt=AJ();Object.defineProperty(Fi,"Snapshot",{enumerable:!0,get:function(){return VBt.Snapshot}});var JBt=mJ();Object.defineProperty(Fi,"Targets",{enumerable:!0,get:function(){return JBt.Targets}});var KBt=CJ();Object.defineProperty(Fi,"Timestamp",{enumerable:!0,get:function(){return KBt.Timestamp}})});var Nbe=_((air,Fbe)=>{var p1=1e3,h1=p1*60,g1=h1*60,uy=g1*24,zBt=uy*7,ZBt=uy*365.25;Fbe.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return XBt(t);if(r==="number"&&isFinite(t))return e.long?evt(t):$Bt(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function XBt(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),s=(e[2]||"ms").toLowerCase();switch(s){case"years":case"year":case"yrs":case"yr":case"y":return r*ZBt;case"weeks":case"week":case"w":return r*zBt;case"days":case"day":case"d":return r*uy;case"hours":case"hour":case"hrs":case"hr":case"h":return r*g1;case"minutes":case"minute":case"mins":case"min":case"m":return r*h1;case"seconds":case"second":case"secs":case"sec":case"s":return r*p1;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function $Bt(t){var e=Math.abs(t);return e>=uy?Math.round(t/uy)+"d":e>=g1?Math.round(t/g1)+"h":e>=h1?Math.round(t/h1)+"m":e>=p1?Math.round(t/p1)+"s":t+"ms"}function evt(t){var e=Math.abs(t);return e>=uy?eL(t,e,uy,"day"):e>=g1?eL(t,e,g1,"hour"):e>=h1?eL(t,e,h1,"minute"):e>=p1?eL(t,e,p1,"second"):t+" ms"}function eL(t,e,r,s){var a=e>=r*1.5;return Math.round(t/r)+" "+s+(a?"s":"")}});var vJ=_((lir,Obe)=>{function tvt(t){r.debug=r,r.default=r,r.coerce=p,r.disable=c,r.enable=a,r.enabled=f,r.humanize=Nbe(),r.destroy=h,Object.keys(t).forEach(E=>{r[E]=t[E]}),r.names=[],r.skips=[],r.formatters={};function e(E){let C=0;for(let S=0;S{if(le==="%%")return"%";ie++;let pe=r.formatters[me];if(typeof pe=="function"){let Be=N[ie];le=pe.call(U,Be),N.splice(ie,1),ie--}return le}),r.formatArgs.call(U,N),(U.log||r.log).apply(U,N)}return T.namespace=E,T.useColors=r.useColors(),T.color=r.selectColor(E),T.extend=s,T.destroy=r.destroy,Object.defineProperty(T,"enabled",{enumerable:!0,configurable:!1,get:()=>S!==null?S:(b!==r.namespaces&&(b=r.namespaces,I=r.enabled(E)),I),set:N=>{S=N}}),typeof r.init=="function"&&r.init(T),T}function s(E,C){let S=r(this.namespace+(typeof C>"u"?":":C)+E);return S.log=this.log,S}function a(E){r.save(E),r.namespaces=E,r.names=[],r.skips=[];let C=(typeof E=="string"?E:"").trim().replace(" ",",").split(",").filter(Boolean);for(let S of C)S[0]==="-"?r.skips.push(S.slice(1)):r.names.push(S)}function n(E,C){let S=0,b=0,I=-1,T=0;for(;S"-"+C)].join(",");return r.enable(""),E}function f(E){for(let C of r.skips)if(n(E,C))return!1;for(let C of r.names)if(n(E,C))return!0;return!1}function p(E){return E instanceof Error?E.stack||E.message:E}function h(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.enable(r.load()),r}Obe.exports=tvt});var Lbe=_((sc,tL)=>{sc.formatArgs=nvt;sc.save=ivt;sc.load=svt;sc.useColors=rvt;sc.storage=ovt();sc.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();sc.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function rvt(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function nvt(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+tL.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,s=0;t[0].replace(/%[a-zA-Z%]/g,a=>{a!=="%%"&&(r++,a==="%c"&&(s=r))}),t.splice(s,0,e)}sc.log=console.debug||console.log||(()=>{});function ivt(t){try{t?sc.storage.setItem("debug",t):sc.storage.removeItem("debug")}catch{}}function svt(){let t;try{t=sc.storage.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}function ovt(){try{return localStorage}catch{}}tL.exports=vJ()(sc);var{formatters:avt}=tL.exports;avt.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var Ube=_((Xs,nL)=>{var lvt=Ie("tty"),rL=Ie("util");Xs.init=gvt;Xs.log=Avt;Xs.formatArgs=uvt;Xs.save=pvt;Xs.load=hvt;Xs.useColors=cvt;Xs.destroy=rL.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");Xs.colors=[6,2,3,4,5,1];try{let t=Ie("supports-color");t&&(t.stderr||t).level>=2&&(Xs.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}Xs.inspectOpts=Object.keys(process.env).filter(t=>/^debug_/i.test(t)).reduce((t,e)=>{let r=e.substring(6).toLowerCase().replace(/_([a-z])/g,(a,n)=>n.toUpperCase()),s=process.env[e];return/^(yes|on|true|enabled)$/i.test(s)?s=!0:/^(no|off|false|disabled)$/i.test(s)?s=!1:s==="null"?s=null:s=Number(s),t[r]=s,t},{});function cvt(){return"colors"in Xs.inspectOpts?!!Xs.inspectOpts.colors:lvt.isatty(process.stderr.fd)}function uvt(t){let{namespace:e,useColors:r}=this;if(r){let s=this.color,a="\x1B[3"+(s<8?s:"8;5;"+s),n=` ${a};1m${e} \x1B[0m`;t[0]=n+t[0].split(` -`).join(` -`+n),t.push(a+"m+"+nL.exports.humanize(this.diff)+"\x1B[0m")}else t[0]=fvt()+e+" "+t[0]}function fvt(){return Xs.inspectOpts.hideDate?"":new Date().toISOString()+" "}function Avt(...t){return process.stderr.write(rL.formatWithOptions(Xs.inspectOpts,...t)+` -`)}function pvt(t){t?process.env.DEBUG=t:delete process.env.DEBUG}function hvt(){return process.env.DEBUG}function gvt(t){t.inspectOpts={};let e=Object.keys(Xs.inspectOpts);for(let r=0;re.trim()).join(" ")};Mbe.O=function(t){return this.inspectOpts.colors=this.useColors,rL.inspect(t,this.inspectOpts)}});var DJ=_((cir,SJ)=>{typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?SJ.exports=Lbe():SJ.exports=Ube()});var sL=_(Ji=>{"use strict";Object.defineProperty(Ji,"__esModule",{value:!0});Ji.DownloadHTTPError=Ji.DownloadLengthMismatchError=Ji.DownloadError=Ji.ExpiredMetadataError=Ji.EqualVersionError=Ji.BadVersionError=Ji.RepositoryError=Ji.PersistError=Ji.RuntimeError=Ji.ValueError=void 0;var PJ=class extends Error{};Ji.ValueError=PJ;var bJ=class extends Error{};Ji.RuntimeError=bJ;var xJ=class extends Error{};Ji.PersistError=xJ;var UP=class extends Error{};Ji.RepositoryError=UP;var iL=class extends UP{};Ji.BadVersionError=iL;var kJ=class extends iL{};Ji.EqualVersionError=kJ;var QJ=class extends UP{};Ji.ExpiredMetadataError=QJ;var _P=class extends Error{};Ji.DownloadError=_P;var RJ=class extends _P{};Ji.DownloadLengthMismatchError=RJ;var TJ=class extends _P{constructor(e,r){super(e),this.statusCode=r}};Ji.DownloadHTTPError=TJ});var Hbe=_(d1=>{"use strict";var NJ=d1&&d1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(d1,"__esModule",{value:!0});d1.withTempFile=void 0;var FJ=NJ(Ie("fs/promises")),dvt=NJ(Ie("os")),_be=NJ(Ie("path")),mvt=async t=>yvt(async e=>t(_be.default.join(e,"tempfile")));d1.withTempFile=mvt;var yvt=async t=>{let e=await FJ.default.realpath(dvt.default.tmpdir()),r=await FJ.default.mkdtemp(e+_be.default.sep);try{return await t(r)}finally{await FJ.default.rm(r,{force:!0,recursive:!0,maxRetries:3})}}});var LJ=_(kg=>{"use strict";var aL=kg&&kg.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kg,"__esModule",{value:!0});kg.DefaultFetcher=kg.BaseFetcher=void 0;var Evt=aL(DJ()),jbe=aL(Ie("fs")),Ivt=aL(IO()),Cvt=aL(Ie("util")),Gbe=sL(),wvt=Hbe(),Bvt=(0,Evt.default)("tuf:fetch"),oL=class{async downloadFile(e,r,s){return(0,wvt.withTempFile)(async a=>{let n=await this.fetch(e),c=0,f=jbe.default.createWriteStream(a);try{for await(let p of n){let h=Buffer.from(p);if(c+=h.length,c>r)throw new Gbe.DownloadLengthMismatchError("Max length reached");await vvt(f,h)}}finally{await Cvt.default.promisify(f.close).bind(f)()}return s(a)})}async downloadBytes(e,r){return this.downloadFile(e,r,async s=>{let a=jbe.default.createReadStream(s),n=[];for await(let c of a)n.push(c);return Buffer.concat(n)})}};kg.BaseFetcher=oL;var OJ=class extends oL{constructor(e={}){super(),this.timeout=e.timeout,this.retry=e.retry}async fetch(e){Bvt("GET %s",e);let r=await(0,Ivt.default)(e,{timeout:this.timeout,retry:this.retry});if(!r.ok||!r?.body)throw new Gbe.DownloadHTTPError("Failed to download",r.status);return r.body}};kg.DefaultFetcher=OJ;var vvt=async(t,e)=>new Promise((r,s)=>{t.write(e,a=>{a&&s(a),r(!0)})})});var qbe=_(lL=>{"use strict";Object.defineProperty(lL,"__esModule",{value:!0});lL.defaultConfig=void 0;lL.defaultConfig={maxRootRotations:256,maxDelegations:32,rootMaxLength:512e3,timestampMaxLength:16384,snapshotMaxLength:2e6,targetsMaxLength:5e6,prefixTargetsWithHash:!0,fetchTimeout:1e5,fetchRetries:void 0,fetchRetry:2}});var Wbe=_(cL=>{"use strict";Object.defineProperty(cL,"__esModule",{value:!0});cL.TrustedMetadataStore=void 0;var Es=$O(),_i=sL(),MJ=class{constructor(e){this.trustedSet={},this.referenceTime=new Date,this.loadTrustedRoot(e)}get root(){if(!this.trustedSet.root)throw new ReferenceError("No trusted root metadata");return this.trustedSet.root}get timestamp(){return this.trustedSet.timestamp}get snapshot(){return this.trustedSet.snapshot}get targets(){return this.trustedSet.targets}getRole(e){return this.trustedSet[e]}updateRoot(e){let r=JSON.parse(e.toString("utf8")),s=Es.Metadata.fromJSON(Es.MetadataKind.Root,r);if(s.signed.type!=Es.MetadataKind.Root)throw new _i.RepositoryError(`Expected 'root', got ${s.signed.type}`);if(this.root.verifyDelegate(Es.MetadataKind.Root,s),s.signed.version!=this.root.signed.version+1)throw new _i.BadVersionError(`Expected version ${this.root.signed.version+1}, got ${s.signed.version}`);return s.verifyDelegate(Es.MetadataKind.Root,s),this.trustedSet.root=s,s}updateTimestamp(e){if(this.snapshot)throw new _i.RuntimeError("Cannot update timestamp after snapshot");if(this.root.signed.isExpired(this.referenceTime))throw new _i.ExpiredMetadataError("Final root.json is expired");let r=JSON.parse(e.toString("utf8")),s=Es.Metadata.fromJSON(Es.MetadataKind.Timestamp,r);if(s.signed.type!=Es.MetadataKind.Timestamp)throw new _i.RepositoryError(`Expected 'timestamp', got ${s.signed.type}`);if(this.root.verifyDelegate(Es.MetadataKind.Timestamp,s),this.timestamp){if(s.signed.version{let p=n.signed.meta[c];if(!p)throw new _i.RepositoryError(`Missing file ${c} in new snapshot`);if(p.version{"use strict";Object.defineProperty(UJ,"__esModule",{value:!0});UJ.join=Dvt;var Svt=Ie("url");function Dvt(t,e){return new Svt.URL(Pvt(t)+bvt(e)).toString()}function Pvt(t){return t.endsWith("/")?t:t+"/"}function bvt(t){return t.startsWith("/")?t.slice(1):t}});var Vbe=_(nu=>{"use strict";var xvt=nu&&nu.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),kvt=nu&&nu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),jJ=nu&&nu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&xvt(e,t,r);return kvt(e,t),e},Qvt=nu&&nu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nu,"__esModule",{value:!0});nu.Updater=void 0;var xA=$O(),Rvt=Qvt(DJ()),m1=jJ(Ie("fs")),uL=jJ(Ie("path")),Tvt=qbe(),fy=sL(),Fvt=LJ(),Nvt=Wbe(),HP=jJ(Ybe()),_J=(0,Rvt.default)("tuf:cache"),HJ=class{constructor(e){let{metadataDir:r,metadataBaseUrl:s,targetDir:a,targetBaseUrl:n,fetcher:c,config:f}=e;this.dir=r,this.metadataBaseUrl=s,this.targetDir=a,this.targetBaseUrl=n,this.forceCache=e.forceCache??!1;let p=this.loadLocalMetadata(xA.MetadataKind.Root);this.trustedSet=new Nvt.TrustedMetadataStore(p),this.config={...Tvt.defaultConfig,...f},this.fetcher=c||new Fvt.DefaultFetcher({timeout:this.config.fetchTimeout,retry:this.config.fetchRetries??this.config.fetchRetry})}async refresh(){if(this.forceCache)try{await this.loadTimestamp({checkRemote:!1})}catch{await this.loadRoot(),await this.loadTimestamp()}else await this.loadRoot(),await this.loadTimestamp();await this.loadSnapshot(),await this.loadTargets(xA.MetadataKind.Targets,xA.MetadataKind.Root)}async getTargetInfo(e){return this.trustedSet.targets||await this.refresh(),this.preorderDepthFirstWalk(e)}async downloadTarget(e,r,s){let a=r||this.generateTargetPath(e);if(!s){if(!this.targetBaseUrl)throw new fy.ValueError("Target base URL not set");s=this.targetBaseUrl}let n=e.path;if(this.trustedSet.root.signed.consistentSnapshot&&this.config.prefixTargetsWithHash){let p=Object.values(e.hashes),{dir:h,base:E}=uL.parse(n),C=`${p[0]}.${E}`;n=h?`${h}/${C}`:C}let f=HP.join(s,n);return await this.fetcher.downloadFile(f,e.length,async p=>{await e.verify(m1.createReadStream(p)),_J("WRITE %s",a),m1.copyFileSync(p,a)}),a}async findCachedTarget(e,r){r||(r=this.generateTargetPath(e));try{if(m1.existsSync(r))return await e.verify(m1.createReadStream(r)),r}catch{return}}loadLocalMetadata(e){let r=uL.join(this.dir,`${e}.json`);return _J("READ %s",r),m1.readFileSync(r)}async loadRoot(){let r=this.trustedSet.root.signed.version+1,s=r+this.config.maxRootRotations;for(let a=r;a0;){let{roleName:a,parentRoleName:n}=r.pop();if(s.has(a))continue;let c=(await this.loadTargets(a,n))?.signed;if(!c)continue;let f=c.targets?.[e];if(f)return f;if(s.add(a),c.delegations){let p=[],h=c.delegations.rolesForTarget(e);for(let{role:E,terminating:C}of h)if(p.push({roleName:E,parentRoleName:a}),C){r.splice(0);break}p.reverse(),r.push(...p)}}}generateTargetPath(e){if(!this.targetDir)throw new fy.ValueError("Target directory not set");let r=encodeURIComponent(e.path);return uL.join(this.targetDir,r)}persistMetadata(e,r){let s=encodeURIComponent(e);try{let a=uL.join(this.dir,`${s}.json`);_J("WRITE %s",a),m1.writeFileSync(a,r.toString("utf8"))}catch(a){throw new fy.PersistError(`Failed to persist metadata ${s} error: ${a}`)}}};nu.Updater=HJ});var Jbe=_(Qg=>{"use strict";Object.defineProperty(Qg,"__esModule",{value:!0});Qg.Updater=Qg.BaseFetcher=Qg.TargetFile=void 0;var Ovt=$O();Object.defineProperty(Qg,"TargetFile",{enumerable:!0,get:function(){return Ovt.TargetFile}});var Lvt=LJ();Object.defineProperty(Qg,"BaseFetcher",{enumerable:!0,get:function(){return Lvt.BaseFetcher}});var Mvt=Vbe();Object.defineProperty(Qg,"Updater",{enumerable:!0,get:function(){return Mvt.Updater}})});var qJ=_(fL=>{"use strict";Object.defineProperty(fL,"__esModule",{value:!0});fL.TUFError=void 0;var GJ=class extends Error{constructor({code:e,message:r,cause:s}){super(r),this.code=e,this.cause=s,this.name=this.constructor.name}};fL.TUFError=GJ});var Kbe=_(jP=>{"use strict";var Uvt=jP&&jP.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(jP,"__esModule",{value:!0});jP.readTarget=Hvt;var _vt=Uvt(Ie("fs")),AL=qJ();async function Hvt(t,e){let r=await jvt(t,e);return new Promise((s,a)=>{_vt.default.readFile(r,"utf-8",(n,c)=>{n?a(new AL.TUFError({code:"TUF_READ_TARGET_ERROR",message:`error reading target ${r}`,cause:n})):s(c)})})}async function jvt(t,e){let r;try{r=await t.getTargetInfo(e)}catch(a){throw new AL.TUFError({code:"TUF_REFRESH_METADATA_ERROR",message:"error refreshing TUF metadata",cause:a})}if(!r)throw new AL.TUFError({code:"TUF_FIND_TARGET_ERROR",message:`target ${e} not found`});let s=await t.findCachedTarget(r);if(!s)try{s=await t.downloadTarget(r)}catch(a){throw new AL.TUFError({code:"TUF_DOWNLOAD_TARGET_ERROR",message:`error downloading target ${s}`,cause:a})}return s}});var zbe=_((Iir,Gvt)=>{Gvt.exports={"https://tuf-repo-cdn.sigstore.dev":{"root.json":"ewogInNpZ25hdHVyZXMiOiBbCiAgewogICAia2V5aWQiOiAiNmYyNjAwODlkNTkyM2RhZjIwMTY2Y2E2NTdjNTQzYWY2MTgzNDZhYjk3MTg4NGE5OTk2MmIwMTk4OGJiZTBjMyIsCiAgICJzaWciOiAiMzA0NjAyMjEwMDhhYjFmNmYxN2Q0ZjllNmQ3ZGNmMWM4ODkxMmI2YjUzY2MxMDM4ODY0NGFlMWYwOWJjMzdhMDgyY2QwNjAwM2UwMjIxMDBlMTQ1ZWY0YzdiNzgyZDRlODEwN2I1MzQzN2U2NjlkMDQ3Njg5MmNlOTk5OTAzYWUzM2QxNDQ0ODM2Njk5NmU3IgogIH0sCiAgewogICAia2V5aWQiOiAiZTcxYTU0ZDU0MzgzNWJhODZhZGFkOTQ2MDM3OWM3NjQxZmI4NzI2ZDE2NGVhNzY2ODAxYTFjNTIyYWJhN2VhMiIsCiAgICJzaWciOiAiMzA0NTAyMjEwMGM3NjhiMmY4NmRhOTk1NjkwMTljMTYwYTA4MWRhNTRhZTM2YzM0YzBhMzEyMGQzY2I2OWI1M2I3ZDExMzc1OGUwMjIwNGY2NzE1MThmNjE3YjIwZDQ2NTM3ZmFlNmMzYjYzYmFlODkxM2Y0ZjE5NjIxNTYxMDVjYzRmMDE5YWMzNWM2YSIKICB9LAogIHsKICAgImtleWlkIjogIjIyZjRjYWVjNmQ4ZTZmOTU1NWFmNjZiM2Q0YzNjYjA2YTNiYjIzZmRjN2UzOWM5MTZjNjFmNDYyZTZmNTJiMDYiLAogICAic2lnIjogIjMwNDUwMjIxMDBiNDQzNGU2OTk1ZDM2OGQyM2U3NDc1OWFjZDBjYjkwMTNjODNhNWQzNTExZjBmOTk3ZWM1NGM0NTZhZTQzNTBhMDIyMDE1YjBlMjY1ZDE4MmQyYjYxZGM3NGUxNTVkOThiM2MzZmJlNTY0YmEwNTI4NmFhMTRjOGRmMDJjOWI3NTY1MTYiCiAgfSwKICB7CiAgICJrZXlpZCI6ICI2MTY0MzgzODEyNWI0NDBiNDBkYjY5NDJmNWNiNWEzMWMwZGMwNDM2ODMxNmViMmFhYTU4Yjk1OTA0YTU4MjIyIiwKICAgInNpZyI6ICIzMDQ1MDIyMTAwODJjNTg0MTFkOTg5ZWI5Zjg2MTQxMDg1N2Q0MjM4MTU5MGVjOTQyNGRiZGFhNTFlNzhlZDEzNTE1NDMxOTA0ZTAyMjAxMTgxODVkYTZhNmMyOTQ3MTMxYzE3Nzk3ZTJiYjc2MjBjZTI2ZTVmMzAxZDFjZWFjNWYyYTdlNThmOWRjZjJlIgogIH0sCiAgewogICAia2V5aWQiOiAiYTY4N2U1YmY0ZmFiODJiMGVlNThkNDZlMDVjOTUzNTE0NWEyYzlhZmI0NThmNDNkNDJiNDVjYTBmZGNlMmE3MCIsCiAgICJzaWciOiAiMzA0NjAyMjEwMGM3ODUxMzg1NGNhZTljMzJlYWE2Yjg4ZTE4OTEyZjQ4MDA2YzI3NTdhMjU4ZjkxNzMxMmNhYmE3NTk0OGViOWUwMjIxMDBkOWUxYjRjZTBhZGZlOWZkMmUyMTQ4ZDdmYTI3YTJmNDBiYTExMjJiZDY5ZGE3NjEyZDhkMTc3NmIwMTNjOTFkIgogIH0sCiAgewogICAia2V5aWQiOiAiZmRmYTgzYTA3YjVhODM1ODliODdkZWQ0MWY3N2YzOWQyMzJhZDkxZjdjY2U1Mjg2OGRhY2QwNmJhMDg5ODQ5ZiIsCiAgICJzaWciOiAiMzA0NTAyMjA1NjQ4M2EyZDVkOWVhOWNlYzZlMTFlYWRmYjMzYzQ4NGI2MTQyOThmYWNhMTVhY2YxYzQzMWIxMWVkN2Y3MzRjMDIyMTAwZDBjMWQ3MjZhZjkyYTg3ZTRlNjY0NTljYTVhZGYzOGEwNWI0NGUxZjk0MzE4NDIzZjk1NGJhZThiY2E1YmIyZSIKICB9LAogIHsKICAgImtleWlkIjogImUyZjU5YWNiOTQ4ODUxOTQwN2UxOGNiZmM5MzI5NTEwYmUwM2MwNGFjYTk5MjlkMmYwMzAxMzQzZmVjODU1MjMiLAogICAic2lnIjogIjMwNDYwMjIxMDBkMDA0ZGU4ODAyNGMzMmRjNTY1M2E5ZjQ4NDNjZmM1MjE1NDI3MDQ4YWQ5NjAwZDJjZjljOTY5ZTZlZGZmM2QyMDIyMTAwZDllYmI3OThmNWZjNjZhZjEwODk5ZGVjZTAxNGE4NjI4Y2NmM2M1NDAyY2Q0YTQyNzAyMDc0NzJmOGY2ZTcxMiIKICB9LAogIHsKICAgImtleWlkIjogIjNjMzQ0YWEwNjhmZDRjYzRlODdkYzUwYjYxMmMwMjQzMWZiYzc3MWU5NTAwMzk5MzY4M2EyYjBiZjI2MGNmMGUiLAogICAic2lnIjogIjMwNDYwMjIxMDBiN2IwOTk5NmM0NWNhMmQ0YjA1NjAzZTU2YmFlZmEyOTcxOGEwYjcxMTQ3Y2Y4YzZlNjYzNDliYWE2MTQ3N2RmMDIyMTAwYzRkYTgwYzcxN2I0ZmE3YmJhMGZkNWM3MmRhOGEwNDk5MzU4YjAxMzU4YjIzMDlmNDFkMTQ1NmVhMWU3ZTFkOSIKICB9LAogIHsKICAgImtleWlkIjogImVjODE2Njk3MzRlMDE3OTk2YzViODVmM2QwMmMzZGUxZGQ0NjM3YTE1MjAxOWZlMWFmMTI1ZDJmOTM2OGI5NWUiLAogICAic2lnIjogIjMwNDYwMjIxMDBiZTk3ODJjMzA3NDRlNDExYTgyZmE4NWI1MTM4ZDYwMWNlMTQ4YmMxOTI1OGFlYzY0ZTdlYzI0NDc4ZjM4ODEyMDIyMTAwY2FlZjYzZGNhZjFhNGI5YTUwMGQzYmQwZTNmMTY0ZWMxOGYxYjYzZDdhOTQ2MGQ5YWNhYjEwNjZkYjBmMDE2ZCIKICB9LAogIHsKICAgImtleWlkIjogIjFlMWQ2NWNlOThiMTBhZGRhZDQ3NjRmZWJmN2RkYTJkMDQzNmIzZDNhMzg5MzU3OWMwZGRkYWVhMjBlNTQ4NDkiLAogICAic2lnIjogIjMwNDUwMjIwNzQ2ZWMzZjg1MzRjZTU1NTMxZDBkMDFmZjY0OTY0ZWY0NDBkMWU3ZDJjNGMxNDI0MDliOGU5NzY5ZjFhZGE2ZjAyMjEwMGUzYjkyOWZjZDkzZWExOGZlYWEwODI1ODg3YTcyMTA0ODk4NzlhNjY3ODBjMDdhODNmNGJkNDZlMmYwOWFiM2IiCiAgfQogXSwKICJzaWduZWQiOiB7CiAgIl90eXBlIjogInJvb3QiLAogICJjb25zaXN0ZW50X3NuYXBzaG90IjogdHJ1ZSwKICAiZXhwaXJlcyI6ICIyMDI1LTAyLTE5VDA4OjA0OjMyWiIsCiAgImtleXMiOiB7CiAgICIyMmY0Y2FlYzZkOGU2Zjk1NTVhZjY2YjNkNGMzY2IwNmEzYmIyM2ZkYzdlMzljOTE2YzYxZjQ2MmU2ZjUyYjA2IjogewogICAgImtleWlkX2hhc2hfYWxnb3JpdGhtcyI6IFsKICAgICAic2hhMjU2IiwKICAgICAic2hhNTEyIgogICAgXSwKICAgICJrZXl0eXBlIjogImVjZHNhIiwKICAgICJrZXl2YWwiOiB7CiAgICAgInB1YmxpYyI6ICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFekJ6Vk9tSENQb2pNVkxTSTM2NFdpaVY4TlByRFxuNklnUnhWbGlza3ovdit5M0pFUjVtY1ZHY09ObGlEY1dNQzVKMmxmSG1qUE5QaGI0SDd4bThMemZTQT09XG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1cbiIKICAgIH0sCiAgICAic2NoZW1lIjogImVjZHNhLXNoYTItbmlzdHAyNTYiLAogICAgIngtdHVmLW9uLWNpLWtleW93bmVyIjogIkBzYW50aWFnb3RvcnJlcyIKICAgfSwKICAgIjYxNjQzODM4MTI1YjQ0MGI0MGRiNjk0MmY1Y2I1YTMxYzBkYzA0MzY4MzE2ZWIyYWFhNThiOTU5MDRhNTgyMjIiOiB7CiAgICAia2V5aWRfaGFzaF9hbGdvcml0aG1zIjogWwogICAgICJzaGEyNTYiLAogICAgICJzaGE1MTIiCiAgICBdLAogICAgImtleXR5cGUiOiAiZWNkc2EiLAogICAgImtleXZhbCI6IHsKICAgICAicHVibGljIjogIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVpbmlrU3NBUW1Za05lSDVlWXEvQ25JekxhYWNPXG54bFNhYXdRRE93cUt5L3RDcXhxNXh4UFNKYzIxSzRXSWhzOUd5T2tLZnp1ZVkzR0lMemNNSlo0Y1d3PT1cbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLVxuIgogICAgfSwKICAgICJzY2hlbWUiOiAiZWNkc2Etc2hhMi1uaXN0cDI1NiIsCiAgICAieC10dWYtb24tY2kta2V5b3duZXIiOiAiQGJvYmNhbGxhd2F5IgogICB9LAogICAiNmYyNjAwODlkNTkyM2RhZjIwMTY2Y2E2NTdjNTQzYWY2MTgzNDZhYjk3MTg4NGE5OTk2MmIwMTk4OGJiZTBjMyI6IHsKICAgICJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCiAgICAgInNoYTI1NiIsCiAgICAgInNoYTUxMiIKICAgIF0sCiAgICAia2V5dHlwZSI6ICJlY2RzYSIsCiAgICAia2V5dmFsIjogewogICAgICJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXk4WEtzbWhCWURJOEpjMEd3ekJ4ZUtheDBjbTVcblNUS0VVNjVIUEZ1blVuNDFzVDhwaTBGak00SWtIei9ZVW13bUxVTzBXdDdseGhqNkJrTElLNHFZQXc9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCiAgICB9LAogICAgInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKICAgICJ4LXR1Zi1vbi1jaS1rZXlvd25lciI6ICJAZGxvcmVuYyIKICAgfSwKICAgIjcyNDdmMGRiYWQ4NWIxNDdlMTg2M2JhZGU3NjEyNDNjYzc4NWRjYjdhYTQxMGU3MTA1ZGQzZDJiNjFhMzZkMmMiOiB7CiAgICAia2V5aWRfaGFzaF9hbGdvcml0aG1zIjogWwogICAgICJzaGEyNTYiLAogICAgICJzaGE1MTIiCiAgICBdLAogICAgImtleXR5cGUiOiAiZWNkc2EiLAogICAgImtleXZhbCI6IHsKICAgICAicHVibGljIjogIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVXUmlHcjUraiszSjVTc0grWnRyNW5FMkgyd083XG5CVituTzNzOTNnTGNhMThxVE96SFkxb1d5QUdEeWtNU3NHVFVCU3Q5RCtBbjBLZktzRDJtZlNNNDJRPT1cbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLVxuIgogICAgfSwKICAgICJzY2hlbWUiOiAiZWNkc2Etc2hhMi1uaXN0cDI1NiIsCiAgICAieC10dWYtb24tY2ktb25saW5lLXVyaSI6ICJnY3BrbXM6Ly9wcm9qZWN0cy9zaWdzdG9yZS1yb290LXNpZ25pbmcvbG9jYXRpb25zL2dsb2JhbC9rZXlSaW5ncy9yb290L2NyeXB0b0tleXMvdGltZXN0YW1wIgogICB9LAogICAiYTY4N2U1YmY0ZmFiODJiMGVlNThkNDZlMDVjOTUzNTE0NWEyYzlhZmI0NThmNDNkNDJiNDVjYTBmZGNlMmE3MCI6IHsKICAgICJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCiAgICAgInNoYTI1NiIsCiAgICAgInNoYTUxMiIKICAgIF0sCiAgICAia2V5dHlwZSI6ICJlY2RzYSIsCiAgICAia2V5dmFsIjogewogICAgICJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTBnaHJoOTJMdzFZcjNpZEdWNVdxQ3RNREI4Q3hcbitEOGhkQzR3MlpMTklwbFZSb1ZHTHNrWWEzZ2hlTXlPamlKOGtQaTE1YVEyLy83UCtvajdVdkpQR3c9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCiAgICB9LAogICAgInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKICAgICJ4LXR1Zi1vbi1jaS1rZXlvd25lciI6ICJAam9zaHVhZ2wiCiAgIH0sCiAgICJlNzFhNTRkNTQzODM1YmE4NmFkYWQ5NDYwMzc5Yzc2NDFmYjg3MjZkMTY0ZWE3NjY4MDFhMWM1MjJhYmE3ZWEyIjogewogICAgImtleWlkX2hhc2hfYWxnb3JpdGhtcyI6IFsKICAgICAic2hhMjU2IiwKICAgICAic2hhNTEyIgogICAgXSwKICAgICJrZXl0eXBlIjogImVjZHNhIiwKICAgICJrZXl2YWwiOiB7CiAgICAgInB1YmxpYyI6ICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFRVhzejNTWlhGYjhqTVY0Mmo2cEpseWpialI4S1xuTjNCd29jZXhxNkxNSWI1cXNXS09RdkxOMTZOVWVmTGM0SHN3T291bVJzVlZhYWpTcFFTNmZvYmtSdz09XG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1cbiIKICAgIH0sCiAgICAic2NoZW1lIjogImVjZHNhLXNoYTItbmlzdHAyNTYiLAogICAgIngtdHVmLW9uLWNpLWtleW93bmVyIjogIkBtbm02NzgiCiAgIH0KICB9LAogICJyb2xlcyI6IHsKICAgInJvb3QiOiB7CiAgICAia2V5aWRzIjogWwogICAgICI2ZjI2MDA4OWQ1OTIzZGFmMjAxNjZjYTY1N2M1NDNhZjYxODM0NmFiOTcxODg0YTk5OTYyYjAxOTg4YmJlMGMzIiwKICAgICAiZTcxYTU0ZDU0MzgzNWJhODZhZGFkOTQ2MDM3OWM3NjQxZmI4NzI2ZDE2NGVhNzY2ODAxYTFjNTIyYWJhN2VhMiIsCiAgICAgIjIyZjRjYWVjNmQ4ZTZmOTU1NWFmNjZiM2Q0YzNjYjA2YTNiYjIzZmRjN2UzOWM5MTZjNjFmNDYyZTZmNTJiMDYiLAogICAgICI2MTY0MzgzODEyNWI0NDBiNDBkYjY5NDJmNWNiNWEzMWMwZGMwNDM2ODMxNmViMmFhYTU4Yjk1OTA0YTU4MjIyIiwKICAgICAiYTY4N2U1YmY0ZmFiODJiMGVlNThkNDZlMDVjOTUzNTE0NWEyYzlhZmI0NThmNDNkNDJiNDVjYTBmZGNlMmE3MCIKICAgIF0sCiAgICAidGhyZXNob2xkIjogMwogICB9LAogICAic25hcHNob3QiOiB7CiAgICAia2V5aWRzIjogWwogICAgICI3MjQ3ZjBkYmFkODViMTQ3ZTE4NjNiYWRlNzYxMjQzY2M3ODVkY2I3YWE0MTBlNzEwNWRkM2QyYjYxYTM2ZDJjIgogICAgXSwKICAgICJ0aHJlc2hvbGQiOiAxLAogICAgIngtdHVmLW9uLWNpLWV4cGlyeS1wZXJpb2QiOiAzNjUwLAogICAgIngtdHVmLW9uLWNpLXNpZ25pbmctcGVyaW9kIjogMzY1CiAgIH0sCiAgICJ0YXJnZXRzIjogewogICAgImtleWlkcyI6IFsKICAgICAiNmYyNjAwODlkNTkyM2RhZjIwMTY2Y2E2NTdjNTQzYWY2MTgzNDZhYjk3MTg4NGE5OTk2MmIwMTk4OGJiZTBjMyIsCiAgICAgImU3MWE1NGQ1NDM4MzViYTg2YWRhZDk0NjAzNzljNzY0MWZiODcyNmQxNjRlYTc2NjgwMWExYzUyMmFiYTdlYTIiLAogICAgICIyMmY0Y2FlYzZkOGU2Zjk1NTVhZjY2YjNkNGMzY2IwNmEzYmIyM2ZkYzdlMzljOTE2YzYxZjQ2MmU2ZjUyYjA2IiwKICAgICAiNjE2NDM4MzgxMjViNDQwYjQwZGI2OTQyZjVjYjVhMzFjMGRjMDQzNjgzMTZlYjJhYWE1OGI5NTkwNGE1ODIyMiIsCiAgICAgImE2ODdlNWJmNGZhYjgyYjBlZTU4ZDQ2ZTA1Yzk1MzUxNDVhMmM5YWZiNDU4ZjQzZDQyYjQ1Y2EwZmRjZTJhNzAiCiAgICBdLAogICAgInRocmVzaG9sZCI6IDMKICAgfSwKICAgInRpbWVzdGFtcCI6IHsKICAgICJrZXlpZHMiOiBbCiAgICAgIjcyNDdmMGRiYWQ4NWIxNDdlMTg2M2JhZGU3NjEyNDNjYzc4NWRjYjdhYTQxMGU3MTA1ZGQzZDJiNjFhMzZkMmMiCiAgICBdLAogICAgInRocmVzaG9sZCI6IDEsCiAgICAieC10dWYtb24tY2ktZXhwaXJ5LXBlcmlvZCI6IDcsCiAgICAieC10dWYtb24tY2ktc2lnbmluZy1wZXJpb2QiOiA0CiAgIH0KICB9LAogICJzcGVjX3ZlcnNpb24iOiAiMS4wIiwKICAidmVyc2lvbiI6IDEwLAogICJ4LXR1Zi1vbi1jaS1leHBpcnktcGVyaW9kIjogMTgyLAogICJ4LXR1Zi1vbi1jaS1zaWduaW5nLXBlcmlvZCI6IDMxCiB9Cn0=",targets:{"trusted_root.json":"ewogICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRldi5zaWdzdG9yZS50cnVzdGVkcm9vdCtqc29uO3ZlcnNpb249MC4xIiwKICAidGxvZ3MiOiBbCiAgICB7CiAgICAgICJiYXNlVXJsIjogImh0dHBzOi8vcmVrb3Iuc2lnc3RvcmUuZGV2IiwKICAgICAgImhhc2hBbGdvcml0aG0iOiAiU0hBMl8yNTYiLAogICAgICAicHVibGljS2V5IjogewogICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUyRzJZKzJ0YWJkVFY1QmNHaUJJeDBhOWZBRndya0JibUxTR3RrczRMM3FYNnlZWTB6dWZCbmhDOFVyL2l5NTVHaFdQLzlBL2JZMkxoQzMwTTkrUll0dz09IiwKICAgICAgICAia2V5RGV0YWlscyI6ICJQS0lYX0VDRFNBX1AyNTZfU0hBXzI1NiIsCiAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgInN0YXJ0IjogIjIwMjEtMDEtMTJUMTE6NTM6MjcuMDAwWiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJsb2dJZCI6IHsKICAgICAgICAia2V5SWQiOiAid05JOWF0UUdseitWV2ZPNkxSeWdINFFVZlkvOFc0UkZ3aVQ1aTVXUmdCMD0iCiAgICAgIH0KICAgIH0KICBdLAogICJjZXJ0aWZpY2F0ZUF1dGhvcml0aWVzIjogWwogICAgewogICAgICAic3ViamVjdCI6IHsKICAgICAgICAib3JnYW5pemF0aW9uIjogInNpZ3N0b3JlLmRldiIsCiAgICAgICAgImNvbW1vbk5hbWUiOiAic2lnc3RvcmUiCiAgICAgIH0sCiAgICAgICJ1cmkiOiAiaHR0cHM6Ly9mdWxjaW8uc2lnc3RvcmUuZGV2IiwKICAgICAgImNlcnRDaGFpbiI6IHsKICAgICAgICAiY2VydGlmaWNhdGVzIjogWwogICAgICAgICAgewogICAgICAgICAgICAicmF3Qnl0ZXMiOiAiTUlJQitEQ0NBWDZnQXdJQkFnSVROVmtEWm9DaW9mUERzeTdkZm02Z2VMYnVoekFLQmdncWhrak9QUVFEQXpBcU1SVXdFd1lEVlFRS0V3eHphV2R6ZEc5eVpTNWtaWFl4RVRBUEJnTlZCQU1UQ0hOcFozTjBiM0psTUI0WERUSXhNRE13TnpBek1qQXlPVm9YRFRNeE1ESXlNekF6TWpBeU9Wb3dLakVWTUJNR0ExVUVDaE1NYzJsbmMzUnZjbVV1WkdWMk1SRXdEd1lEVlFRREV3aHphV2R6ZEc5eVpUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQkxTeUE3SWk1aytwTk84WkVXWTB5bGVtV0Rvd09rTmEza0wrR1pFNVo1R1dlaEw5L0E5YlJOQTNSYnJzWjVpMEpjYXN0YVJMN1NwNWZwL2pENWR4cWMvVWRUVm5sdlMxNmFuKzJZZnN3ZS9RdUxvbFJVQ3JjT0UyKzJpQTUrdHpkNk5tTUdRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFFd0hRWURWUjBPQkJZRUZNakZIUUJCbWlRcE1sRWs2dzJ1U3UxS0J0UHNNQjhHQTFVZEl3UVlNQmFBRk1qRkhRQkJtaVFwTWxFazZ3MnVTdTFLQnRQc01Bb0dDQ3FHU000OUJBTURBMmdBTUdVQ01IOGxpV0pmTXVpNnZYWEJoakRnWTRNd3NsbU4vVEp4VmUvODNXckZvbXdtTmYwNTZ5MVg0OEY5YzRtM2Ezb3pYQUl4QUtqUmF5NS9hai9qc0tLR0lrbVFhdGpJOHV1cEhyLytDeEZ2YUpXbXBZcU5rTERHUlUrOW9yemg1aEkyUnJjdWFRPT0iCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgInN0YXJ0IjogIjIwMjEtMDMtMDdUMDM6MjA6MjkuMDAwWiIsCiAgICAgICAgImVuZCI6ICIyMDIyLTEyLTMxVDIzOjU5OjU5Ljk5OVoiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzdWJqZWN0IjogewogICAgICAgICJvcmdhbml6YXRpb24iOiAic2lnc3RvcmUuZGV2IiwKICAgICAgICAiY29tbW9uTmFtZSI6ICJzaWdzdG9yZSIKICAgICAgfSwKICAgICAgInVyaSI6ICJodHRwczovL2Z1bGNpby5zaWdzdG9yZS5kZXYiLAogICAgICAiY2VydENoYWluIjogewogICAgICAgICJjZXJ0aWZpY2F0ZXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNSUlDR2pDQ0FhR2dBd0lCQWdJVUFMblZpVmZuVTBickphc21Sa0hybi9VbmZhUXdDZ1lJS29aSXpqMEVBd013S2pFVk1CTUdBMVVFQ2hNTWMybG5jM1J2Y21VdVpHVjJNUkV3RHdZRFZRUURFd2h6YVdkemRHOXlaVEFlRncweU1qQTBNVE15TURBMk1UVmFGdzB6TVRFd01EVXhNelUyTlRoYU1EY3hGVEFUQmdOVkJBb1RESE5wWjNOMGIzSmxMbVJsZGpFZU1Cd0dBMVVFQXhNVmMybG5jM1J2Y21VdGFXNTBaWEp0WldScFlYUmxNSFl3RUFZSEtvWkl6ajBDQVFZRks0RUVBQ0lEWWdBRThSVlMveXNIK05PdnVEWnlQSVp0aWxnVUY5TmxhcllwQWQ5SFAxdkJCSDFVNUNWNzdMU1M3czBaaUg0bkU3SHY3cHRTNkx2dlIvU1RrNzk4TFZnTXpMbEo0SGVJZkYzdEhTYWV4TGNZcFNBU3Ixa1MwTi9SZ0JKei85aldDaVhubzNzd2VUQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0V3WURWUjBsQkF3d0NnWUlLd1lCQlFVSEF3TXdFZ1lEVlIwVEFRSC9CQWd3QmdFQi93SUJBREFkQmdOVkhRNEVGZ1FVMzlQcHoxWWtFWmI1cU5qcEtGV2l4aTRZWkQ4d0h3WURWUjBqQkJnd0ZvQVVXTUFlWDVGRnBXYXBlc3lRb1pNaTBDckZ4Zm93Q2dZSUtvWkl6ajBFQXdNRFp3QXdaQUl3UENzUUs0RFlpWllEUElhRGk1SEZLbmZ4WHg2QVNTVm1FUmZzeW5ZQmlYMlg2U0pSblpVODQvOURaZG5GdnZ4bUFqQk90NlFwQmxjNEovMER4dmtUQ3FwY2x2emlMNkJDQ1BuamRsSUIzUHUzQnhzUG15Z1VZN0lpMnpiZENkbGlpb3c9IgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgInJhd0J5dGVzIjogIk1JSUI5ekNDQVh5Z0F3SUJBZ0lVQUxaTkFQRmR4SFB3amVEbG9Ed3lZQ2hBTy80d0NnWUlLb1pJemowRUF3TXdLakVWTUJNR0ExVUVDaE1NYzJsbmMzUnZjbVV1WkdWMk1SRXdEd1lEVlFRREV3aHphV2R6ZEc5eVpUQWVGdzB5TVRFd01EY3hNelUyTlRsYUZ3MHpNVEV3TURVeE16VTJOVGhhTUNveEZUQVRCZ05WQkFvVERITnBaM04wYjNKbExtUmxkakVSTUE4R0ExVUVBeE1JYzJsbmMzUnZjbVV3ZGpBUUJnY3Foa2pPUFFJQkJnVXJnUVFBSWdOaUFBVDdYZUZUNHJiM1BRR3dTNElhanRMazMvT2xucGdhbmdhQmNsWXBzWUJyNWkrNHluQjA3Y2ViM0xQME9JT1pkeGV4WDY5YzVpVnV5SlJRK0h6MDV5aStVRjN1QldBbEhwaVM1c2gwK0gyR0hFN1NYcmsxRUM1bTFUcjE5TDlnZzkyall6QmhNQTRHQTFVZER3RUIvd1FFQXdJQkJqQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01CMEdBMVVkRGdRV0JCUll3QjVma1VXbFpxbDZ6SkNoa3lMUUtzWEYrakFmQmdOVkhTTUVHREFXZ0JSWXdCNWZrVVdsWnFsNnpKQ2hreUxRS3NYRitqQUtCZ2dxaGtqT1BRUURBd05wQURCbUFqRUFqMW5IZVhacCsxM05XQk5hK0VEc0RQOEcxV1dnMXRDTVdQL1dIUHFwYVZvMGpoc3dlTkZaZ1NzMGVFN3dZSTRxQWpFQTJXQjlvdDk4c0lrb0YzdlpZZGQzL1Z0V0I1YjlUTk1lYTdJeC9zdEo1VGZjTExlQUJMRTRCTkpPc1E0dm5CSEoiCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgInN0YXJ0IjogIjIwMjItMDQtMTNUMjA6MDY6MTUuMDAwWiIKICAgICAgfQogICAgfQogIF0sCiAgImN0bG9ncyI6IFsKICAgIHsKICAgICAgImJhc2VVcmwiOiAiaHR0cHM6Ly9jdGZlLnNpZ3N0b3JlLmRldi90ZXN0IiwKICAgICAgImhhc2hBbGdvcml0aG0iOiAiU0hBMl8yNTYiLAogICAgICAicHVibGljS2V5IjogewogICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUViZndSK1JKdWRYc2NnUkJScEtYMVhGRHkzUHl1ZER4ei9TZm5SaTFmVDhla3BmQmQyTzF1b3o3anIzWjhuS3p4QTY5RVVRK2VGQ0ZJM3pldWJQV1U3dz09IiwKICAgICAgICAia2V5RGV0YWlscyI6ICJQS0lYX0VDRFNBX1AyNTZfU0hBXzI1NiIsCiAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgInN0YXJ0IjogIjIwMjEtMDMtMTRUMDA6MDA6MDAuMDAwWiIsCiAgICAgICAgICAiZW5kIjogIjIwMjItMTAtMzFUMjM6NTk6NTkuOTk5WiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJsb2dJZCI6IHsKICAgICAgICAia2V5SWQiOiAiQ0dDUzhDaFMvMmhGMGRGcko0U2NSV2NZckJZOXd6alNiZWE4SWdZMmIzST0iCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJiYXNlVXJsIjogImh0dHBzOi8vY3RmZS5zaWdzdG9yZS5kZXYvMjAyMiIsCiAgICAgICJoYXNoQWxnb3JpdGhtIjogIlNIQTJfMjU2IiwKICAgICAgInB1YmxpY0tleSI6IHsKICAgICAgICAicmF3Qnl0ZXMiOiAiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaVBTbEZpMENtRlRmRWpDVXFGOUh1Q0VjWVhOS0FhWWFsSUptQlo4eXllelBqVHFoeHJLQnBNbmFvY1Z0TEpCSTFlTTN1WG5RelFHQUpkSjRnczlGeXc9PSIsCiAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICJ2YWxpZEZvciI6IHsKICAgICAgICAgICJzdGFydCI6ICIyMDIyLTEwLTIwVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgfQogICAgICB9LAogICAgICAibG9nSWQiOiB7CiAgICAgICAgImtleUlkIjogIjNUMHdhc2JIRVRKakdSNGNtV2MzQXFKS1hyamVQSzMvaDRweWdDOHA3bzQ9IgogICAgICB9CiAgICB9CiAgXSwKICAidGltZXN0YW1wQXV0aG9yaXRpZXMiOiBbCiAgICB7CiAgICAgICJzdWJqZWN0IjogewogICAgICAgICJvcmdhbml6YXRpb24iOiAiR2l0SHViLCBJbmMuIiwKICAgICAgICAiY29tbW9uTmFtZSI6ICJJbnRlcm5hbCBTZXJ2aWNlcyBSb290IgogICAgICB9LAogICAgICAiY2VydENoYWluIjogewogICAgICAgICJjZXJ0aWZpY2F0ZXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNSUlCM0RDQ0FXS2dBd0lCQWdJVWNoa05zSDM2WGEwNGIxTHFJYytxcjlEVmVjTXdDZ1lJS29aSXpqMEVBd013TWpFVk1CTUdBMVVFQ2hNTVIybDBTSFZpTENCSmJtTXVNUmt3RndZRFZRUURFeEJVVTBFZ2FXNTBaWEp0WldScFlYUmxNQjRYRFRJek1EUXhOREF3TURBd01Gb1hEVEkwTURReE16QXdNREF3TUZvd01qRVZNQk1HQTFVRUNoTU1SMmwwU0hWaUxDQkpibU11TVJrd0Z3WURWUVFERXhCVVUwRWdWR2x0WlhOMFlXMXdhVzVuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFVUQ1Wk5iU3FZTWQ2cjhxcE9PRVg5aWJHblpUOUdzdVhPaHIvZjhVOUZKdWdCR0V4S1lwNDBPVUxTMGVyalpXN3hWOXhWNTJObkpmNU9lRHE0ZTVaS3FOV01GUXdEZ1lEVlIwUEFRSC9CQVFEQWdlQU1CTUdBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TUlNQXdHQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqQkJnd0ZvQVVhVzFSdWRPZ1Z0MGxlcVkwV0tZYnVQcjQ3d0F3Q2dZSUtvWkl6ajBFQXdNRGFBQXdaUUl3YlVIOUh2RDRlakNaSk9XUW5xQWxrcVVSbGx2dTlNOCtWcUxiaVJLK3pTZlpDWndzaWxqUm44TVFRUlNrWEVFNUFqRUFnK1Z4cXRvamZWZnU4RGh6emhDeDlHS0VUYkpIYjE5aVY3Mm1NS1ViREFGbXpaNmJROGI1NFpiOHRpZHk1YVdlIgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgInJhd0J5dGVzIjogIk1JSUNFRENDQVpXZ0F3SUJBZ0lVWDhaTzVRWFA3dk40ZE1RNWU5c1UzbnViOE9nd0NnWUlLb1pJemowRUF3TXdPREVWTUJNR0ExVUVDaE1NUjJsMFNIVmlMQ0JKYm1NdU1SOHdIUVlEVlFRREV4WkpiblJsY201aGJDQlRaWEoyYVdObGN5QlNiMjkwTUI0WERUSXpNRFF4TkRBd01EQXdNRm9YRFRJNE1EUXhNakF3TURBd01Gb3dNakVWTUJNR0ExVUVDaE1NUjJsMFNIVmlMQ0JKYm1NdU1Sa3dGd1lEVlFRREV4QlVVMEVnYVc1MFpYSnRaV1JwWVhSbE1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFdk1MWS9kVFZidklKWUFOQXVzekV3Sm5RRTFsbGZ0eW55TUtJTWhoNDhIbXFiVnI1eWd5YnpzTFJMVktiQldPZFoyMWFlSnorZ1ppeXRaZXRxY3lGOVdsRVI1TkVNZjZKVjdaTm9qUXB4SHE0UkhHb0dTY2VRdi9xdlRpWnhFREtvMll3WkRBT0JnTlZIUThCQWY4RUJBTUNBUVl3RWdZRFZSMFRBUUgvQkFnd0JnRUIvd0lCQURBZEJnTlZIUTRFRmdRVWFXMVJ1ZE9nVnQwbGVxWTBXS1lidVByNDd3QXdId1lEVlIwakJCZ3dGb0FVOU5ZWWxvYm5BRzRjMC9xanh5SC9scS93eitRd0NnWUlLb1pJemowRUF3TURhUUF3WmdJeEFLMUIxODV5Z0NySVlGbElzM0dqc3dqbndTTUc2TFk4d29MVmRha0tEWnhWYThmOGNxTXMxRGhjeEowKzA5dzk1UUl4QU8rdEJ6Wms3dmpVSjlpSmdENFI2WldUeFFXS3FObTc0ak85OW8rbzlzdjRGSS9TWlRaVEZ5TW4wSUpFSGRObXlBPT0iCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAicmF3Qnl0ZXMiOiAiTUlJQjlEQ0NBWHFnQXdJQkFnSVVhL0pBa2RVaks0SlV3c3F0YWlSSkdXaHFMU293Q2dZSUtvWkl6ajBFQXdNd09ERVZNQk1HQTFVRUNoTU1SMmwwU0hWaUxDQkpibU11TVI4d0hRWURWUVFERXhaSmJuUmxjbTVoYkNCVFpYSjJhV05sY3lCU2IyOTBNQjRYRFRJek1EUXhOREF3TURBd01Gb1hEVE16TURReE1UQXdNREF3TUZvd09ERVZNQk1HQTFVRUNoTU1SMmwwU0hWaUxDQkpibU11TVI4d0hRWURWUVFERXhaSmJuUmxjbTVoYkNCVFpYSjJhV05sY3lCU2IyOTBNSFl3RUFZSEtvWkl6ajBDQVFZRks0RUVBQ0lEWWdBRWY5akZBWHh6NGt4NjhBSFJNT2tGQmhmbERjTVR2emFYejR4L0ZDY1hqSi8xcUVLb24vcVBJR25hVVJza0R0eU5iTkRPcGVKVERERnF0NDhpTVBybnpweDZJWndxZW1mVUpONHhCRVpmemErcFl0L2l5b2QrOXRacjIwUlJXU3YvbzBVd1F6QU9CZ05WSFE4QkFmOEVCQU1DQVFZd0VnWURWUjBUQVFIL0JBZ3dCZ0VCL3dJQkFqQWRCZ05WSFE0RUZnUVU5TllZbG9ibkFHNGMwL3FqeHlIL2xxL3d6K1F3Q2dZSUtvWkl6ajBFQXdNRGFBQXdaUUl4QUxaTFo4QmdSWHpLeExNTU45VklsTytlNGhyQm5OQmdGN3R6N0hucm93djJOZXRaRXJJQUNLRnltQmx2V0R2dE1BSXdaTytraTZzc1ExYnNabzk4TzhtRUFmMk5aN2lpQ2dERFUwVndqZWNvNnp5ZWgwekJUczkvN2dWNkFITlE1M3hEIgogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSwKICAgICAgInZhbGlkRm9yIjogewogICAgICAgICJzdGFydCI6ICIyMDIzLTA0LTE0VDAwOjAwOjAwLjAwMFoiCiAgICAgIH0KICAgIH0KICBdCn0K","registry.npmjs.org%2Fkeys.json":"ewogICAgImtleXMiOiBbCiAgICAgICAgewogICAgICAgICAgICAia2V5SWQiOiAiU0hBMjU2OmpsM2J3c3d1ODBQampva0NnaDBvMnc1YzJVNExoUUFFNTdnajljejFrekEiLAogICAgICAgICAgICAia2V5VXNhZ2UiOiAibnBtOnNpZ25hdHVyZXMiLAogICAgICAgICAgICAicHVibGljS2V5IjogewogICAgICAgICAgICAgICAgInJhd0J5dGVzIjogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTFPbGIzek1BRkZ4WEtIaUlrUU81Y0ozWWhsNWk2VVBwK0lodXRlQkpidUhjQTVVb2dLbzBFV3RsV3dXNktTYUtvVE5FWUw3SmxDUWlWbmtoQmt0VWdnPT0iLAogICAgICAgICAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICJzdGFydCI6ICIxOTk5LTAxLTAxVDAwOjAwOjAwLjAwMFoiLAogICAgICAgICAgICAgICAgICAgICJlbmQiOiAiMjAyNS0wMS0yOVQwMDowMDowMC4wMDBaIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJrZXlJZCI6ICJTSEEyNTY6amwzYndzd3U4MFBqam9rQ2doMG8ydzVjMlU0TGhRQUU1N2dqOWN6MWt6QSIsCiAgICAgICAgICAgICJrZXlVc2FnZSI6ICJucG06YXR0ZXN0YXRpb25zIiwKICAgICAgICAgICAgInB1YmxpY0tleSI6IHsKICAgICAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUxT2xiM3pNQUZGeFhLSGlJa1FPNWNKM1lobDVpNlVQcCtJaHV0ZUJKYnVIY0E1VW9nS28wRVd0bFd3VzZLU2FLb1RORVlMN0psQ1FpVm5raEJrdFVnZz09IiwKICAgICAgICAgICAgICAgICJrZXlEZXRhaWxzIjogIlBLSVhfRUNEU0FfUDI1Nl9TSEFfMjU2IiwKICAgICAgICAgICAgICAgICJ2YWxpZEZvciI6IHsKICAgICAgICAgICAgICAgICAgICAic3RhcnQiOiAiMjAyMi0xMi0wMVQwMDowMDowMC4wMDBaIiwKICAgICAgICAgICAgICAgICAgICAiZW5kIjogIjIwMjUtMDEtMjlUMDA6MDA6MDAuMDAwWiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAia2V5SWQiOiAiU0hBMjU2OkRoUTh3UjVBUEJ2RkhMRi8rVGMrQVl2UE9kVHBjSURxT2h4c0JIUndDN1UiLAogICAgICAgICAgICAia2V5VXNhZ2UiOiAibnBtOnNpZ25hdHVyZXMiLAogICAgICAgICAgICAicHVibGljS2V5IjogewogICAgICAgICAgICAgICAgInJhd0J5dGVzIjogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVk2WWE3VysrN2FVUHp2TVRyZXpINlljeDNjK0hPS1lDY05HeWJKWlNDSnEvZmQ3UWE4dXVBS3RkSWtVUXRRaUVLRVJoQW1FNWxNTUpoUDhPa0RPYTJnPT0iLAogICAgICAgICAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICJzdGFydCI6ICIyMDI1LTAxLTEzVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgImtleUlkIjogIlNIQTI1NjpEaFE4d1I1QVBCdkZITEYvK1RjK0FZdlBPZFRwY0lEcU9oeHNCSFJ3QzdVIiwKICAgICAgICAgICAgImtleVVzYWdlIjogIm5wbTphdHRlc3RhdGlvbnMiLAogICAgICAgICAgICAicHVibGljS2V5IjogewogICAgICAgICAgICAgICAgInJhd0J5dGVzIjogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVk2WWE3VysrN2FVUHp2TVRyZXpINlljeDNjK0hPS1lDY05HeWJKWlNDSnEvZmQ3UWE4dXVBS3RkSWtVUXRRaUVLRVJoQW1FNWxNTUpoUDhPa0RPYTJnPT0iLAogICAgICAgICAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICJzdGFydCI6ICIyMDI1LTAxLTEzVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICBdCn0K"}}}});var Xbe=_(y1=>{"use strict";var Zbe=y1&&y1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(y1,"__esModule",{value:!0});y1.TUFClient=void 0;var Rg=Zbe(Ie("fs")),GP=Zbe(Ie("path")),qvt=Jbe(),Wvt=pL(),Yvt=Kbe(),YJ="targets",WJ=class{constructor(e){let r=new URL(e.mirrorURL),s=encodeURIComponent(r.host+r.pathname.replace(/\/$/,"")),a=GP.default.join(e.cachePath,s);Vvt(a),Jvt({cachePath:a,mirrorURL:e.mirrorURL,tufRootPath:e.rootPath,forceInit:e.forceInit}),this.updater=Kvt({mirrorURL:e.mirrorURL,cachePath:a,forceCache:e.forceCache,retry:e.retry,timeout:e.timeout})}async refresh(){return this.updater.refresh()}getTarget(e){return(0,Yvt.readTarget)(this.updater,e)}};y1.TUFClient=WJ;function Vvt(t){let e=GP.default.join(t,YJ);Rg.default.existsSync(t)||Rg.default.mkdirSync(t,{recursive:!0}),Rg.default.existsSync(e)||Rg.default.mkdirSync(e)}function Jvt({cachePath:t,mirrorURL:e,tufRootPath:r,forceInit:s}){let a=GP.default.join(t,"root.json");if(!Rg.default.existsSync(a)||s)if(r)Rg.default.copyFileSync(r,a);else{let c=zbe()[e];if(!c)throw new Wvt.TUFError({code:"TUF_INIT_CACHE_ERROR",message:`No root.json found for mirror: ${e}`});Rg.default.writeFileSync(a,Buffer.from(c["root.json"],"base64")),Object.entries(c.targets).forEach(([f,p])=>{Rg.default.writeFileSync(GP.default.join(t,YJ,f),Buffer.from(p,"base64"))})}}function Kvt(t){let e={fetchTimeout:t.timeout,fetchRetry:t.retry};return new qvt.Updater({metadataBaseUrl:t.mirrorURL,targetBaseUrl:`${t.mirrorURL}/targets`,metadataDir:t.cachePath,targetDir:GP.default.join(t.cachePath,YJ),forceCache:t.forceCache,config:e})}});var pL=_(gh=>{"use strict";Object.defineProperty(gh,"__esModule",{value:!0});gh.TUFError=gh.DEFAULT_MIRROR_URL=void 0;gh.getTrustedRoot=nSt;gh.initTUF=iSt;var zvt=mP(),Zvt=QPe(),Xvt=Xbe();gh.DEFAULT_MIRROR_URL="https://tuf-repo-cdn.sigstore.dev";var $vt="sigstore-js",eSt={retries:2},tSt=5e3,rSt="trusted_root.json";async function nSt(t={}){let r=await $be(t).getTarget(rSt);return zvt.TrustedRoot.fromJSON(JSON.parse(r))}async function iSt(t={}){let e=$be(t);return e.refresh().then(()=>e)}function $be(t){return new Xvt.TUFClient({cachePath:t.cachePath||(0,Zvt.appDataPath)($vt),rootPath:t.rootPath,mirrorURL:t.mirrorURL||gh.DEFAULT_MIRROR_URL,retry:t.retry??eSt,timeout:t.timeout??tSt,forceCache:t.forceCache??!1,forceInit:t.forceInit??t.force??!1})}var sSt=qJ();Object.defineProperty(gh,"TUFError",{enumerable:!0,get:function(){return sSt.TUFError}})});var exe=_(hL=>{"use strict";Object.defineProperty(hL,"__esModule",{value:!0});hL.DSSESignatureContent=void 0;var qP=Cl(),VJ=class{constructor(e){this.env=e}compareDigest(e){return qP.crypto.bufferEqual(e,qP.crypto.digest("sha256",this.env.payload))}compareSignature(e){return qP.crypto.bufferEqual(e,this.signature)}verifySignature(e){return qP.crypto.verify(this.preAuthEncoding,e,this.signature)}get signature(){return this.env.signatures.length>0?this.env.signatures[0].sig:Buffer.from("")}get preAuthEncoding(){return qP.dsse.preAuthEncoding(this.env.payloadType,this.env.payload)}};hL.DSSESignatureContent=VJ});var txe=_(gL=>{"use strict";Object.defineProperty(gL,"__esModule",{value:!0});gL.MessageSignatureContent=void 0;var JJ=Cl(),KJ=class{constructor(e,r){this.signature=e.signature,this.messageDigest=e.messageDigest.digest,this.artifact=r}compareSignature(e){return JJ.crypto.bufferEqual(e,this.signature)}compareDigest(e){return JJ.crypto.bufferEqual(e,this.messageDigest)}verifySignature(e){return JJ.crypto.verify(this.artifact,e,this.signature)}};gL.MessageSignatureContent=KJ});var nxe=_(dL=>{"use strict";Object.defineProperty(dL,"__esModule",{value:!0});dL.toSignedEntity=lSt;dL.signatureContent=rxe;var zJ=Cl(),oSt=exe(),aSt=txe();function lSt(t,e){let{tlogEntries:r,timestampVerificationData:s}=t.verificationMaterial,a=[];for(let n of r)a.push({$case:"transparency-log",tlogEntry:n});for(let n of s?.rfc3161Timestamps??[])a.push({$case:"timestamp-authority",timestamp:zJ.RFC3161Timestamp.parse(n.signedTimestamp)});return{signature:rxe(t,e),key:cSt(t),tlogEntries:r,timestamps:a}}function rxe(t,e){switch(t.content.$case){case"dsseEnvelope":return new oSt.DSSESignatureContent(t.content.dsseEnvelope);case"messageSignature":return new aSt.MessageSignatureContent(t.content.messageSignature,e)}}function cSt(t){switch(t.verificationMaterial.content.$case){case"publicKey":return{$case:"public-key",hint:t.verificationMaterial.content.publicKey.hint};case"x509CertificateChain":return{$case:"certificate",certificate:zJ.X509Certificate.parse(t.verificationMaterial.content.x509CertificateChain.certificates[0].rawBytes)};case"certificate":return{$case:"certificate",certificate:zJ.X509Certificate.parse(t.verificationMaterial.content.certificate.rawBytes)}}}});var Eo=_(E1=>{"use strict";Object.defineProperty(E1,"__esModule",{value:!0});E1.PolicyError=E1.VerificationError=void 0;var mL=class extends Error{constructor({code:e,message:r,cause:s}){super(r),this.code=e,this.cause=s,this.name=this.constructor.name}},ZJ=class extends mL{};E1.VerificationError=ZJ;var XJ=class extends mL{};E1.PolicyError=XJ});var ixe=_(yL=>{"use strict";Object.defineProperty(yL,"__esModule",{value:!0});yL.filterCertAuthorities=uSt;yL.filterTLogAuthorities=fSt;function uSt(t,e){return t.filter(r=>r.validFor.start<=e.start&&r.validFor.end>=e.end)}function fSt(t,e){return t.filter(r=>e.logID&&!r.logID.equals(e.logID)?!1:r.validFor.start<=e.targetDate&&e.targetDate<=r.validFor.end)}});var py=_(Ay=>{"use strict";Object.defineProperty(Ay,"__esModule",{value:!0});Ay.filterTLogAuthorities=Ay.filterCertAuthorities=void 0;Ay.toTrustMaterial=pSt;var $J=Cl(),WP=mP(),ASt=Eo(),eK=new Date(0),tK=new Date(864e13),axe=ixe();Object.defineProperty(Ay,"filterCertAuthorities",{enumerable:!0,get:function(){return axe.filterCertAuthorities}});Object.defineProperty(Ay,"filterTLogAuthorities",{enumerable:!0,get:function(){return axe.filterTLogAuthorities}});function pSt(t,e){let r=typeof e=="function"?e:hSt(e);return{certificateAuthorities:t.certificateAuthorities.map(oxe),timestampAuthorities:t.timestampAuthorities.map(oxe),tlogs:t.tlogs.map(sxe),ctlogs:t.ctlogs.map(sxe),publicKey:r}}function sxe(t){let e=t.publicKey.keyDetails,r=e===WP.PublicKeyDetails.PKCS1_RSA_PKCS1V5||e===WP.PublicKeyDetails.PKIX_RSA_PKCS1V5||e===WP.PublicKeyDetails.PKIX_RSA_PKCS1V15_2048_SHA256||e===WP.PublicKeyDetails.PKIX_RSA_PKCS1V15_3072_SHA256||e===WP.PublicKeyDetails.PKIX_RSA_PKCS1V15_4096_SHA256?"pkcs1":"spki";return{logID:t.logId.keyId,publicKey:$J.crypto.createPublicKey(t.publicKey.rawBytes,r),validFor:{start:t.publicKey.validFor?.start||eK,end:t.publicKey.validFor?.end||tK}}}function oxe(t){return{certChain:t.certChain.certificates.map(e=>$J.X509Certificate.parse(e.rawBytes)),validFor:{start:t.validFor?.start||eK,end:t.validFor?.end||tK}}}function hSt(t){return e=>{let r=(t||{})[e];if(!r)throw new ASt.VerificationError({code:"PUBLIC_KEY_ERROR",message:`key not found: ${e}`});return{publicKey:$J.crypto.createPublicKey(r.rawBytes),validFor:s=>(r.validFor?.start||eK)<=s&&(r.validFor?.end||tK)>=s}}}});var rK=_(YP=>{"use strict";Object.defineProperty(YP,"__esModule",{value:!0});YP.CertificateChainVerifier=void 0;YP.verifyCertificateChain=dSt;var hy=Eo(),gSt=py();function dSt(t,e){let r=(0,gSt.filterCertAuthorities)(e,{start:t.notBefore,end:t.notAfter}),s;for(let a of r)try{return new EL({trustedCerts:a.certChain,untrustedCert:t}).verify()}catch(n){s=n}throw new hy.VerificationError({code:"CERTIFICATE_ERROR",message:"Failed to verify certificate chain",cause:s})}var EL=class{constructor(e){this.untrustedCert=e.untrustedCert,this.trustedCerts=e.trustedCerts,this.localCerts=mSt([...e.trustedCerts,e.untrustedCert])}verify(){let e=this.sort();return this.checkPath(e),e}sort(){let e=this.untrustedCert,r=this.buildPaths(e);if(r=r.filter(a=>a.some(n=>this.trustedCerts.includes(n))),r.length===0)throw new hy.VerificationError({code:"CERTIFICATE_ERROR",message:"no trusted certificate path found"});let s=r.reduce((a,n)=>a.length{if(s&&a.extSubjectKeyID){a.extSubjectKeyID.keyIdentifier.equals(s)&&r.push(a);return}a.subject.equals(e.issuer)&&r.push(a)}),r=r.filter(a=>{try{return e.verify(a)}catch{return!1}}),r)}checkPath(e){if(e.length<1)throw new hy.VerificationError({code:"CERTIFICATE_ERROR",message:"certificate chain must contain at least one certificate"});if(!e.slice(1).every(s=>s.isCA))throw new hy.VerificationError({code:"CERTIFICATE_ERROR",message:"intermediate certificate is not a CA"});for(let s=e.length-2;s>=0;s--)if(!e[s].issuer.equals(e[s+1].subject))throw new hy.VerificationError({code:"CERTIFICATE_ERROR",message:"incorrect certificate name chaining"});for(let s=0;s{"use strict";Object.defineProperty(nK,"__esModule",{value:!0});nK.verifySCTs=ISt;var IL=Cl(),ySt=Eo(),ESt=py();function ISt(t,e,r){let s,a=t.clone();for(let p=0;p{if(!(0,ESt.filterTLogAuthorities)(r,{logID:p.logID,targetDate:p.datetime}).some(C=>p.verify(n.buffer,C.publicKey)))throw new ySt.VerificationError({code:"CERTIFICATE_ERROR",message:"SCT verification failed"});return p.logID})}});var uxe=_(CL=>{"use strict";Object.defineProperty(CL,"__esModule",{value:!0});CL.verifyPublicKey=DSt;CL.verifyCertificate=PSt;var CSt=Cl(),cxe=Eo(),wSt=rK(),BSt=lxe(),vSt="1.3.6.1.4.1.57264.1.1",SSt="1.3.6.1.4.1.57264.1.8";function DSt(t,e,r){let s=r.publicKey(t);return e.forEach(a=>{if(!s.validFor(a))throw new cxe.VerificationError({code:"PUBLIC_KEY_ERROR",message:`Public key is not valid for timestamp: ${a.toISOString()}`})}),{key:s.publicKey}}function PSt(t,e,r){let s=(0,wSt.verifyCertificateChain)(t,r.certificateAuthorities);if(!e.every(n=>s.every(c=>c.validForDate(n))))throw new cxe.VerificationError({code:"CERTIFICATE_ERROR",message:"certificate is not valid or expired at the specified date"});return{scts:(0,BSt.verifySCTs)(s[0],s[1],r.ctlogs),signer:bSt(s[0])}}function bSt(t){let e,r=t.extension(SSt);r?e=r.valueObj.subs?.[0]?.value.toString("ascii"):e=t.extension(vSt)?.value.toString("ascii");let s={extensions:{issuer:e},subjectAlternativeName:t.subjectAltName};return{key:CSt.crypto.createPublicKey(t.publicKey),identity:s}}});var Axe=_(wL=>{"use strict";Object.defineProperty(wL,"__esModule",{value:!0});wL.verifySubjectAlternativeName=xSt;wL.verifyExtensions=kSt;var fxe=Eo();function xSt(t,e){if(e===void 0||!e.match(t))throw new fxe.PolicyError({code:"UNTRUSTED_SIGNER_ERROR",message:`certificate identity error - expected ${t}, got ${e}`})}function kSt(t,e={}){let r;for(r in t)if(e[r]!==t[r])throw new fxe.PolicyError({code:"UNTRUSTED_SIGNER_ERROR",message:`invalid certificate extension - expected ${r}=${t[r]}, got ${r}=${e[r]}`})}});var pxe=_(lK=>{"use strict";Object.defineProperty(lK,"__esModule",{value:!0});lK.verifyCheckpoint=TSt;var sK=Cl(),I1=Eo(),QSt=py(),iK=` - -`,RSt=/\u2014 (\S+) (\S+)\n/g;function TSt(t,e){let r=(0,QSt.filterTLogAuthorities)(e,{targetDate:new Date(Number(t.integratedTime)*1e3)}),s=t.inclusionProof,a=oK.fromString(s.checkpoint.envelope),n=aK.fromString(a.note);if(!FSt(a,r))throw new I1.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"invalid checkpoint signature"});if(!sK.crypto.bufferEqual(n.logHash,s.rootHash))throw new I1.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"root hash mismatch"})}function FSt(t,e){let r=Buffer.from(t.note,"utf-8");return t.signatures.every(s=>{let a=e.find(n=>sK.crypto.bufferEqual(n.logID.subarray(0,4),s.keyHint));return a?sK.crypto.verify(r,a.publicKey,s.signature):!1})}var oK=class t{constructor(e,r){this.note=e,this.signatures=r}static fromString(e){if(!e.includes(iK))throw new I1.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"missing checkpoint separator"});let r=e.indexOf(iK),s=e.slice(0,r+1),n=e.slice(r+iK.length).matchAll(RSt),c=Array.from(n,f=>{let[,p,h]=f,E=Buffer.from(h,"base64");if(E.length<5)throw new I1.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"malformed checkpoint signature"});return{name:p,keyHint:E.subarray(0,4),signature:E.subarray(4)}});if(c.length===0)throw new I1.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"no signatures found in checkpoint"});return new t(s,c)}},aK=class t{constructor(e,r,s,a){this.origin=e,this.logSize=r,this.logHash=s,this.rest=a}static fromString(e){let r=e.trimEnd().split(` -`);if(r.length<3)throw new I1.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"too few lines in checkpoint header"});let s=r[0],a=BigInt(r[1]),n=Buffer.from(r[2],"base64"),c=r.slice(3);return new t(s,a,n,c)}}});var hxe=_(AK=>{"use strict";Object.defineProperty(AK,"__esModule",{value:!0});AK.verifyMerkleInclusion=LSt;var fK=Cl(),cK=Eo(),NSt=Buffer.from([0]),OSt=Buffer.from([1]);function LSt(t){let e=t.inclusionProof,r=BigInt(e.logIndex),s=BigInt(e.treeSize);if(r<0n||r>=s)throw new cK.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:`invalid index: ${r}`});let{inner:a,border:n}=MSt(r,s);if(e.hashes.length!==a+n)throw new cK.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"invalid hash count"});let c=e.hashes.slice(0,a),f=e.hashes.slice(a),p=qSt(t.canonicalizedBody),h=_St(USt(p,c,r),f);if(!fK.crypto.bufferEqual(h,e.rootHash))throw new cK.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"calculated root hash does not match inclusion proof"})}function MSt(t,e){let r=HSt(t,e),s=jSt(t>>BigInt(r));return{inner:r,border:s}}function USt(t,e,r){return e.reduce((s,a,n)=>r>>BigInt(n)&BigInt(1)?uK(a,s):uK(s,a),t)}function _St(t,e){return e.reduce((r,s)=>uK(s,r),t)}function HSt(t,e){return GSt(t^e-BigInt(1))}function jSt(t){return t.toString(2).split("1").length-1}function GSt(t){return t===0n?0:t.toString(2).length}function uK(t,e){return fK.crypto.digest("sha256",OSt,t,e)}function qSt(t){return fK.crypto.digest("sha256",NSt,t)}});var dxe=_(pK=>{"use strict";Object.defineProperty(pK,"__esModule",{value:!0});pK.verifyTLogSET=VSt;var gxe=Cl(),WSt=Eo(),YSt=py();function VSt(t,e){if(!(0,YSt.filterTLogAuthorities)(e,{logID:t.logId.keyId,targetDate:new Date(Number(t.integratedTime)*1e3)}).some(a=>{let n=JSt(t),c=Buffer.from(gxe.json.canonicalize(n),"utf8"),f=t.inclusionPromise.signedEntryTimestamp;return gxe.crypto.verify(c,a.publicKey,f)}))throw new WSt.VerificationError({code:"TLOG_INCLUSION_PROMISE_ERROR",message:"inclusion promise could not be verified"})}function JSt(t){let{integratedTime:e,logIndex:r,logId:s,canonicalizedBody:a}=t;return{body:a.toString("base64"),integratedTime:Number(e),logIndex:Number(r),logID:s.keyId.toString("hex")}}});var mxe=_(dK=>{"use strict";Object.defineProperty(dK,"__esModule",{value:!0});dK.verifyRFC3161Timestamp=ZSt;var hK=Cl(),gK=Eo(),KSt=rK(),zSt=py();function ZSt(t,e,r){let s=t.signingTime;if(r=(0,zSt.filterCertAuthorities)(r,{start:s,end:s}),r=$St(r,{serialNumber:t.signerSerialNumber,issuer:t.signerIssuer}),!r.some(n=>{try{return XSt(t,e,n),!0}catch{return!1}}))throw new gK.VerificationError({code:"TIMESTAMP_ERROR",message:"timestamp could not be verified"})}function XSt(t,e,r){let[s,...a]=r.certChain,n=hK.crypto.createPublicKey(s.publicKey),c=t.signingTime;try{new KSt.CertificateChainVerifier({untrustedCert:s,trustedCerts:a}).verify()}catch{throw new gK.VerificationError({code:"TIMESTAMP_ERROR",message:"invalid certificate chain"})}if(!r.certChain.every(p=>p.validForDate(c)))throw new gK.VerificationError({code:"TIMESTAMP_ERROR",message:"timestamp was signed with an expired certificate"});t.verify(e,n)}function $St(t,e){return t.filter(r=>r.certChain.length>0&&hK.crypto.bufferEqual(r.certChain[0].serialNumber,e.serialNumber)&&hK.crypto.bufferEqual(r.certChain[0].issuer,e.issuer))}});var yxe=_(BL=>{"use strict";Object.defineProperty(BL,"__esModule",{value:!0});BL.verifyTSATimestamp=sDt;BL.verifyTLogTimestamp=oDt;var eDt=Eo(),tDt=pxe(),rDt=hxe(),nDt=dxe(),iDt=mxe();function sDt(t,e,r){return(0,iDt.verifyRFC3161Timestamp)(t,e,r),{type:"timestamp-authority",logID:t.signerSerialNumber,timestamp:t.signingTime}}function oDt(t,e){let r=!1;if(aDt(t)&&((0,nDt.verifyTLogSET)(t,e),r=!0),lDt(t)&&((0,rDt.verifyMerkleInclusion)(t),(0,tDt.verifyCheckpoint)(t,e),r=!0),!r)throw new eDt.VerificationError({code:"TLOG_MISSING_INCLUSION_ERROR",message:"inclusion could not be verified"});return{type:"transparency-log",logID:t.logId.keyId,timestamp:new Date(Number(t.integratedTime)*1e3)}}function aDt(t){return t.inclusionPromise!==void 0}function lDt(t){return t.inclusionProof!==void 0}});var Exe=_(mK=>{"use strict";Object.defineProperty(mK,"__esModule",{value:!0});mK.verifyDSSETLogBody=cDt;var vL=Eo();function cDt(t,e){switch(t.apiVersion){case"0.0.1":return uDt(t,e);default:throw new vL.VerificationError({code:"TLOG_BODY_ERROR",message:`unsupported dsse version: ${t.apiVersion}`})}}function uDt(t,e){if(t.spec.signatures?.length!==1)throw new vL.VerificationError({code:"TLOG_BODY_ERROR",message:"signature count mismatch"});let r=t.spec.signatures[0].signature;if(!e.compareSignature(Buffer.from(r,"base64")))throw new vL.VerificationError({code:"TLOG_BODY_ERROR",message:"tlog entry signature mismatch"});let s=t.spec.payloadHash?.value||"";if(!e.compareDigest(Buffer.from(s,"hex")))throw new vL.VerificationError({code:"TLOG_BODY_ERROR",message:"DSSE payload hash mismatch"})}});var Ixe=_(EK=>{"use strict";Object.defineProperty(EK,"__esModule",{value:!0});EK.verifyHashedRekordTLogBody=fDt;var yK=Eo();function fDt(t,e){switch(t.apiVersion){case"0.0.1":return ADt(t,e);default:throw new yK.VerificationError({code:"TLOG_BODY_ERROR",message:`unsupported hashedrekord version: ${t.apiVersion}`})}}function ADt(t,e){let r=t.spec.signature.content||"";if(!e.compareSignature(Buffer.from(r,"base64")))throw new yK.VerificationError({code:"TLOG_BODY_ERROR",message:"signature mismatch"});let s=t.spec.data.hash?.value||"";if(!e.compareDigest(Buffer.from(s,"hex")))throw new yK.VerificationError({code:"TLOG_BODY_ERROR",message:"digest mismatch"})}});var Cxe=_(IK=>{"use strict";Object.defineProperty(IK,"__esModule",{value:!0});IK.verifyIntotoTLogBody=pDt;var SL=Eo();function pDt(t,e){switch(t.apiVersion){case"0.0.2":return hDt(t,e);default:throw new SL.VerificationError({code:"TLOG_BODY_ERROR",message:`unsupported intoto version: ${t.apiVersion}`})}}function hDt(t,e){if(t.spec.content.envelope.signatures?.length!==1)throw new SL.VerificationError({code:"TLOG_BODY_ERROR",message:"signature count mismatch"});let r=gDt(t.spec.content.envelope.signatures[0].sig);if(!e.compareSignature(Buffer.from(r,"base64")))throw new SL.VerificationError({code:"TLOG_BODY_ERROR",message:"tlog entry signature mismatch"});let s=t.spec.content.payloadHash?.value||"";if(!e.compareDigest(Buffer.from(s,"hex")))throw new SL.VerificationError({code:"TLOG_BODY_ERROR",message:"DSSE payload hash mismatch"})}function gDt(t){return Buffer.from(t,"base64").toString("utf-8")}});var Bxe=_(CK=>{"use strict";Object.defineProperty(CK,"__esModule",{value:!0});CK.verifyTLogBody=EDt;var wxe=Eo(),dDt=Exe(),mDt=Ixe(),yDt=Cxe();function EDt(t,e){let{kind:r,version:s}=t.kindVersion,a=JSON.parse(t.canonicalizedBody.toString("utf8"));if(r!==a.kind||s!==a.apiVersion)throw new wxe.VerificationError({code:"TLOG_BODY_ERROR",message:`kind/version mismatch - expected: ${r}/${s}, received: ${a.kind}/${a.apiVersion}`});switch(a.kind){case"dsse":return(0,dDt.verifyDSSETLogBody)(a,e);case"intoto":return(0,yDt.verifyIntotoTLogBody)(a,e);case"hashedrekord":return(0,mDt.verifyHashedRekordTLogBody)(a,e);default:throw new wxe.VerificationError({code:"TLOG_BODY_ERROR",message:`unsupported kind: ${r}`})}}});var bxe=_(DL=>{"use strict";Object.defineProperty(DL,"__esModule",{value:!0});DL.Verifier=void 0;var IDt=Ie("util"),C1=Eo(),vxe=uxe(),Sxe=Axe(),Dxe=yxe(),CDt=Bxe(),wK=class{constructor(e,r={}){this.trustMaterial=e,this.options={ctlogThreshold:r.ctlogThreshold??1,tlogThreshold:r.tlogThreshold??1,tsaThreshold:r.tsaThreshold??0}}verify(e,r){let s=this.verifyTimestamps(e),a=this.verifySigningKey(e,s);return this.verifyTLogs(e),this.verifySignature(e,a),r&&this.verifyPolicy(r,a.identity||{}),a}verifyTimestamps(e){let r=0,s=0,a=e.timestamps.map(n=>{switch(n.$case){case"timestamp-authority":return s++,(0,Dxe.verifyTSATimestamp)(n.timestamp,e.signature.signature,this.trustMaterial.timestampAuthorities);case"transparency-log":return r++,(0,Dxe.verifyTLogTimestamp)(n.tlogEntry,this.trustMaterial.tlogs)}});if(Pxe(a))throw new C1.VerificationError({code:"TIMESTAMP_ERROR",message:"duplicate timestamp"});if(rn.timestamp)}verifySigningKey({key:e},r){switch(e.$case){case"public-key":return(0,vxe.verifyPublicKey)(e.hint,r,this.trustMaterial);case"certificate":{let s=(0,vxe.verifyCertificate)(e.certificate,r,this.trustMaterial);if(Pxe(s.scts))throw new C1.VerificationError({code:"CERTIFICATE_ERROR",message:"duplicate SCT"});if(s.scts.length(0,CDt.verifyTLogBody)(s,e))}verifySignature(e,r){if(!e.signature.verifySignature(r.key))throw new C1.VerificationError({code:"SIGNATURE_ERROR",message:"signature verification failed"})}verifyPolicy(e,r){e.subjectAlternativeName&&(0,Sxe.verifySubjectAlternativeName)(e.subjectAlternativeName,r.subjectAlternativeName),e.extensions&&(0,Sxe.verifyExtensions)(e.extensions,r.extensions)}};DL.Verifier=wK;function Pxe(t){for(let e=0;e{"use strict";Object.defineProperty(iu,"__esModule",{value:!0});iu.Verifier=iu.toTrustMaterial=iu.VerificationError=iu.PolicyError=iu.toSignedEntity=void 0;var wDt=nxe();Object.defineProperty(iu,"toSignedEntity",{enumerable:!0,get:function(){return wDt.toSignedEntity}});var xxe=Eo();Object.defineProperty(iu,"PolicyError",{enumerable:!0,get:function(){return xxe.PolicyError}});Object.defineProperty(iu,"VerificationError",{enumerable:!0,get:function(){return xxe.VerificationError}});var BDt=py();Object.defineProperty(iu,"toTrustMaterial",{enumerable:!0,get:function(){return BDt.toTrustMaterial}});var vDt=bxe();Object.defineProperty(iu,"Verifier",{enumerable:!0,get:function(){return vDt.Verifier}})});var kxe=_(Fa=>{"use strict";Object.defineProperty(Fa,"__esModule",{value:!0});Fa.DEFAULT_TIMEOUT=Fa.DEFAULT_RETRY=void 0;Fa.createBundleBuilder=PDt;Fa.createKeyFinder=bDt;Fa.createVerificationPolicy=xDt;var SDt=Cl(),w1=F7(),DDt=PL();Fa.DEFAULT_RETRY={retries:2};Fa.DEFAULT_TIMEOUT=5e3;function PDt(t,e){let r={signer:kDt(e),witnesses:RDt(e)};switch(t){case"messageSignature":return new w1.MessageSignatureBundleBuilder(r);case"dsseEnvelope":return new w1.DSSEBundleBuilder({...r,certificateChain:e.legacyCompatibility})}}function bDt(t){return e=>{let r=t(e);if(!r)throw new DDt.VerificationError({code:"PUBLIC_KEY_ERROR",message:`key not found: ${e}`});return{publicKey:SDt.crypto.createPublicKey(r),validFor:()=>!0}}}function xDt(t){let e={},r=t.certificateIdentityEmail||t.certificateIdentityURI;return r&&(e.subjectAlternativeName=r),t.certificateIssuer&&(e.extensions={issuer:t.certificateIssuer}),e}function kDt(t){return new w1.FulcioSigner({fulcioBaseURL:t.fulcioURL,identityProvider:t.identityProvider||QDt(t),retry:t.retry??Fa.DEFAULT_RETRY,timeout:t.timeout??Fa.DEFAULT_TIMEOUT})}function QDt(t){let e=t.identityToken;return e?{getToken:()=>Promise.resolve(e)}:new w1.CIContextProvider("sigstore")}function RDt(t){let e=[];return TDt(t)&&e.push(new w1.RekorWitness({rekorBaseURL:t.rekorURL,entryType:t.legacyCompatibility?"intoto":"dsse",fetchOnConflict:!1,retry:t.retry??Fa.DEFAULT_RETRY,timeout:t.timeout??Fa.DEFAULT_TIMEOUT})),FDt(t)&&e.push(new w1.TSAWitness({tsaBaseURL:t.tsaServerURL,retry:t.retry??Fa.DEFAULT_RETRY,timeout:t.timeout??Fa.DEFAULT_TIMEOUT})),e}function TDt(t){return t.tlogUpload!==!1}function FDt(t){return t.tsaServerURL!==void 0}});var Txe=_(su=>{"use strict";var NDt=su&&su.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),ODt=su&&su.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),Qxe=su&&su.__importStar||function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var s=[];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(s[s.length]=a);return s},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var s=t(e),a=0;aa.verify(t,s))}async function Rxe(t={}){let e=await LDt.getTrustedRoot({mirrorURL:t.tufMirrorURL,rootPath:t.tufRootPath,cachePath:t.tufCachePath,forceCache:t.tufForceCache,retry:t.retry??B1.DEFAULT_RETRY,timeout:t.timeout??B1.DEFAULT_TIMEOUT}),r=t.keySelector?B1.createKeyFinder(t.keySelector):void 0,s=(0,BK.toTrustMaterial)(e,r),a={ctlogThreshold:t.ctLogThreshold,tlogThreshold:t.tlogThreshold},n=new BK.Verifier(s,a),c=B1.createVerificationPolicy(t);return{verify:(f,p)=>{let h=(0,vK.bundleFromJSON)(f),E=(0,BK.toSignedEntity)(h,p);n.verify(E,c)}}}});var Nxe=_(Ni=>{"use strict";Object.defineProperty(Ni,"__esModule",{value:!0});Ni.verify=Ni.sign=Ni.createVerifier=Ni.attest=Ni.VerificationError=Ni.PolicyError=Ni.TUFError=Ni.InternalError=Ni.DEFAULT_REKOR_URL=Ni.DEFAULT_FULCIO_URL=Ni.ValidationError=void 0;var HDt=EP();Object.defineProperty(Ni,"ValidationError",{enumerable:!0,get:function(){return HDt.ValidationError}});var SK=F7();Object.defineProperty(Ni,"DEFAULT_FULCIO_URL",{enumerable:!0,get:function(){return SK.DEFAULT_FULCIO_URL}});Object.defineProperty(Ni,"DEFAULT_REKOR_URL",{enumerable:!0,get:function(){return SK.DEFAULT_REKOR_URL}});Object.defineProperty(Ni,"InternalError",{enumerable:!0,get:function(){return SK.InternalError}});var jDt=pL();Object.defineProperty(Ni,"TUFError",{enumerable:!0,get:function(){return jDt.TUFError}});var Fxe=PL();Object.defineProperty(Ni,"PolicyError",{enumerable:!0,get:function(){return Fxe.PolicyError}});Object.defineProperty(Ni,"VerificationError",{enumerable:!0,get:function(){return Fxe.VerificationError}});var bL=Txe();Object.defineProperty(Ni,"attest",{enumerable:!0,get:function(){return bL.attest}});Object.defineProperty(Ni,"createVerifier",{enumerable:!0,get:function(){return bL.createVerifier}});Object.defineProperty(Ni,"sign",{enumerable:!0,get:function(){return bL.sign}});Object.defineProperty(Ni,"verify",{enumerable:!0,get:function(){return bL.verify}})});Dt();Ge();Dt();var pke=Ie("child_process"),hke=ut(Fd());Yt();var $I=new Map([]);var Gv={};Vt(Gv,{BaseCommand:()=>ft,WorkspaceRequiredError:()=>ar,getCli:()=>Bde,getDynamicLibs:()=>wde,getPluginConfiguration:()=>tC,openWorkspace:()=>eC,pluginCommands:()=>$I,runExit:()=>YT});Yt();var ft=class extends ot{constructor(){super(...arguments);this.cwd=ge.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new nt("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()}};Ge();Dt();Yt();var ar=class extends nt{constructor(e,r){let s=J.relative(e,r),a=J.join(e,Ut.fileName);super(`This command can only be run from within a workspace of your project (${s} isn't a workspace of ${a}).`)}};Ge();Dt();eA();wc();pv();Yt();var hat=ut(Ai());Ul();var wde=()=>new Map([["@yarnpkg/cli",Gv],["@yarnpkg/core",jv],["@yarnpkg/fslib",_2],["@yarnpkg/libzip",fv],["@yarnpkg/parsers",J2],["@yarnpkg/shell",mv],["clipanion",oB],["semver",hat],["typanion",Ea]]);Ge();async function eC(t,e){let{project:r,workspace:s}=await Rt.find(t,e);if(!s)throw new ar(r.cwd,e);return s}Ge();Dt();eA();wc();pv();Yt();var fbt=ut(Ai());Ul();var f5={};Vt(f5,{AddCommand:()=>sC,BinCommand:()=>oC,CacheCleanCommand:()=>aC,ClipanionCommand:()=>pC,ConfigCommand:()=>fC,ConfigGetCommand:()=>lC,ConfigSetCommand:()=>cC,ConfigUnsetCommand:()=>uC,DedupeCommand:()=>AC,EntryCommand:()=>gC,ExecCommand:()=>mC,ExplainCommand:()=>IC,ExplainPeerRequirementsCommand:()=>yC,HelpCommand:()=>hC,InfoCommand:()=>CC,LinkCommand:()=>BC,NodeCommand:()=>vC,PluginCheckCommand:()=>SC,PluginImportCommand:()=>bC,PluginImportSourcesCommand:()=>xC,PluginListCommand:()=>DC,PluginRemoveCommand:()=>kC,PluginRuntimeCommand:()=>QC,RebuildCommand:()=>RC,RemoveCommand:()=>TC,RunCommand:()=>NC,RunIndexCommand:()=>FC,SetResolutionCommand:()=>OC,SetVersionCommand:()=>EC,SetVersionSourcesCommand:()=>PC,UnlinkCommand:()=>LC,UpCommand:()=>MC,VersionCommand:()=>dC,WhyCommand:()=>UC,WorkspaceCommand:()=>qC,WorkspacesListCommand:()=>GC,YarnCommand:()=>wC,dedupeUtils:()=>tF,default:()=>bct,suggestUtils:()=>Zu});var Yye=ut(Fd());Ge();Ge();Ge();Yt();var uye=ut(Vv());Ul();var Zu={};Vt(Zu,{Modifier:()=>jq,Strategy:()=>$T,Target:()=>Jv,WorkspaceModifier:()=>sye,applyModifier:()=>Flt,extractDescriptorFromPath:()=>Gq,extractRangeModifier:()=>oye,fetchDescriptorFrom:()=>qq,findProjectDescriptors:()=>cye,getModifier:()=>Kv,getSuggestedDescriptors:()=>zv,makeWorkspaceDescriptor:()=>lye,toWorkspaceModifier:()=>aye});Ge();Ge();Dt();var Hq=ut(Ai()),Rlt="workspace:",Jv=(s=>(s.REGULAR="dependencies",s.DEVELOPMENT="devDependencies",s.PEER="peerDependencies",s))(Jv||{}),jq=(s=>(s.CARET="^",s.TILDE="~",s.EXACT="",s))(jq||{}),sye=(s=>(s.CARET="^",s.TILDE="~",s.EXACT="*",s))(sye||{}),$T=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))($T||{});function Kv(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var Tlt=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function oye(t,{project:e}){let r=t.match(Tlt);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function Flt(t,e){let{protocol:r,source:s,params:a,selector:n}=G.parseRange(t.range);return Hq.default.valid(n)&&(n=`${e}${t.range}`),G.makeDescriptor(t,G.makeRange({protocol:r,source:s,params:a,selector:n}))}function aye(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function lye(t,e){return G.makeDescriptor(t.anchoredDescriptor,`${Rlt}${aye(e)}`)}async function cye(t,{project:e,target:r}){let s=new Map,a=n=>{let c=s.get(n.descriptorHash);return c||s.set(n.descriptorHash,c={descriptor:n,locators:[]}),c};for(let n of e.workspaces)if(r==="peerDependencies"){let c=n.manifest.peerDependencies.get(t.identHash);c!==void 0&&a(c).locators.push(n.anchoredLocator)}else{let c=n.manifest.dependencies.get(t.identHash),f=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?f!==void 0?a(f).locators.push(n.anchoredLocator):c!==void 0&&a(c).locators.push(n.anchoredLocator):c!==void 0?a(c).locators.push(n.anchoredLocator):f!==void 0&&a(f).locators.push(n.anchoredLocator)}return s}async function Gq(t,{cwd:e,workspace:r}){return await Olt(async s=>{J.isAbsolute(t)||(t=J.relative(r.cwd,J.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await qq(G.makeIdent(null,"archive"),t,{project:r.project,cache:s,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let c=new ki,f=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:s,fetcher:p,report:c,resolver:f},E=f.bindDescriptor(n,r.anchoredLocator,h),C=G.convertDescriptorToLocator(E),S=await p.fetch(C,h),b=await Ut.find(S.prefixPath,{baseFs:S.packageFs});if(!b.name)throw new Error("Target path doesn't have a name");return G.makeDescriptor(b.name,t)})}function Nlt(t){if(t.range==="unknown")return{type:"resolve",range:"latest"};if(Fr.validRange(t.range))return{type:"fixed",range:t.range};if(Mp.test(t.range))return{type:"resolve",range:t.range};let e=t.range.match(/^(?:jsr:|npm:)(.*)/);if(!e)return{type:"fixed",range:t.range};let[,r]=e,s=`${G.stringifyIdent(t)}@`;return r.startsWith(s)&&(r=r.slice(s.length)),Fr.validRange(r)?{type:"fixed",range:t.range}:Mp.test(r)?{type:"resolve",range:t.range}:{type:"fixed",range:t.range}}async function zv(t,{project:e,workspace:r,cache:s,target:a,fixed:n,modifier:c,strategies:f,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let h=!n||t.range==="unknown"?Nlt(t):{type:"fixed",range:t.range};if(h.type==="fixed")return{suggestions:[{descriptor:t,name:`Use ${G.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let E=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,C=[],S=[],b=async I=>{try{await I()}catch(T){S.push(T)}};for(let I of f){if(C.length>=p)break;switch(I){case"keep":await b(async()=>{E&&C.push({descriptor:E,name:`Keep ${G.prettyDescriptor(e.configuration,E)}`,reason:"(no changes)"})});break;case"reuse":await b(async()=>{for(let{descriptor:T,locators:N}of(await cye(t,{project:e,target:a})).values()){if(N.length===1&&N[0].locatorHash===r.anchoredLocator.locatorHash&&f.includes("keep"))continue;let U=`(originally used by ${G.prettyLocator(e.configuration,N[0])}`;U+=N.length>1?` and ${N.length-1} other${N.length>2?"s":""})`:")",C.push({descriptor:T,name:`Reuse ${G.prettyDescriptor(e.configuration,T)}`,reason:U})}});break;case"cache":await b(async()=>{for(let T of e.storedDescriptors.values())T.identHash===t.identHash&&C.push({descriptor:T,name:`Reuse ${G.prettyDescriptor(e.configuration,T)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await b(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let T=e.tryWorkspaceByIdent(t);if(T===null)return;let N=lye(T,c);C.push({descriptor:N,name:`Attach ${G.prettyDescriptor(e.configuration,N)}`,reason:`(local workspace at ${he.pretty(e.configuration,T.relativeCwd,he.Type.PATH)})`})});break;case"latest":{let T=e.configuration.get("enableNetwork"),N=e.configuration.get("enableOfflineMode");await b(async()=>{if(a==="peerDependencies")C.push({descriptor:G.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!T&&!N)C.push({descriptor:null,name:"Resolve from latest",reason:he.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let U=await qq(t,h.range,{project:e,cache:s,workspace:r,modifier:c});U&&C.push({descriptor:U,name:`Use ${G.prettyDescriptor(e.configuration,U)}`,reason:`(resolved from ${N?"the cache":"latest"})`})}})}break}}return{suggestions:C.slice(0,p),rejections:S.slice(0,p)}}async function qq(t,e,{project:r,cache:s,workspace:a,preserveModifier:n=!0,modifier:c}){let f=r.configuration.normalizeDependency(G.makeDescriptor(t,e)),p=new ki,h=r.configuration.makeFetcher(),E=r.configuration.makeResolver(),C={project:r,fetcher:h,cache:s,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},S={...C,resolver:E,fetchOptions:C},b=E.bindDescriptor(f,a.anchoredLocator,S),I=await E.getCandidates(b,{},S);if(I.length===0)return null;let T=I[0],{protocol:N,source:U,params:W,selector:ee}=G.parseRange(G.convertToManifestRange(T.reference));if(N===r.configuration.get("defaultProtocol")&&(N=null),Hq.default.valid(ee)){let ie=ee;if(typeof c<"u")ee=c+ee;else if(n!==!1){let me=typeof n=="string"?n:f.range;ee=oye(me,{project:r})+ee}let ue=G.makeDescriptor(T,G.makeRange({protocol:N,source:U,params:W,selector:ee}));(await E.getCandidates(r.configuration.normalizeDependency(ue),{},S)).length!==1&&(ee=ie)}return G.makeDescriptor(T,G.makeRange({protocol:N,source:U,params:W,selector:ee}))}async function Olt(t){return await ce.mktempPromise(async e=>{let r=ze.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Kr(e,{configuration:r,check:!1,immutable:!1}))})}var sC=class extends ft{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=ge.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=ge.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=ge.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=ge.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=ge.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=ge.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:fo($l)});this.silent=ge.Boolean("--silent",{hidden:!0});this.packages=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd),n=await Kr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState({restoreResolutions:!1});let c=this.fixed,f=r.isInteractive({interactive:this.interactive,stdout:this.context.stdout}),p=f||r.get("preferReuse"),h=Kv(this,s),E=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(W=>typeof W<"u"),C=f?1/0:1,S=W=>{let ee=G.tryParseDescriptor(W.slice(4));return ee?ee.range==="unknown"?G.makeDescriptor(ee,`jsr:${G.stringifyIdent(ee)}@latest`):G.makeDescriptor(ee,`jsr:${ee.range}`):null},b=await Promise.all(this.packages.map(async W=>{let ee=W.match(/^\.{0,2}\//)?await Gq(W,{cwd:this.context.cwd,workspace:a}):W.startsWith("jsr:")?S(W):G.tryParseDescriptor(W),ie=W.match(/^(https?:|git@github)/);if(ie)throw new nt(`It seems you are trying to add a package using a ${he.pretty(r,`${ie[0]}...`,he.Type.RANGE)} url; we now require package names to be explicitly specified. -Try running the command again with the package name prefixed: ${he.pretty(r,"yarn add",he.Type.CODE)} ${he.pretty(r,G.makeDescriptor(G.makeIdent(null,"my-package"),`${ie[0]}...`),he.Type.DESCRIPTOR)}`);if(!ee)throw new nt(`The ${he.pretty(r,W,he.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let ue=Llt(a,ee,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(ue.map(async me=>{let pe=await zv(ee,{project:s,workspace:a,cache:n,fixed:c,target:me,modifier:h,strategies:E,maxResults:C});return{request:ee,suggestedDescriptors:pe,target:me}}))})).then(W=>W.flat()),I=await lA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async W=>{for(let{request:ee,suggestedDescriptors:{suggestions:ie,rejections:ue}}of b)if(ie.filter(me=>me.descriptor!==null).length===0){let[me]=ue;if(typeof me>"u")throw new Error("Assertion failed: Expected an error to have been set");s.configuration.get("enableNetwork")?W.reportError(27,`${G.prettyDescriptor(r,ee)} can't be resolved to a satisfying range`):W.reportError(27,`${G.prettyDescriptor(r,ee)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),W.reportSeparator(),W.reportExceptionOnce(me)}});if(I.hasErrors())return I.exitCode();let T=!1,N=[],U=[];for(let{suggestedDescriptors:{suggestions:W},target:ee}of b){let ie,ue=W.filter(Be=>Be.descriptor!==null),le=ue[0].descriptor,me=ue.every(Be=>G.areDescriptorsEqual(Be.descriptor,le));ue.length===1||me?ie=le:(T=!0,{answer:ie}=await(0,uye.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:W.map(({descriptor:Be,name:Ce,reason:g})=>Be?{name:Ce,hint:g,descriptor:Be}:{name:Ce,hint:g,disabled:!0}),onCancel:()=>process.exit(130),result(Be){return this.find(Be,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let pe=a.manifest[ee].get(ie.identHash);(typeof pe>"u"||pe.descriptorHash!==ie.descriptorHash)&&(a.manifest[ee].set(ie.identHash,ie),this.optional&&(ee==="dependencies"?a.manifest.ensureDependencyMeta({...ie,range:"unknown"}).optional=!0:ee==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...ie,range:"unknown"}).optional=!0)),typeof pe>"u"?N.push([a,ee,ie,E]):U.push([a,ee,pe,ie]))}return await r.triggerMultipleHooks(W=>W.afterWorkspaceDependencyAddition,N),await r.triggerMultipleHooks(W=>W.afterWorkspaceDependencyReplacement,U),T&&this.context.stdout.write(` -`),await s.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};function Llt(t,e,{dev:r,peer:s,preferDev:a,optional:n}){let c=t.manifest.dependencies.has(e.identHash),f=t.manifest.devDependencies.has(e.identHash),p=t.manifest.peerDependencies.has(e.identHash);if((r||s)&&c)throw new nt(`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&&!s&&p)throw new nt(`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&&f)throw new nt(`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&&!s&&p)throw new nt(`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 nt(`Package "${G.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return s&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:f?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ge();Ge();Yt();var oC=class extends ft{constructor(){super(...arguments);this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=ge.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:s,locator:a}=await Rt.find(r,this.context.cwd);if(await s.restoreInstallState(),this.name){let f=(await In.getPackageAccessibleBinaries(a,{project:s})).get(this.name);if(!f)throw new nt(`Couldn't find a binary named "${this.name}" for package "${G.prettyLocator(r,a)}"`);let[,p]=f;return this.context.stdout.write(`${p} -`),0}return(await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async c=>{let f=await In.getPackageAccessibleBinaries(a,{project:s}),h=Array.from(f.keys()).reduce((E,C)=>Math.max(E,C.length),0);for(let[E,[C,S]]of f)c.reportJson({name:E,source:G.stringifyIdent(C),path:S});if(this.verbose)for(let[E,[C]]of f)c.reportInfo(null,`${E.padEnd(h," ")} ${G.prettyLocator(r,C)}`);else for(let E of f.keys())c.reportInfo(null,E)})).exitCode()}};Ge();Dt();Yt();var aC=class extends ft{constructor(){super(...arguments);this.mirror=ge.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=ge.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 nt("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 s=await Kr.find(r);return(await Ot.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&s.mirrorCwd!==null,c=!this.mirror;n&&(await ce.removePromise(s.mirrorCwd),await r.triggerHook(f=>f.cleanGlobalArtifacts,r)),c&&await ce.removePromise(s.cwd)})).exitCode()}};Ge();Yt();ql();var Wq=Ie("util"),lC=class extends ft{constructor(){super(...arguments);this.why=ge.Boolean("--why",!1,{description:"Print the explanation for why a setting has its value"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=ge.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=ge.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),s=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(s)>"u")throw new nt(`Couldn't find a configuration settings named "${s}"`);let c=r.getSpecial(s,{hideSecrets:!this.unsafe,getNativePaths:!0}),f=je.convertMapsToIndexableObjects(c),p=a?va(f,a):f,h=await Ot.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();Wq.inspect.styles.name="cyan",this.context.stdout.write(`${(0,Wq.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} -`)}return h.exitCode()}};Ge();Yt();ql();var Yq=Ie("util"),cC=class extends ft{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String();this.value=ge.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),s=()=>{if(!r.projectCwd)throw new nt("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 nt(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new nt("This setting only affects the file it's in, and thus cannot be set from the CLI");let f=this.json?JSON.parse(this.value):this.value;await(this.home?I=>ze.updateHomeConfiguration(I):I=>ze.updateConfiguration(s(),I))(I=>{if(n){let T=f0(I);return Jd(T,this.name,f),T}else return{...I,[a]:f}});let E=(await ze.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),C=je.convertMapsToIndexableObjects(E),S=n?va(C,n):C;return(await Ot.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async I=>{Yq.inspect.styles.name="cyan",I.reportInfo(0,`Successfully set ${this.name} to ${(0,Yq.inspect)(S,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Ge();Yt();ql();var uC=class extends ft{constructor(){super(...arguments);this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.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),s=()=>{if(!r.projectCwd)throw new nt("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 nt(`Couldn't find a configuration settings named "${a}"`);let f=this.home?h=>ze.updateHomeConfiguration(h):h=>ze.updateConfiguration(s(),h);return(await Ot.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let E=!1;await f(C=>{if(!vB(C,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),E=!0,C;let S=n?f0(C):{...C};return A0(S,this.name),S}),E||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Ge();Dt();Yt();var eF=Ie("util"),fC=class extends ft{constructor(){super(...arguments);this.noDefaults=ge.Boolean("--no-defaults",!1,{description:"Omit the default values from the display"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.verbose=ge.Boolean("-v,--verbose",{hidden:!0});this.why=ge.Boolean("--why",{hidden:!0});this.names=ge.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}),s=await SI({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(s!==null)return s;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,c=await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async f=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)f.reportError(34,`Invalid configuration key "${p}" in ${h}`);f.reportSeparator()}if(this.json)for(let p of a){if(this.noDefaults&&!r.sources.has(p))continue;let h=r.settings.get(p);typeof h>"u"&&f.reportError(34,`No configuration key named "${p}"`);let E=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),C=r.sources.get(p)??"",S=C&&C[0]!=="<"?fe.fromPortablePath(C):C;f.reportJson({key:p,effective:E,source:S,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},E={children:h};for(let C of a){if(this.noDefaults&&!r.sources.has(C))continue;let S=r.settings.get(C),b=r.sources.get(C)??"",I=r.getSpecial(C,{hideSecrets:!0,getNativePaths:!0}),T={Description:{label:"Description",value:he.tuple(he.Type.MARKDOWN,{text:S.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:he.tuple(b[0]==="<"?he.Type.CODE:he.Type.PATH,b)}};h[C]={value:he.tuple(he.Type.CODE,C),children:T};let N=(U,W)=>{for(let[ee,ie]of W)if(ie instanceof Map){let ue={};U[ee]={children:ue},N(ue,ie)}else U[ee]={label:ee,value:he.tuple(he.Type.NO_HINT,(0,eF.inspect)(ie,p))}};I instanceof Map?N(T,I):T.Value={label:"Value",value:he.tuple(he.Type.NO_HINT,(0,eF.inspect)(I,p))}}a.length!==1&&(n=void 0),xs.emitTree(E,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let f=a[0],p=(0,eF.inspect)(r.getSpecial(f,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` -`),this.context.stdout.write(`${p} -`)}return c.exitCode()}};Ge();Yt();Ul();var tF={};Vt(tF,{Strategy:()=>Zv,acceptedStrategies:()=>Mlt,dedupe:()=>Vq});Ge();Ge();var fye=ut(Go()),Zv=(e=>(e.HIGHEST="highest",e))(Zv||{}),Mlt=new Set(Object.values(Zv)),Ult={highest:async(t,e,{resolver:r,fetcher:s,resolveOptions:a,fetchOptions:n})=>{let c=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`);je.getSetWithDefault(c,E.identHash).add(h)}let f=new Map(je.mapAndFilter(t.storedDescriptors.values(),p=>G.isVirtualDescriptor(p)?je.mapAndFilter.skip:[p.descriptorHash,je.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=f.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 C=t.originalPackages.get(E);if(typeof C>"u")throw new Error(`Assertion failed: The package (${E}) should have been registered`);Promise.resolve().then(async()=>{let S=r.getResolutionDependencies(p,a),b=Object.fromEntries(await je.allSettledSafe(Object.entries(S).map(async([ee,ie])=>{let ue=f.get(ie.descriptorHash);if(typeof ue>"u")throw new Error(`Assertion failed: The descriptor (${ie.descriptorHash}) should have been registered`);let le=await ue.promise;if(!le)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[ee,le.updatedPackage]})));if(e.length&&!fye.default.isMatch(G.stringifyIdent(p),e)||!r.shouldPersistResolution(C,a))return C;let I=c.get(p.identHash);if(typeof I>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(I.size===1)return C;let T=[...I].map(ee=>{let ie=t.originalPackages.get(ee);if(typeof ie>"u")throw new Error(`Assertion failed: The package (${ee}) should have been registered`);return ie}),N=await r.getSatisfying(p,b,T,a),U=N.locators?.[0];if(typeof U>"u"||!N.sorted)return C;let W=t.originalPackages.get(U.locatorHash);if(typeof W>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return W}).then(async S=>{let b=await t.preparePackage(S,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:C,updatedPackage:S,resolvedPackage:b})}).catch(S=>{h.reject(S)})}return[...f.values()].map(p=>p.promise)}};async function Vq(t,{strategy:e,patterns:r,cache:s,report:a}){let{configuration:n}=t,c=new ki,f=n.makeResolver(),p=n.makeFetcher(),h={cache:s,checksums:t.storedChecksums,fetcher:p,project:t,report:c,cacheOptions:{skipIntegrityCheck:!0}},E={project:t,resolver:f,report:c,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let C=Ult[e],S=await C(t,r,{resolver:f,resolveOptions:E,fetcher:p,fetchOptions:h}),b=Ao.progressViaCounter(S.length);await a.reportProgress(b);let I=0;await Promise.all(S.map(U=>U.then(W=>{if(W===null||W.currentPackage.locatorHash===W.updatedPackage.locatorHash)return;I++;let{descriptor:ee,currentPackage:ie,updatedPackage:ue}=W;a.reportInfo(0,`${G.prettyDescriptor(n,ee)} can be deduped from ${G.prettyLocator(n,ie)} to ${G.prettyLocator(n,ue)}`),a.reportJson({descriptor:G.stringifyDescriptor(ee),currentResolution:G.stringifyLocator(ie),updatedResolution:G.stringifyLocator(ue)}),t.storedResolutions.set(ee.descriptorHash,ue.locatorHash)}).finally(()=>b.tick())));let T;switch(I){case 0:T="No packages";break;case 1:T="One package";break;default:T=`${I} packages`}let N=he.pretty(n,e,he.Type.CODE);return a.reportInfo(0,`${T} can be deduped using the ${N} strategy`),I})}var AC=class extends ft{constructor(){super(...arguments);this.strategy=ge.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:fo(Zv)});this.check=ge.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:fo($l)});this.patterns=ge.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:s}=await Rt.find(r,this.context.cwd),a=await Kr.find(r);await s.restoreInstallState({restoreResolutions:!1});let n=0,c=await Ot.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async f=>{n=await Vq(s,{strategy:this.strategy,patterns:this.patterns,cache:a,report:f})});return c.hasErrors()?c.exitCode():this.check?n?1:0:await s.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Ge();Yt();var pC=class extends ft{static{this.paths=[["--clipanion=definitions"]]}async execute(){let{plugins:e}=await ze.find(this.context.cwd,this.context.plugins),r=[];for(let c of e){let{commands:f}=c[1];if(f){let h=Ca.from(f).definitions();r.push([c[0],h])}}let s=this.cli.definitions(),a=(c,f)=>c.split(" ").slice(1).join()===f.split(" ").slice(1).join(),n=Aye()["@yarnpkg/builder"].bundles.standard;for(let c of r){let f=c[1];for(let p of f)s.find(h=>a(h.path,p.path)).plugin={name:c[0],isDefault:n.includes(c[0])}}this.context.stdout.write(`${JSON.stringify(s,null,2)} -`)}};var hC=class extends ft{static{this.paths=[["help"],["--help"],["-h"]]}async execute(){this.context.stdout.write(this.cli.usage(null))}};Ge();Dt();Yt();var gC=class extends ft{constructor(){super(...arguments);this.leadingArgument=ge.String();this.args=ge.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!G.tryParseIdent(this.leadingArgument)){let r=J.resolve(this.context.cwd,fe.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ge();var dC=class extends ft{static{this.paths=[["-v"],["--version"]]}async execute(){this.context.stdout.write(`${fn||""} -`)}};Ge();Ge();Yt();var mC=class extends ft{constructor(){super(...arguments);this.commandName=ge.String();this.args=ge.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:s,locator:a}=await Rt.find(r,this.context.cwd);return await s.restoreInstallState(),await In.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:s})}};Ge();Yt();Ul();var yC=class extends ft{constructor(){super(...arguments);this.hash=ge.String({required:!1,validator:Nx(wE(),[X2(/^p[0-9a-f]{6}$/)])})}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 seven-letter code consisting of the letter 'p' followed by six characters 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:s}=await Rt.find(r,this.context.cwd);return await s.restoreInstallState({restoreResolutions:!1}),await s.applyLightResolution(),typeof this.hash<"u"?await Hlt(this.hash,s,{stdout:this.context.stdout}):await jlt(s,{stdout:this.context.stdout})}};async function Hlt(t,e,r){let s=e.peerRequirementNodes.get(t);if(typeof s>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);let a=new Set,n=p=>a.has(p.requester.locatorHash)?{value:he.tuple(he.Type.DEPENDENT,{locator:p.requester,descriptor:p.descriptor}),children:p.children.size>0?[{value:he.tuple(he.Type.NO_HINT,"...")}]:[]}:(a.add(p.requester.locatorHash),{value:he.tuple(he.Type.DEPENDENT,{locator:p.requester,descriptor:p.descriptor}),children:Object.fromEntries(Array.from(p.children.values(),h=>[G.stringifyLocator(h.requester),n(h)]))}),c=e.peerWarnings.find(p=>p.hash===t);return(await Ot.start({configuration:e.configuration,stdout:r.stdout,includeFooter:!1,includePrefix:!1},async p=>{let h=he.mark(e.configuration),E=c?h.Cross:h.Check;if(p.reportInfo(0,`Package ${he.pretty(e.configuration,s.subject,he.Type.LOCATOR)} is requested to provide ${he.pretty(e.configuration,s.ident,he.Type.IDENT)} by its descendants`),p.reportSeparator(),p.reportInfo(0,he.pretty(e.configuration,s.subject,he.Type.LOCATOR)),xs.emitTree({children:Object.fromEntries(Array.from(s.requests.values(),C=>[G.stringifyLocator(C.requester),n(C)]))},{configuration:e.configuration,stdout:r.stdout,json:!1}),p.reportSeparator(),s.provided.range==="missing:"){let C=c?"":" , but all peer requests are optional";p.reportInfo(0,`${E} Package ${he.pretty(e.configuration,s.subject,he.Type.LOCATOR)} does not provide ${he.pretty(e.configuration,s.ident,he.Type.IDENT)}${C}.`)}else{let C=e.storedResolutions.get(s.provided.descriptorHash);if(!C)throw new Error("Assertion failed: Expected the descriptor to be registered");let S=e.storedPackages.get(C);if(!S)throw new Error("Assertion failed: Expected the package to be registered");p.reportInfo(0,`${E} Package ${he.pretty(e.configuration,s.subject,he.Type.LOCATOR)} provides ${he.pretty(e.configuration,s.ident,he.Type.IDENT)} with version ${G.prettyReference(e.configuration,S.version??"0.0.0")}, ${c?"which does not satisfy all requests.":"which satisfies all requests"}`),c?.type===3&&(c.range?p.reportInfo(0,` The combined requested range is ${he.pretty(e.configuration,c.range,he.Type.RANGE)}`):p.reportInfo(0," Unfortunately, the requested ranges have no overlap"))}})).exitCode()}async function jlt(t,e){return(await Ot.start({configuration:t.configuration,stdout:e.stdout,includeFooter:!1,includePrefix:!1},async s=>{let a=he.mark(t.configuration),n=je.sortMap(t.peerRequirementNodes,[([,c])=>G.stringifyLocator(c.subject),([,c])=>G.stringifyIdent(c.ident)]);for(let[,c]of n.values()){if(!c.root)continue;let f=t.peerWarnings.find(E=>E.hash===c.hash),p=[...G.allPeerRequests(c)],h;if(p.length>2?h=` and ${p.length-1} other dependencies`:p.length===2?h=" and 1 other dependency":h="",c.provided.range!=="missing:"){let E=t.storedResolutions.get(c.provided.descriptorHash);if(!E)throw new Error("Assertion failed: Expected the resolution to have been registered");let C=t.storedPackages.get(E);if(!C)throw new Error("Assertion failed: Expected the provided package to have been registered");let S=`${he.pretty(t.configuration,c.hash,he.Type.CODE)} \u2192 ${f?a.Cross:a.Check} ${G.prettyLocator(t.configuration,c.subject)} provides ${G.prettyLocator(t.configuration,C)} to ${G.prettyLocator(t.configuration,p[0].requester)}${h}`;f?s.reportWarning(0,S):s.reportInfo(0,S)}else{let E=`${he.pretty(t.configuration,c.hash,he.Type.CODE)} \u2192 ${f?a.Cross:a.Check} ${G.prettyLocator(t.configuration,c.subject)} doesn't provide ${G.prettyIdent(t.configuration,c.ident)} to ${G.prettyLocator(t.configuration,p[0].requester)}${h}`;f?s.reportWarning(0,E):s.reportInfo(0,E)}}})).exitCode()}Ge();Yt();Ul();Ge();Ge();Dt();Yt();var pye=ut(Ai()),EC=class extends ft{constructor(){super(...arguments);this.useYarnPath=ge.Boolean("--yarn-path",{description:"Set the yarnPath setting even if the version can be accessed by Corepack"});this.onlyIfNeeded=ge.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=ge.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 f=r.sources.get("yarnPath");if(!f)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(J.contains(p,f))return 0}let s=()=>{if(typeof fn>"u")throw new nt("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(f,p)=>({version:p,url:f.replace(/\{\}/g,p)});if(this.version==="self")a={url:s(),version:fn??"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 Xv(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await Xv(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}[\\/]/)||fe.isAbsolute(this.version))a={url:`file://${J.resolve(fe.toPortablePath(this.version))}`,version:"file"};else if(Fr.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(Fr.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(Fr.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await Glt(r,this.version));else throw new nt(`Invalid version descriptor "${this.version}"`);return(await Ot.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async f=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(f.reportInfo(0,`Retrieving ${he.pretty(r,a.url,he.Type.PATH)}`),await ce.readFilePromise(a.url.slice(h.length))):(f.reportInfo(0,`Downloading ${he.pretty(r,a.url,he.Type.URL)}`),await ln.get(a.url,{configuration:r}))};await Jq(r,a.version,p,{report:f,useYarnPath:this.useYarnPath})})).exitCode()}};async function Glt(t,e){let s=(await ln.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>Fr.satisfiesWithPrereleases(a,e));if(s.length===0)throw new nt(`No matching release found for range ${he.pretty(t,e,he.Type.RANGE)}.`);return s[0]}async function Xv(t,e){let r=await ln.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new nt(`Tag ${he.pretty(t,e,he.Type.RANGE)} not found`);return r.latest[e]}async function Jq(t,e,r,{report:s,useYarnPath:a}){let n,c=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let ee=await c();await ce.mktempPromise(async ie=>{let ue=J.join(ie,"yarn.cjs");await ce.writeFilePromise(ue,ee);let{stdout:le}=await qr.execvp(process.execPath,[fe.fromPortablePath(ue),"--version"],{cwd:ie,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=le.trim(),!pye.default.valid(e))throw new Error(`Invalid semver version. ${he.pretty(t,"yarn --version",he.Type.CODE)} returned: -${e}`)})}let f=t.projectCwd??t.startingCwd,p=J.resolve(f,".yarn/releases"),h=J.resolve(p,`yarn-${e}.cjs`),E=J.relative(t.startingCwd,h),C=je.isTaggedYarnVersion(e),S=t.get("yarnPath"),b=!C,I=b||!!S||!!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");I=!1}else!I&&!process.env.COREPACK_ROOT&&(s.reportWarning(0,`You don't seem to have ${he.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${he.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),I=!0);if(I){let ee=await c();s.reportInfo(0,`Saving the new release in ${he.pretty(t,E,"magenta")}`),await ce.removePromise(J.dirname(h)),await ce.mkdirPromise(J.dirname(h),{recursive:!0}),await ce.writeFilePromise(h,ee,{mode:493}),await ze.updateConfiguration(f,{yarnPath:J.relative(f,h)})}else await ce.removePromise(J.dirname(h)),await ze.updateConfiguration(f,{yarnPath:ze.deleteProperty});let T=await Ut.tryFind(f)||new Ut;T.packageManager=`yarn@${C?e:await Xv(t,"stable")}`;let N={};T.exportTo(N);let U=J.join(f,Ut.fileName),W=`${JSON.stringify(N,null,T.indent)} -`;return await ce.changeFilePromise(U,W,{automaticNewlines:!0}),{bundleVersion:e}}function hye(t){return Br[jx(t)]}var qlt=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?
(?:.(?!##))+)/gs;async function Wlt(t){let r=`https://repo.yarnpkg.com/${je.isTaggedYarnVersion(fn)?fn:await Xv(t,"canary")}/packages/docusaurus/docs/advanced/01-general-reference/error-codes.mdx`,s=await ln.get(r,{configuration:t});return new Map(Array.from(s.toString().matchAll(qlt),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=hye(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 IC=class extends ft{constructor(){super(...arguments);this.code=ge.String({required:!1,validator:$2(wE(),[X2(/^YN[0-9]{4}$/)])});this.json=ge.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 s=hye(this.code),a=he.pretty(r,s,he.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),f=(await Wlt(r)).get(this.code),p=typeof f<"u"?he.jsonOrPretty(this.json,r,he.tuple(he.Type.MARKDOWN,{text:f,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}: -${he.jsonOrPretty(this.json,r,he.tuple(he.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:s,details:p})} -`):this.context.stdout.write(`${n} - -${p} -`)}else{let s={children:je.mapAndFilter(Object.entries(Br),([a,n])=>Number.isNaN(Number(a))?je.mapAndFilter.skip:{label:Yf(Number(a)),value:he.tuple(he.Type.CODE,n)})};xs.emitTree(s,{configuration:r,stdout:this.context.stdout,json:this.json})}}};Ge();Dt();Yt();var gye=ut(Go()),CC=class extends ft{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=ge.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=ge.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=ge.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=ge.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=ge.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=ge.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd),n=await Kr.find(r);if(!a&&!this.all)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState();let c=new Set(this.extra);this.cache&&c.add("cache"),this.dependents&&c.add("dependents"),this.manifest&&c.add("manifest");let f=(ie,{recursive:ue})=>{let le=ie.anchoredLocator.locatorHash,me=new Map,pe=[le];for(;pe.length>0;){let Be=pe.shift();if(me.has(Be))continue;let Ce=s.storedPackages.get(Be);if(typeof Ce>"u")throw new Error("Assertion failed: Expected the package to be registered");if(me.set(Be,Ce),G.isVirtualLocator(Ce)&&pe.push(G.devirtualizeLocator(Ce).locatorHash),!(!ue&&Be!==le))for(let g of Ce.dependencies.values()){let we=s.storedResolutions.get(g.descriptorHash);if(typeof we>"u")throw new Error("Assertion failed: Expected the resolution to be registered");pe.push(we)}}return me.values()},p=({recursive:ie})=>{let ue=new Map;for(let le of s.workspaces)for(let me of f(le,{recursive:ie}))ue.set(me.locatorHash,me);return ue.values()},h=({all:ie,recursive:ue})=>ie&&ue?s.storedPackages.values():ie?p({recursive:ue}):f(a,{recursive:ue}),E=({all:ie,recursive:ue})=>{let le=h({all:ie,recursive:ue}),me=this.patterns.map(Ce=>{let g=G.parseLocator(Ce),we=gye.default.makeRe(G.stringifyIdent(g)),ye=G.isVirtualLocator(g),Ae=ye?G.devirtualizeLocator(g):g;return se=>{let X=G.stringifyIdent(se);if(!we.test(X))return!1;if(g.reference==="unknown")return!0;let De=G.isVirtualLocator(se),Te=De?G.devirtualizeLocator(se):se;return!(ye&&De&&g.reference!==se.reference||Ae.reference!==Te.reference)}}),pe=je.sortMap([...le],Ce=>G.stringifyLocator(Ce));return{selection:pe.filter(Ce=>me.length===0||me.some(g=>g(Ce))),sortedLookup:pe}},{selection:C,sortedLookup:S}=E({all:this.all,recursive:this.recursive});if(C.length===0)throw new nt("No package matched your request");let b=new Map;if(this.dependents)for(let ie of S)for(let ue of ie.dependencies.values()){let le=s.storedResolutions.get(ue.descriptorHash);if(typeof le>"u")throw new Error("Assertion failed: Expected the resolution to be registered");je.getArrayWithDefault(b,le).push(ie)}let I=new Map;for(let ie of S){if(!G.isVirtualLocator(ie))continue;let ue=G.devirtualizeLocator(ie);je.getArrayWithDefault(I,ue.locatorHash).push(ie)}let T={},N={children:T},U=r.makeFetcher(),W={project:s,fetcher:U,cache:n,checksums:s.storedChecksums,report:new ki,cacheOptions:{skipIntegrityCheck:!0}},ee=[async(ie,ue,le)=>{if(!ue.has("manifest"))return;let me=await U.fetch(ie,W),pe;try{pe=await Ut.find(me.prefixPath,{baseFs:me.packageFs})}finally{me.releaseFs?.()}le("Manifest",{License:he.tuple(he.Type.NO_HINT,pe.license),Homepage:he.tuple(he.Type.URL,pe.raw.homepage??null)})},async(ie,ue,le)=>{if(!ue.has("cache"))return;let me=s.storedChecksums.get(ie.locatorHash)??null,pe=n.getLocatorPath(ie,me),Be;if(pe!==null)try{Be=await ce.statPromise(pe)}catch{}let Ce=typeof Be<"u"?[Be.size,he.Type.SIZE]:void 0;le("Cache",{Checksum:he.tuple(he.Type.NO_HINT,me),Path:he.tuple(he.Type.PATH,pe),Size:Ce})}];for(let ie of C){let ue=G.isVirtualLocator(ie);if(!this.virtuals&&ue)continue;let le={},me={value:[ie,he.Type.LOCATOR],children:le};if(T[G.stringifyLocator(ie)]=me,this.nameOnly){delete me.children;continue}let pe=I.get(ie.locatorHash);typeof pe<"u"&&(le.Instances={label:"Instances",value:he.tuple(he.Type.NUMBER,pe.length)}),le.Version={label:"Version",value:he.tuple(he.Type.NO_HINT,ie.version)};let Be=(g,we)=>{let ye={};if(le[g]=ye,Array.isArray(we))ye.children=we.map(Ae=>({value:Ae}));else{let Ae={};ye.children=Ae;for(let[se,X]of Object.entries(we))typeof X>"u"||(Ae[se]={label:se,value:X})}};if(!ue){for(let g of ee)await g(ie,c,Be);await r.triggerHook(g=>g.fetchPackageInfo,ie,c,Be)}ie.bin.size>0&&!ue&&Be("Exported Binaries",[...ie.bin.keys()].map(g=>he.tuple(he.Type.PATH,g)));let Ce=b.get(ie.locatorHash);typeof Ce<"u"&&Ce.length>0&&Be("Dependents",Ce.map(g=>he.tuple(he.Type.LOCATOR,g))),ie.dependencies.size>0&&!ue&&Be("Dependencies",[...ie.dependencies.values()].map(g=>{let we=s.storedResolutions.get(g.descriptorHash),ye=typeof we<"u"?s.storedPackages.get(we)??null:null;return he.tuple(he.Type.RESOLUTION,{descriptor:g,locator:ye})})),ie.peerDependencies.size>0&&ue&&Be("Peer dependencies",[...ie.peerDependencies.values()].map(g=>{let we=ie.dependencies.get(g.identHash),ye=typeof we<"u"?s.storedResolutions.get(we.descriptorHash)??null:null,Ae=ye!==null?s.storedPackages.get(ye)??null:null;return he.tuple(he.Type.RESOLUTION,{descriptor:g,locator:Ae})}))}xs.emitTree(N,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Ge();Dt();wc();var rF=ut(Fd());Yt();var Kq=ut(Ai());Ul();var Ylt=[{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"}],wC=class extends ft{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=ge.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=ge.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.refreshLockfile=ge.Boolean("--refresh-lockfile",{description:"Refresh the package metadata stored in the lockfile"});this.checkCache=ge.Boolean("--check-cache",{description:"Always refetch the packages and ensure that their checksums are consistent"});this.checkResolutions=ge.Boolean("--check-resolutions",{description:"Validates that the package resolutions are coherent"});this.inlineBuilds=ge.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:fo($l)});this.cacheFolder=ge.String("--cache-folder",{hidden:!0});this.frozenLockfile=ge.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=ge.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=ge.Boolean("--non-interactive",{hidden:!0});this.preferOffline=ge.Boolean("--prefer-offline",{hidden:!0});this.production=ge.Boolean("--production",{hidden:!0});this.registry=ge.String("--registry",{hidden:!0});this.silent=ge.Boolean("--silent",{hidden:!0});this.networkTimeout=ge.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 s=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await SI({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:!rF.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:!rF.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:!s},{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:!rF.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new nt(`${he.pretty(r,"--immutable",he.Type.CODE)} and ${he.pretty(r,"--immutable-cache",he.Type.CODE)} cannot be used with ${he.pretty(r,"--mode=update-lockfile",he.Type.CODE)}`);let c=(this.immutable??r.get("enableImmutableInstalls"))&&!n,f=this.immutableCache&&!n;if(r.projectCwd!==null){let T=await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{let U=!1;await Klt(r,c)&&(N.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),U=!0),await Jlt(r,c)&&(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 Ot.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 ${he.pretty(r,"yarn config set --home enableTelemetry 0",he.Type.CODE)} to disable`),N.reportSeparator();else if(ze.telemetry?.shouldShowTips){let U=await ln.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(U!==null){let W=null;if(fn!==null){let ie=Kq.default.prerelease(fn)?"canary":"stable",ue=U.latest[ie];Kq.default.gt(ue,fn)&&(W=[ie,ue])}if(W)ze.telemetry.commitTips(),N.reportInfo(88,`${he.applyStyle(r,`A new ${W[0]} version of Yarn is available:`,he.Style.BOLD)} ${G.prettyReference(r,W[1])}!`),N.reportInfo(88,`Upgrade now by running ${he.pretty(r,`yarn set version ${W[1]}`,he.Type.CODE)}`),N.reportSeparator();else{let ee=ze.telemetry.selectTip(U.tips);ee&&(N.reportInfo(89,he.pretty(r,ee.message,he.Type.MARKDOWN_INLINE)),ee.url&&N.reportInfo(89,`Learn more at ${ee.url}`),N.reportSeparator())}}}});if(T.hasErrors())return T.exitCode()}let{project:p,workspace:h}=await Rt.find(r,this.context.cwd),E=p.lockfileLastVersion;if(E!==null){let T=await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{let U={};for(let W of Ylt)W.selector(E)&&typeof r.sources.get(W.name)>"u"&&(r.use("",{[W.name]:W.value},p.cwd,{overwrite:!0}),U[W.name]=W.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 C=await Kr.find(r,{immutable:f,check:this.checkCache});if(!h)throw new ar(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let S=r.get("enableHardenedMode");S&&typeof r.sources.get("enableHardenedMode")>"u"&&await Ot.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 ${he.applyHyperlink(r,"documentation","https://yarnpkg.com/features/security#hardened-mode")} for more details.`),T.reportSeparator()}),(this.refreshLockfile??S)&&(p.lockfileNeedsRefresh=!0);let b=this.checkResolutions??S;return(await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout,forceSectionAlignment:!0,includeLogs:!0,includeVersion:!0},async T=>{await p.install({cache:C,report:T,immutable:c,checkResolutions:b,mode:this.mode})})).exitCode()}},Vlt="<<<<<<<";async function Jlt(t,e){if(!t.projectCwd)return!1;let r=J.join(t.projectCwd,Er.lockfile);if(!await ce.existsPromise(r)||!(await ce.readFilePromise(r,"utf8")).includes(Vlt))return!1;if(e)throw new jt(47,"Cannot autofix a lockfile when running an immutable install");let a=await qr.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await qr.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await qr.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 f=>{let p=await qr.execvp("git",["show",`${f}:./${Er.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new jt(83,`Git returned an error when trying to access the lockfile content in ${f}`);try{return as(p.stdout)}catch{throw new jt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(f=>!!f.__metadata);for(let f of n){if(f.__metadata.version<7)for(let p of Object.keys(f)){if(p==="__metadata")continue;let h=G.parseDescriptor(p,!0),E=t.normalizeDependency(h),C=G.stringifyDescriptor(E);C!==p&&(f[C]=f[p],delete f[p])}for(let p of Object.keys(f)){if(p==="__metadata")continue;let h=f[p].checksum;typeof h>"u"||h.includes("/")||(f[p].checksum=`${f.__metadata.cacheKey}/${h}`)}}let c=Object.assign({},...n);c.__metadata.version=`${Math.min(...n.map(f=>parseInt(f.__metadata.version??0)))}`,c.__metadata.cacheKey="merged";for(let[f,p]of Object.entries(c))typeof p=="string"&&delete c[f];return await ce.changeFilePromise(r,nl(c),{automaticNewlines:!0}),!0}async function Klt(t,e){if(!t.projectCwd)return!1;let r=[],s=J.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await ze.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let c=n.filter(f=>{if(!f.path)return!0;let p=J.resolve(t.projectCwd,f.path),h=ov.has(f.spec)&&J.contains(s,p);return h&&r.push(p),!h});return c.length===0?ze.deleteProperty:c.length===n.length?n:c}},{immutable:e})?(await Promise.all(r.map(async n=>{await ce.removePromise(n)})),!0):!1}Ge();Dt();Yt();var BC=class extends ft{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target projects to the current one"});this.private=ge.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target projects to the current one"});this.relative=ge.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destinations=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd),n=await Kr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState({restoreResolutions:!1});let c=s.topLevelWorkspace,f=[];for(let p of this.destinations){let h=J.resolve(this.context.cwd,fe.toPortablePath(p)),E=await ze.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:C,workspace:S}=await Rt.find(E,h);if(s.cwd===C.cwd)throw new nt(`Invalid destination '${p}'; Can't link the project to itself`);if(!S)throw new ar(C.cwd,h);if(this.all){let b=!1;for(let I of C.workspaces)I.manifest.name&&(!I.manifest.private||this.private)&&(f.push(I),b=!0);if(!b)throw new nt(`No workspace found to be linked in the target project: ${p}`)}else{if(!S.manifest.name)throw new nt(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(S.manifest.private&&!this.private)throw new nt(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);f.push(S)}}for(let p of f){let h=G.stringifyIdent(p.anchoredLocator),E=this.relative?J.relative(s.cwd,p.cwd):p.cwd;c.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${E}`})}return await s.installWithNewReport({stdout:this.context.stdout},{cache:n})}};Yt();var vC=class extends ft{constructor(){super(...arguments);this.args=ge.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])}};Ge();Yt();var SC=class extends ft{constructor(){super(...arguments);this.json=ge.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),s=await ze.findRcFiles(this.context.cwd);return(await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let c of s)if(c.data?.plugins)for(let f of c.data.plugins){if(!f.checksum||!f.spec.match(/^https?:/))continue;let p=await ln.get(f.spec,{configuration:r}),h=Nn.makeHash(p);if(f.checksum===h)continue;let E=he.pretty(r,f.path,he.Type.PATH),C=he.pretty(r,f.spec,he.Type.URL),S=`${E} is different from the file provided by ${C}`;n.reportJson({...f,newChecksum:h}),n.reportError(0,S)}})).exitCode()}};Ge();Ge();Dt();Yt();var Iye=Ie("os");Ge();Dt();Yt();var dye=Ie("os");Ge();wc();Yt();var zlt="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function Sm(t,e){let r=await ln.get(zlt,{configuration:t}),s=as(r.toString());return Object.fromEntries(Object.entries(s).filter(([a,n])=>!e||Fr.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var DC=class extends ft{constructor(){super(...arguments);this.json=ge.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 Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await Sm(r,fn);for(let[c,{experimental:f,...p}]of Object.entries(n)){let h=c;f&&(h+=" [experimental]"),a.reportJson({name:c,experimental:f,...p}),a.reportInfo(null,h)}})).exitCode()}};var Zlt=/^[0-9]+$/,Xlt=process.platform==="win32";function mye(t){return Zlt.test(t)?`pull/${t}/head`:t}var $lt=({repository:t,branch:e},r)=>[["git","init",fe.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",mye(e)],["git","reset","--hard","FETCH_HEAD"]],ect=({branch:t})=>[["git","fetch","origin","--depth=1",mye(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],tct=({plugins:t,noMinify:e},r,s)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",J.resolve(s,a)])),...e?["--no-minify"]:[],"|"],[Xlt?"move":"mv","packages/yarnpkg-cli/bundles/yarn.js",fe.fromPortablePath(r),"|"]],PC=class extends ft{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=ge.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"If set, the bundle will be built but not added to the project"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=ge.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:s}=await Rt.find(r,this.context.cwd),a=typeof this.installPath<"u"?J.resolve(this.context.cwd,fe.toPortablePath(this.installPath)):J.resolve(fe.toPortablePath((0,dye.tmpdir)()),"yarnpkg-sources",Nn.makeHash(this.repository).slice(0,6));return(await Ot.start({configuration:r,stdout:this.context.stdout},async c=>{await zq(this,{configuration:r,report:c,target:a}),c.reportSeparator(),c.reportInfo(0,"Building a fresh bundle"),c.reportSeparator();let f=await qr.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=J.join(a,`packages/yarnpkg-cli/bundles/yarn-${f.stdout.trim()}.js`);ce.existsSync(p)||(await $v(tct(this,p,a),{configuration:r,context:this.context,target:a}),c.reportSeparator());let h=await ce.readFilePromise(p);if(!this.dryRun){let{bundleVersion:E}=await Jq(r,null,async()=>h,{report:c});this.skipPlugins||await rct(this,E,{project:s,report:c,target:a})}})).exitCode()}};async function $v(t,{configuration:e,context:r,target:s}){for(let[a,...n]of t){let c=n[n.length-1]==="|";if(c&&n.pop(),c)await qr.pipevp(a,n,{cwd:s,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${he.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} -`);try{await qr.execvp(a,n,{cwd:s,strict:!0})}catch(f){throw r.stdout.write(f.stdout||f.stack),f}}}}async function zq(t,{configuration:e,report:r,target:s}){let a=!1;if(!t.force&&ce.existsSync(J.join(s,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await $v(ect(t),{configuration:e,context:t.context,target:s}),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 ce.removePromise(s),await ce.mkdirPromise(s,{recursive:!0}),await $v($lt(t,s),{configuration:e,context:t.context,target:s}))}async function rct(t,e,{project:r,report:s,target:a}){let n=await Sm(r.configuration,e),c=new Set(Object.keys(n));for(let f of r.configuration.plugins.keys())c.has(f)&&await Zq(f,t,{project:r,report:s,target:a})}Ge();Ge();Dt();Yt();var yye=ut(Ai()),Eye=Ie("vm");var bC=class extends ft{constructor(){super(...arguments);this.name=ge.String();this.checksum=ge.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 Ot.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await Rt.find(r,this.context.cwd),c,f;if(this.name.match(/^\.{0,2}[\\/]/)||fe.isAbsolute(this.name)){let p=J.resolve(this.context.cwd,fe.toPortablePath(this.name));a.reportInfo(0,`Reading ${he.pretty(r,p,he.Type.PATH)}`),c=J.relative(n.cwd,p),f=await ce.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`)}c=this.name,p=this.name}else{let h=G.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!yye.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),C=await Sm(r,fn);if(!Object.hasOwn(C,E)){let S=`Couldn't find a plugin named ${G.prettyIdent(r,h)} on the remote registry. -`;throw r.plugins.has(E)?S+=`A plugin named ${G.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:S+=`Note that only the plugins referenced on our website (${he.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",he.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${he.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",he.Type.URL)}).`,new jt(51,S)}c=E,p=C[E].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${E}/${h.reference}/`):fn!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${fn}/`))}a.reportInfo(0,`Downloading ${he.pretty(r,p,"green")}`),f=await ln.get(p,{configuration:r})}await Xq(c,f,{checksum:this.checksum,project:n,report:a})})).exitCode()}};async function Xq(t,e,{checksum:r=!0,project:s,report:a}){let{configuration:n}=s,c={},f={exports:c};(0,Eye.runInNewContext)(e.toString(),{module:f,exports:c});let h=`.yarn/plugins/${f.exports.name}.cjs`,E=J.resolve(s.cwd,h);a.reportInfo(0,`Saving the new plugin in ${he.pretty(n,h,"magenta")}`),await ce.mkdirPromise(J.dirname(E),{recursive:!0}),await ce.writeFilePromise(E,e);let C={path:h,spec:t};r&&(C.checksum=Nn.makeHash(e)),await ze.addPlugin(s.cwd,[C])}var nct=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],xC=class extends ft{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=ge.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),s=typeof this.installPath<"u"?J.resolve(this.context.cwd,fe.toPortablePath(this.installPath)):J.resolve(fe.toPortablePath((0,Iye.tmpdir)()),"yarnpkg-sources",Nn.makeHash(this.repository).slice(0,6));return(await Ot.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:c}=await Rt.find(r,this.context.cwd),f=G.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=G.stringifyIdent(f),h=await Sm(r,fn);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 zq(this,{configuration:r,report:n,target:s}),await Zq(E,this,{project:c,report:n,target:s})})).exitCode()}};async function Zq(t,{context:e,noMinify:r},{project:s,report:a,target:n}){let c=t.replace(/@yarnpkg\//,""),{configuration:f}=s;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${c}`),a.reportSeparator(),await $v(nct({pluginName:c,noMinify:r},n),{configuration:f,context:e,target:n}),a.reportSeparator();let p=J.resolve(n,`packages/${c}/bundles/${t}.js`),h=await ce.readFilePromise(p);await Xq(t,h,{project:s,report:a})}Ge();Dt();Yt();var kC=class extends ft{constructor(){super(...arguments);this.name=ge.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:s}=await Rt.find(r,this.context.cwd);return(await Ot.start({configuration:r,stdout:this.context.stdout},async n=>{let c=this.name,f=G.parseIdent(c);if(!r.plugins.has(c))throw new nt(`${G.prettyIdent(r,f)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${c}.cjs`,h=J.resolve(s.cwd,p);ce.existsSync(h)&&(n.reportInfo(0,`Removing ${he.pretty(r,p,he.Type.PATH)}...`),await ce.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await ze.updateConfiguration(s.cwd,{plugins:E=>{if(!Array.isArray(E))return E;let C=E.filter(S=>S.path!==p);return C.length===0?ze.deleteProperty:C.length===E.length?E:C}})})).exitCode()}};Ge();Yt();var QC=class extends ft{constructor(){super(...arguments);this.json=ge.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 Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let c=this.context.plugins.plugins.has(n),f=n;c&&(f+=" [builtin]"),a.reportJson({name:n,builtin:c}),a.reportInfo(null,`${f}`)}})).exitCode()}};Ge();Ge();Yt();var RC=class extends ft{constructor(){super(...arguments);this.idents=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd),n=await Kr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);let c=new Set;for(let f of this.idents)c.add(G.parseIdent(f).identHash);if(await s.restoreInstallState({restoreResolutions:!1}),await s.resolveEverything({cache:n,report:new ki}),c.size>0)for(let f of s.storedPackages.values())c.has(f.identHash)&&(s.storedBuildState.delete(f.locatorHash),s.skippedBuilds.delete(f.locatorHash));else s.storedBuildState.clear(),s.skippedBuilds.clear();return await s.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};Ge();Ge();Ge();Yt();var $q=ut(Go());Ul();var TC=class extends ft{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:fo($l)});this.patterns=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd),n=await Kr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState({restoreResolutions:!1});let c=this.all?s.workspaces:[a],f=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,E=[];for(let I of this.patterns){let T=!1,N=G.parseIdent(I);for(let U of c){let W=[...U.manifest.peerDependenciesMeta.keys()];for(let ee of(0,$q.default)(W,I))U.manifest.peerDependenciesMeta.delete(ee),h=!0,T=!0;for(let ee of f){let ie=U.manifest.getForScope(ee),ue=[...ie.values()].map(le=>G.stringifyIdent(le));for(let le of(0,$q.default)(ue,G.stringifyIdent(N))){let{identHash:me}=G.parseIdent(le),pe=ie.get(me);if(typeof pe>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[ee].delete(me),E.push([U,ee,pe]),h=!0,T=!0}}}T||p.push(I)}let C=p.length>1?"Patterns":"Pattern",S=p.length>1?"don't":"doesn't",b=this.all?"any":"this";if(p.length>0)throw new nt(`${C} ${he.prettyList(r,p,he.Type.CODE)} ${S} match any packages referenced by ${b} workspace`);return h?(await r.triggerMultipleHooks(I=>I.afterWorkspaceDependencyRemoval,E),await s.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};Ge();Ge();Yt();var Cye=Ie("util"),FC=class extends ft{constructor(){super(...arguments);this.json=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);return(await Ot.start({configuration:r,stdout:this.context.stdout,json:this.json},async c=>{let f=a.manifest.scripts,p=je.sortMap(f.keys(),C=>C),h={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},E=p.reduce((C,S)=>Math.max(C,S.length),0);for(let[C,S]of f.entries())c.reportInfo(null,`${C.padEnd(E," ")} ${(0,Cye.inspect)(S,h)}`),c.reportJson({name:C,script:S})})).exitCode()}};Ge();Ge();Yt();var NC=class extends ft{constructor(){super(...arguments);this.inspect=ge.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=ge.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=ge.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=ge.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.require=ge.String("--require",{description:"Forwarded to the underlying Node process when executing a binary"});this.silent=ge.Boolean("--silent",{hidden:!0});this.scriptName=ge.String();this.args=ge.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:s,workspace:a,locator:n}=await Rt.find(r,this.context.cwd);await s.restoreInstallState();let c=this.topLevel?s.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await In.hasPackageScript(c,this.scriptName,{project:s}))return await In.executePackageScript(c,this.scriptName,this.args,{project:s,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let f=await In.getPackageAccessibleBinaries(c,{project:s});if(f.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 In.executePackageAccessibleBinary(c,this.scriptName,this.args,{cwd:this.context.cwd,project:s,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:f})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let E=(await Promise.all(s.workspaces.map(async C=>C.manifest.scripts.has(this.scriptName)?C:null))).filter(C=>C!==null);if(E.length===1)return await In.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 nt(`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 nt(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${G.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new nt("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,C]of $I)for(let S of C)if(h.length>=S.length&&JSON.stringify(h.slice(0,S.length))===JSON.stringify(S))throw new nt(`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 nt(`Couldn't find a script named "${this.scriptName}".`)}}};Ge();Ge();Yt();var OC=class extends ft{constructor(){super(...arguments);this.descriptor=ge.String();this.resolution=ge.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 npm:1.5.0"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Rt.find(r,this.context.cwd),n=await Kr.find(r);if(await s.restoreInstallState({restoreResolutions:!1}),!a)throw new ar(s.cwd,this.context.cwd);let c=G.parseDescriptor(this.descriptor,!0),f=G.makeDescriptor(c,this.resolution);return s.storedDescriptors.set(c.descriptorHash,c),s.storedDescriptors.set(f.descriptorHash,f),s.resolutionAliases.set(c.descriptorHash,f.descriptorHash),await s.installWithNewReport({stdout:this.context.stdout},{cache:n})}};Ge();Dt();Yt();var wye=ut(Go()),LC=class extends ft{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd),n=await Kr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);let c=s.topLevelWorkspace,f=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of c.manifest.resolutions)h.startsWith("portal:")&&f.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=J.resolve(this.context.cwd,fe.toPortablePath(p));if(je.isPathLike(p)){let E=await ze.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:C,workspace:S}=await Rt.find(E,h);if(!S)throw new ar(C.cwd,h);if(this.all){for(let b of C.workspaces)b.manifest.name&&f.add(G.stringifyIdent(b.anchoredLocator));if(f.size===0)throw new nt("No workspace found to be unlinked in the target project")}else{if(!S.manifest.name)throw new nt("The target workspace doesn't have a name and thus cannot be unlinked");f.add(G.stringifyIdent(S.anchoredLocator))}}else{let E=[...c.manifest.resolutions.map(({pattern:C})=>C.descriptor.fullName)];for(let C of(0,wye.default)(E,p))f.add(C)}}return c.manifest.resolutions=c.manifest.resolutions.filter(({pattern:p})=>!f.has(p.descriptor.fullName)),await s.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};Ge();Ge();Ge();Yt();var Bye=ut(Vv()),e5=ut(Go());Ul();var MC=class extends ft{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:fo($l)});this.patterns=ge.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=[tB("recursive",qf.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:s,workspace:a}=await Rt.find(r,this.context.cwd),n=await Kr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState({restoreResolutions:!1});let c=[...s.storedDescriptors.values()],f=c.map(E=>G.stringifyIdent(E)),p=new Set;for(let E of this.patterns){if(G.parseDescriptor(E).range!=="unknown")throw new nt("Ranges aren't allowed when using --recursive");for(let C of(0,e5.default)(f,E)){let S=G.parseIdent(C);p.add(S.identHash)}}let h=c.filter(E=>p.has(E.identHash));for(let E of h)s.storedDescriptors.delete(E.descriptorHash),s.storedResolutions.delete(E.descriptorHash);return await s.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Rt.find(r,this.context.cwd),n=await Kr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState({restoreResolutions:!1});let c=this.fixed,f=r.isInteractive({interactive:this.interactive,stdout:this.context.stdout}),p=Kv(this,s),h=f?["keep","reuse","project","latest"]:["project","latest"],E=[],C=[];for(let N of this.patterns){let U=!1,W=G.parseDescriptor(N),ee=G.stringifyIdent(W);for(let ie of s.workspaces)for(let ue of["dependencies","devDependencies"]){let me=[...ie.manifest.getForScope(ue).values()].map(Be=>G.stringifyIdent(Be)),pe=ee==="*"?me:(0,e5.default)(me,ee);for(let Be of pe){let Ce=G.parseIdent(Be),g=ie.manifest[ue].get(Ce.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let we=G.makeDescriptor(Ce,W.range);E.push(Promise.resolve().then(async()=>[ie,ue,g,await zv(we,{project:s,workspace:ie,cache:n,target:ue,fixed:c,modifier:p,strategies:h})])),U=!0}}U||C.push(N)}if(C.length>1)throw new nt(`Patterns ${he.prettyList(r,C,he.Type.CODE)} don't match any packages referenced by any workspace`);if(C.length>0)throw new nt(`Pattern ${he.prettyList(r,C,he.Type.CODE)} doesn't match any packages referenced by any workspace`);let S=await Promise.all(E),b=await lA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async N=>{for(let[,,U,{suggestions:W,rejections:ee}]of S){let ie=W.filter(ue=>ue.descriptor!==null);if(ie.length===0){let[ue]=ee;if(typeof ue>"u")throw new Error("Assertion failed: Expected an error to have been set");let le=this.cli.error(ue);s.configuration.get("enableNetwork")?N.reportError(27,`${G.prettyDescriptor(r,U)} can't be resolved to a satisfying range - -${le}`):N.reportError(27,`${G.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) - -${le}`)}else ie.length>1&&!f&&N.reportError(27,`${G.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(b.hasErrors())return b.exitCode();let I=!1,T=[];for(let[N,U,,{suggestions:W}]of S){let ee,ie=W.filter(pe=>pe.descriptor!==null),ue=ie[0].descriptor,le=ie.every(pe=>G.areDescriptorsEqual(pe.descriptor,ue));ie.length===1||le?ee=ue:(I=!0,{answer:ee}=await(0,Bye.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${G.prettyWorkspace(r,N)} \u276F ${U}?`,choices:W.map(({descriptor:pe,name:Be,reason:Ce})=>pe?{name:Be,hint:Ce,descriptor:pe}:{name:Be,hint:Ce,disabled:!0}),onCancel:()=>process.exit(130),result(pe){return this.find(pe,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let me=N.manifest[U].get(ee.identHash);if(typeof me>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(me.descriptorHash!==ee.descriptorHash)N.manifest[U].set(ee.identHash,ee),T.push([N,U,me,ee]);else{let pe=r.makeResolver(),Be={project:s,resolver:pe},Ce=r.normalizeDependency(me),g=pe.bindDescriptor(Ce,N.anchoredLocator,Be);s.forgetResolution(g)}}return await r.triggerMultipleHooks(N=>N.afterWorkspaceDependencyReplacement,T),I&&this.context.stdout.write(` -`),await s.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Ge();Ge();Ge();Yt();var UC=class extends ft{constructor(){super(...arguments);this.recursive=ge.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=ge.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState();let n=G.parseIdent(this.package).identHash,c=this.recursive?sct(s,n,{configuration:r,peers:this.peers}):ict(s,n,{configuration:r,peers:this.peers});xs.emitTree(c,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};function ict(t,e,{configuration:r,peers:s}){let a=je.sortMap(t.storedPackages.values(),f=>G.stringifyLocator(f)),n={},c={children:n};for(let f of a){let p={};for(let E of f.dependencies.values()){if(!s&&f.peerDependencies.has(E.identHash))continue;let C=t.storedResolutions.get(E.descriptorHash);if(!C)throw new Error("Assertion failed: The resolution should have been registered");let S=t.storedPackages.get(C);if(!S)throw new Error("Assertion failed: The package should have been registered");if(S.identHash!==e)continue;{let I=G.stringifyLocator(f);n[I]={value:[f,he.Type.LOCATOR],children:p}}let b=G.stringifyLocator(S);p[b]={value:[{descriptor:E,locator:S},he.Type.DEPENDENT]}}}return c}function sct(t,e,{configuration:r,peers:s}){let a=je.sortMap(t.workspaces,S=>G.stringifyLocator(S.anchoredLocator)),n=new Set,c=new Set,f=S=>{if(n.has(S.locatorHash))return c.has(S.locatorHash);if(n.add(S.locatorHash),S.identHash===e)return c.add(S.locatorHash),!0;let b=!1;S.identHash===e&&(b=!0);for(let I of S.dependencies.values()){if(!s&&S.peerDependencies.has(I.identHash))continue;let T=t.storedResolutions.get(I.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");f(N)&&(b=!0)}return b&&c.add(S.locatorHash),b};for(let S of a)f(S.anchoredPackage);let p=new Set,h={},E={children:h},C=(S,b,I)=>{if(!c.has(S.locatorHash))return;let T=I!==null?he.tuple(he.Type.DEPENDENT,{locator:S,descriptor:I}):he.tuple(he.Type.LOCATOR,S),N={},U={value:T,children:N},W=G.stringifyLocator(S);if(b[W]=U,!(I!==null&&t.tryWorkspaceByLocator(S))&&!p.has(S.locatorHash)){p.add(S.locatorHash);for(let ee of S.dependencies.values()){if(!s&&S.peerDependencies.has(ee.identHash))continue;let ie=t.storedResolutions.get(ee.descriptorHash);if(!ie)throw new Error("Assertion failed: The resolution should have been registered");let ue=t.storedPackages.get(ie);if(!ue)throw new Error("Assertion failed: The package should have been registered");C(ue,N,ee)}}};for(let S of a)C(S.anchoredPackage,h,null);return E}Ge();var u5={};Vt(u5,{GitFetcher:()=>tS,GitResolver:()=>rS,default:()=>Dct,gitUtils:()=>ka});Ge();Dt();var ka={};Vt(ka,{TreeishProtocols:()=>eS,clone:()=>c5,fetchBase:()=>qye,fetchChangedFiles:()=>Wye,fetchChangedWorkspaces:()=>vct,fetchRoot:()=>Gye,isGitUrl:()=>jC,lsRemote:()=>jye,normalizeLocator:()=>Bct,normalizeRepoUrl:()=>_C,resolveUrl:()=>l5,splitRepoUrl:()=>W0,validateRepoUrl:()=>a5});Ge();Dt();Yt();ql();var _ye=ut(Lye()),HC=ut(Ie("querystring")),s5=ut(Ai());function i5(t,e,r){let s=t.indexOf(r);return t.lastIndexOf(e,s>-1?s:1/0)}function Mye(t){try{return new URL(t)}catch{return}}function Cct(t){let e=i5(t,"@","#"),r=i5(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),i5(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function Uye(t){return Mye(t)||Mye(Cct(t))}function _C(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=Uye(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function Hye(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var wct=[/^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\/(.+)?$/],eS=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(eS||{});function jC(t){return t?wct.some(e=>!!t.match(e)):!1}function W0(t){t=_C(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),s=t.slice(e+1);if(s.match(/^[a-z]+=/)){let a=HC.default.parse(s);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(eS).find(p=>Object.hasOwn(a,p)),[c,f]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(eS))delete a[p];return{repo:r,treeish:{protocol:c,request:f},extra:a}}else{let a=s.indexOf(":"),[n,c]=a===-1?[null,s]:[s.slice(0,a),s.slice(a+1)];return{repo:r,treeish:{protocol:n,request:c},extra:{}}}}function Bct(t){return G.makeLocator(t,_C(t.reference))}function a5(t,{configuration:e}){let r=_C(t,{git:!0});if(!ln.getNetworkSettings(`https://${(0,_ye.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 jye(t,e){let r=a5(t,{configuration:e}),s=await o5("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:Hye()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,c;for(;(c=n.exec(s.stdout))!==null;)a.set(c[2],c[1]);return a}async function l5(t,e){let{repo:r,treeish:{protocol:s,request:a},extra:n}=W0(t),c=await jye(r,e),f=(h,E)=>{switch(h){case"commit":{if(!E.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return HC.default.stringify({...n,commit:E})}case"head":{let C=c.get(E==="HEAD"?E:`refs/heads/${E}`);if(typeof C>"u")throw new Error(`Unknown head ("${E}")`);return HC.default.stringify({...n,commit:C})}case"tag":{let C=c.get(`refs/tags/${E}`);if(typeof C>"u")throw new Error(`Unknown tag ("${E}")`);return HC.default.stringify({...n,commit:C})}case"semver":{let C=Fr.validRange(E);if(!C)throw new Error(`Invalid range ("${E}")`);let S=new Map([...c.entries()].filter(([I])=>I.startsWith("refs/tags/")).map(([I,T])=>[s5.default.parse(I.slice(10)),T]).filter(I=>I[0]!==null)),b=s5.default.maxSatisfying([...S.keys()],C);if(b===null)throw new Error(`No matching range ("${E}")`);return HC.default.stringify({...n,commit:S.get(b)})}case null:{let C;if((C=p("commit",E))!==null||(C=p("tag",E))!==null||(C=p("head",E))!==null)return C;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 f(h,E)}catch{return null}};return _C(`${r}#${f(s,a)}`)}async function c5(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:s,request:a}}=W0(t);if(s!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=a5(r,{configuration:e}),c=await ce.mktempPromise(),f={cwd:c,env:Hye()};return await o5("cloning the repository",["clone","-c core.autocrlf=false",n,fe.fromPortablePath(c)],f,{configuration:e,normalizedRepoUrl:n}),await o5("switching branch",["checkout",`${a}`],f,{configuration:e,normalizedRepoUrl:n}),c})}async function Gye(t){let e,r=t;do{if(e=r,await ce.existsPromise(J.join(e,".git")))return e;r=J.dirname(e)}while(r!==e);return null}async function qye(t,{baseRefs:e}){if(e.length===0)throw new nt("Can't run this command with zero base refs specified.");let r=[];for(let f of e){let{code:p}=await qr.execvp("git",["merge-base",f,"HEAD"],{cwd:t});p===0&&r.push(f)}if(r.length===0)throw new nt(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:s}=await qr.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=s.trim(),{stdout:n}=await qr.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),c=n.trim();return{hash:a,title:c}}async function Wye(t,{base:e,project:r}){let s=je.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await qr.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>J.resolve(t,fe.toPortablePath(h))),{stdout:c}=await qr.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),f=c.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>J.resolve(t,fe.toPortablePath(h))),p=[...new Set([...n,...f].sort())];return s?p.filter(h=>!J.relative(r.cwd,h).match(s)):p}async function vct({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new nt("This command can only be run from within a Yarn project");let r=[J.resolve(e.cwd,Er.lockfile),J.resolve(e.cwd,e.configuration.get("cacheFolder")),J.resolve(e.cwd,e.configuration.get("installStatePath")),J.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(c=>c.populateYarnPaths,e,c=>{c!=null&&r.push(c)});let s=await Gye(e.configuration.projectCwd);if(s==null)throw new nt("This command can only be run on Git repositories");let a=await qye(s,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await Wye(s,{base:a.hash,project:e});return new Set(je.mapAndFilter(n,c=>{let f=e.tryWorkspaceByFilePath(c);return f===null?je.mapAndFilter.skip:r.some(p=>c.startsWith(p))?je.mapAndFilter.skip:f}))}async function o5(t,e,r,{configuration:s,normalizedRepoUrl:a}){try{return await qr.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof qr.ExecError))throw n;let c=n.reportExtra,f=n.stderr.toString();throw new jt(1,`Failed ${t}`,p=>{p.reportError(1,` ${he.prettyField(s,{label:"Repository URL",value:he.tuple(he.Type.URL,a)})}`);for(let h of f.matchAll(/^(.+?): (.*)$/gm)){let[,E,C]=h;E=E.toLowerCase();let S=E==="error"?"Error":`${PB(E)} Error`;p.reportError(1,` ${he.prettyField(s,{label:S,value:he.tuple(he.Type.NO_HINT,C)})}`)}c?.(p)})}}var tS=class{supports(e,r){return jC(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,s);let n={...r,checksums:a},c=await this.downloadHosted(e,n);if(c!==null)return c;let[f,p,h]=await r.cache.fetchPackageFromCache(e,s,{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:f,releaseFs:p,prefixPath:G.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(s=>s.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let s=W0(e.reference),a=await c5(e.reference,r.project.configuration),n=J.resolve(a,s.extra.cwd??vt.dot),c=J.join(n,"package.tgz");await In.prepareExternalProject(n,c,{configuration:r.project.configuration,report:r.report,workspace:s.extra.workspace,locator:e});let f=await ce.readFilePromise(c);return await je.releaseAfterUseAsync(async()=>await ps.convertToZip(f,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1}))}};Ge();Ge();var rS=class{supportsDescriptor(e,r){return jC(e.range)}supportsLocator(e,r){return jC(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){let a=await l5(e.range,s.project.configuration);return[G.makeLocator(e,a)]}async getSatisfying(e,r,s,a){let n=W0(e.range);return{locators:s.filter(f=>{if(f.identHash!==e.identHash)return!1;let p=W0(f.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 s=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Ut.find(s.prefixPath,{baseFs:s.packageFs}),s.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 Sct={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:[tS],resolvers:[rS]};var Dct=Sct;Yt();var GC=class extends ft{constructor(){super(...arguments);this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.noPrivate=ge.Boolean("--no-private",{description:"Exclude workspaces that have the private field set to true"});this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=ge.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:s}=await Rt.find(r,this.context.cwd);return(await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let c=this.since?await ka.fetchChangedWorkspaces({ref:this.since,project:s}):s.workspaces,f=new Set(c);if(this.recursive)for(let p of[...c].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)f.add(h);for(let p of f){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let E;if(this.verbose){let C=new Set,S=new Set;for(let b of Ut.hardDependencies)for(let[I,T]of h.getForScope(b)){let N=s.tryWorkspaceByDescriptor(T);N===null?s.workspacesByIdent.has(I)&&S.add(T):C.add(N)}E={workspaceDependencies:Array.from(C).map(b=>b.relativeCwd),mismatchedWorkspaceDependencies:Array.from(S).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()}};Ge();Ge();Yt();var qC=class extends ft{constructor(){super(...arguments);this.workspaceName=ge.String();this.commandName=ge.String();this.args=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);let n=s.workspaces,c=new Map(n.map(p=>[G.stringifyIdent(p.anchoredLocator),p])),f=c.get(this.workspaceName);if(f===void 0){let p=Array.from(c.keys()).sort();throw new nt(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: - - ${p.join(` - - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:f.cwd})}};var Pct={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:"BOOLEAN",default:Yye.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:[aC,lC,cC,uC,OC,PC,EC,GC,pC,hC,gC,dC,sC,oC,fC,AC,mC,yC,IC,CC,wC,BC,LC,vC,SC,xC,bC,kC,DC,QC,RC,TC,FC,NC,MC,UC,qC]},bct=Pct;var d5={};Vt(d5,{default:()=>kct});Ge();var Qt={optional:!0},A5=[["@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:Qt,zenObservable:Qt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:Qt,zenObservable:Qt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{"supports-color":Qt}}],["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":Qt,"postcss-jsx":Qt,"postcss-less":Qt,"postcss-markdown":Qt,"postcss-scss":Qt}}],["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:Qt}}],["snowpack@>=3.3.0",{dependencies:{"node-gyp":"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:Qt}}],["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:Qt,"vue-template-compiler":Qt}}],["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:Qt,"utf-8-validate":Qt}}],["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":Qt,"vuetify-loader":Qt}}],["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":Qt}}],["@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":Qt}}],["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":Qt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:Qt}}],["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:Qt,tinyliquid:Qt,"liquid-node":Qt,jade:Qt,"then-jade":Qt,dust:Qt,"dustjs-helpers":Qt,"dustjs-linkedin":Qt,swig:Qt,"swig-templates":Qt,"razor-tmpl":Qt,atpl:Qt,liquor:Qt,twig:Qt,ejs:Qt,eco:Qt,jazz:Qt,jqtpl:Qt,hamljs:Qt,hamlet:Qt,whiskers:Qt,"haml-coffee":Qt,"hogan.js":Qt,templayed:Qt,handlebars:Qt,underscore:Qt,lodash:Qt,pug:Qt,"then-pug":Qt,qejs:Qt,walrus:Qt,mustache:Qt,just:Qt,ect:Qt,mote:Qt,toffee:Qt,dot:Qt,"bracket-template":Qt,ractive:Qt,nunjucks:Qt,htmling:Qt,"babel-core":Qt,plates:Qt,"react-dom":Qt,react:Qt,"arc-templates":Qt,vash:Qt,slm:Qt,marko:Qt,teacup:Qt,"coffee-script":Qt,squirrelly:Qt,twing:Qt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":Qt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":Qt,vue:Qt}}],["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:Qt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:Qt}}],["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":Qt,"webpack-command":Qt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":Qt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":Qt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:Qt,jimp:Qt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":Qt,"eslint-import-resolver-typescript":Qt,"eslint-import-resolver-webpack":Qt,"@typescript-eslint/parser":Qt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":Qt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":Qt}}],["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:Qt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:Qt}}],["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":Qt}}],["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:Qt}}],["@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:Qt}}],["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:Qt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":Qt}}],["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"}}],["@fastify/type-provider-typebox@^5.0.0",{peerDependencies:{fastify:"^5.0.0"}}],["@fastify/type-provider-typebox@^4.0.0",{peerDependencies:{fastify:"^4.0.0"}}]];var p5;function Vye(){return typeof p5>"u"&&(p5=Ie("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()),p5}var h5;function Jye(){return typeof h5>"u"&&(h5=Ie("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()),h5}var g5;function Kye(){return typeof g5>"u"&&(g5=Ie("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),g5}var zye=new Map([[G.makeIdent(null,"fsevents").identHash,Vye],[G.makeIdent(null,"resolve").identHash,Jye],[G.makeIdent(null,"typescript").identHash,Kye]]),xct={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,s]of A5)e(G.parseDescriptor(r,!0),s)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let s=G.parseIdent(e.slice(r.length)),a=zye.get(s.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,s)=>typeof zye.get(t.identHash)>"u"?t:G.makeDescriptor(t,G.makeRange({protocol:"patch:",source:G.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},kct=xct;var T5={};Vt(T5,{ConstraintsCheckCommand:()=>XC,ConstraintsQueryCommand:()=>zC,ConstraintsSourceCommand:()=>ZC,default:()=>Kct});Ge();Ge();iS();var YC=class{constructor(e){this.project=e}createEnvironment(){let e=new WC(["cwd","ident"]),r=new WC(["workspace","type","ident"]),s=new WC(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,c=new Map;for(let f of this.project.storedPackages.values()){let p=Array.from(f.peerDependencies.values(),h=>[G.stringifyIdent(h),h.range]);n.set(f.locatorHash,{workspace:null,ident:G.stringifyIdent(f),version:f.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>f.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>f.peerDependenciesMeta.get(h)?.optional===!0))})}for(let f of this.project.storedPackages.values()){let p=n.get(f.locatorHash);p.dependencies=new Map(Array.from(f.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 C=n.get(E);if(typeof C>"u")throw new Error("Assertion failed: The package should have been registered");return[G.stringifyIdent(h),C]})),p.dependencies.delete(p.ident)}for(let f of this.project.workspaces){let p=G.stringifyIdent(f.anchoredLocator),h=f.manifest.exportTo({}),E=n.get(f.anchoredLocator.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");let C=(T,N,{caller:U=fs.getCaller()}={})=>{let W=nS(T),ee=je.getMapWithDefault(a.manifestUpdates,f.cwd),ie=je.getMapWithDefault(ee,W),ue=je.getSetWithDefault(ie,N);U!==null&&ue.add(U)},S=T=>C(T,void 0,{caller:fs.getCaller()}),b=T=>{je.getArrayWithDefault(a.reportedErrors,f.cwd).push(T)},I=e.insert({cwd:f.relativeCwd,ident:p,manifest:h,pkg:E,set:C,unset:S,error:b});c.set(f,I);for(let T of Ut.allDependencies)for(let N of f.manifest[T].values()){let U=G.stringifyIdent(N),W=()=>{C([T,U],void 0,{caller:fs.getCaller()})},ee=ue=>{C([T,U],ue,{caller:fs.getCaller()})},ie=null;if(T!=="peerDependencies"&&(T!=="dependencies"||!f.manifest.devDependencies.has(N.identHash))){let ue=f.anchoredPackage.dependencies.get(N.identHash);if(ue){if(typeof ue>"u")throw new Error("Assertion failed: The dependency should have been registered");let le=this.project.storedResolutions.get(ue.descriptorHash);if(typeof le>"u")throw new Error("Assertion failed: The resolution should have been registered");let me=n.get(le);if(typeof me>"u")throw new Error("Assertion failed: The package should have been registered");ie=me}}r.insert({workspace:I,ident:U,range:N.range,type:T,resolution:ie,update:ee,delete:W,error:b})}}for(let f of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(f);if(!p)continue;let h=c.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let E=n.get(f.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:s,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)}},s=await this.project.loadUserConfig();return s?.constraints?(await s.constraints(r),e.result):null}};Ge();Ge();Yt();var zC=class extends ft{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=ge.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(()=>(lS(),aS)),s=await ze.find(this.context.cwd,this.context.plugins),{project:a}=await Rt.find(s,this.context.cwd),n=await r.find(a),c=this.query;return c.endsWith(".")||(c=`${c}.`),(await Ot.start({configuration:s,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(c)){let E=Array.from(Object.entries(h)),C=E.length,S=E.reduce((b,[I])=>Math.max(b,I.length),0);for(let b=0;b(lS(),aS)),s=await ze.find(this.context.cwd,this.context.plugins),{project:a}=await Rt.find(s,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};Ge();Ge();Yt();iS();var XC=class extends ft{constructor(){super(...arguments);this.fix=ge.Boolean("--fix",!1,{description:"Attempt to automatically fix unambiguous issues, following a multi-pass process"});this.json=ge.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:s}=await Rt.find(r,this.context.cwd);await s.restoreInstallState();let a=await s.loadUserConfig(),n;if(a?.constraints)n=new YC(s);else{let{Constraints:h}=await Promise.resolve().then(()=>(lS(),aS));n=await h.find(s)}let c,f=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let E=await n.process();if(!E)break;let{changedWorkspaces:C,remainingErrors:S}=nF(s,E,{fix:this.fix}),b=[];for(let[I,T]of C){let N=I.manifest.indent;I.manifest=new Ut,I.manifest.indent=N,I.manifest.load(T),b.push(I.persistManifest())}if(await Promise.all(b),!(C.size>0&&h>1)){c=Zye(S,{configuration:r}),f=!1,p=!0;for(let[,I]of S)for(let T of I)T.fixable?f=!0:p=!1}}if(c.children.length===0)return 0;if(f){let h=p?`Those errors can all be fixed by running ${he.pretty(r,"yarn constraints --fix",he.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${he.pretty(r,"yarn constraints --fix",he.Type.CODE)}`;await Ot.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async E=>{E.reportInfo(0,h),E.reportSeparator()})}return c.children=je.sortMap(c.children,h=>h.value[1]),xs.emitTree(c,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};iS();var Jct={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:[zC,ZC,XC],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),s;if(r?.constraints)s=new YC(t);else{let{Constraints:c}=await Promise.resolve().then(()=>(lS(),aS));s=await c.find(t)}let a=await s.process();if(!a)return;let{remainingErrors:n}=nF(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[c,f]of n)for(let p of f)e(84,`${he.pretty(t.configuration,c.anchoredLocator,he.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${he.pretty(t.configuration,"yarn constraints",he.Type.CODE)} for more details`)}}},Kct=Jct;var F5={};Vt(F5,{CreateCommand:()=>$C,DlxCommand:()=>ew,default:()=>Zct});Ge();Yt();var $C=class extends ft{constructor(){super(...arguments);this.pkg=ge.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}static{this.paths=[["create"]]}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let s=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=G.parseDescriptor(s),n=a.name.match(/^create(-|$)/)?a:a.scope?G.makeIdent(a.scope,`create-${a.name}`):G.makeIdent(null,`create-${a.name}`),c=G.stringifyIdent(n);return a.range!=="unknown"&&(c+=`@${a.range}`),this.cli.run(["dlx",...r,c,...this.args])}};Ge();Ge();Dt();Yt();var ew=class extends ft{constructor(){super(...arguments);this.packages=ge.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.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-vite to scaffold a new Vite project","yarn dlx create-vite"],["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 ce.mktempPromise(async r=>{let s=J.join(r,`dlx-${process.pid}`);await ce.mkdirPromise(s),await ce.writeFilePromise(J.join(s,"package.json"),`{} -`),await ce.writeFilePromise(J.join(s,"yarn.lock"),"");let a=J.join(s,".yarnrc.yml"),n=await ze.findProjectCwd(this.context.cwd),f={enableGlobalCache:!(await ze.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Yf(68),level:he.LogLevel.Discard}]},p=n!==null?J.join(n,".yarnrc.yml"):null;p!==null&&ce.existsSync(p)?(await ce.copyFilePromise(p,a),await ze.updateConfiguration(s,N=>{let U=je.toMerged(N,f);return Array.isArray(N.plugins)&&(U.plugins=N.plugins.map(W=>{let ee=typeof W=="string"?W:W.path,ie=fe.isAbsolute(ee)?ee:fe.resolve(fe.fromPortablePath(n),ee);return typeof W=="string"?ie:{path:ie,spec:W.spec}})),U})):await ce.writeJsonPromise(a,f);let h=this.packages??[this.command],E=G.parseDescriptor(this.command).name,C=await this.cli.run(["add","--fixed","--",...h],{cwd:s,quiet:this.quiet});if(C!==0)return C;this.quiet||this.context.stdout.write(` -`);let S=await ze.find(s,this.context.plugins),{project:b,workspace:I}=await Rt.find(S,s);if(I===null)throw new ar(b.cwd,s);await b.restoreInstallState();let T=await In.getWorkspaceAccessibleBinaries(I);return T.has(E)===!1&&T.size===1&&typeof this.packages>"u"&&(E=Array.from(T)[0][0]),await In.executeWorkspaceAccessibleBinary(I,E,this.args,{packageAccessibleBinaries:T,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};var zct={commands:[$C,ew]},Zct=zct;var L5={};Vt(L5,{ExecFetcher:()=>uS,ExecResolver:()=>fS,default:()=>eut,execUtils:()=>aF});Ge();Ge();Dt();var cA="exec:";var aF={};Vt(aF,{loadGeneratorFile:()=>cS,makeLocator:()=>O5,makeSpec:()=>BEe,parseSpec:()=>N5});Ge();Dt();function N5(t){let{params:e,selector:r}=G.parseRange(t),s=fe.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?G.parseLocator(e.locator):null,path:s}}function BEe({parentLocator:t,path:e,generatorHash:r,protocol:s}){let a=t!==null?{locator:G.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return G.makeRange({protocol:s,source:e,selector:e,params:{...n,...a}})}function O5(t,{parentLocator:e,path:r,generatorHash:s,protocol:a}){return G.makeLocator(t,BEe({parentLocator:e,path:r,generatorHash:s,protocol:a}))}async function cS(t,e,r){let{parentLocator:s,path:a}=G.parseFileStyleRange(t,{protocol:e}),n=J.isAbsolute(a)?{packageFs:new Sn(vt.root),prefixPath:vt.dot,localPath:vt.root}:await r.fetcher.fetch(s,r),c=n.localPath?{packageFs:new Sn(vt.root),prefixPath:J.relative(vt.root,n.localPath)}:n;n!==c&&n.releaseFs&&n.releaseFs();let f=c.packageFs,p=J.join(c.prefixPath,a);return await f.readFilePromise(p,"utf8")}var uS=class{supports(e,r){return!!e.reference.startsWith(cA)}getLocalPath(e,r){let{parentLocator:s,path:a}=G.parseFileStyleRange(e.reference,{protocol:cA});if(J.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(s,r);return n===null?null:J.resolve(n,a)}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{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:c}}async fetchFromDisk(e,r){let s=await cS(e.reference,cA,r);return ce.mktempPromise(async a=>{let n=J.join(a,"generator.js");return await ce.writeFilePromise(n,s),ce.mktempPromise(async c=>{if(await this.generatePackage(c,e,n,r),!ce.existsSync(J.join(c,"build")))throw new Error("The script should have generated a build directory");return await ps.makeArchiveFromDirectory(J.join(c,"build"),{prefixPath:G.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,s,a){return await ce.mktempPromise(async n=>{let c=await In.makeScriptEnv({project:a.project,binFolder:n}),f=J.join(e,"runtime.js");return await ce.mktempPromise(async p=>{let h=J.join(p,"buildfile.log"),E=J.join(e,"generator"),C=J.join(e,"build");await ce.mkdirPromise(E),await ce.mkdirPromise(C);let S={tempDir:fe.fromPortablePath(E),buildDir:fe.fromPortablePath(C),locator:G.stringifyLocator(r)};await ce.writeFilePromise(f,` - // 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(S)}, - }, - enumerable: true, - }); - `);let b=c.NODE_OPTIONS||"",I=/\s*--require\s+\S*\.pnp\.c?js\s*/g;b=b.replace(I," ").trim(),c.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 qr.pipevp(process.execPath,["--require",fe.fromPortablePath(f),fe.fromPortablePath(s),G.stringifyIdent(r)],{cwd:e,env:c,stdin:null,stdout:T,stderr:N});if(U!==0)throw ce.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${he.pretty(a.project.configuration,h,he.Type.PATH)})`)})})}};Ge();Ge();var Xct=2,fS=class{supportsDescriptor(e,r){return!!e.range.startsWith(cA)}supportsLocator(e,r){return!!e.reference.startsWith(cA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){return G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){if(!s.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=N5(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let c=await cS(G.makeRange({protocol:cA,source:a,selector:a,params:{locator:G.stringifyLocator(n)}}),cA,s.fetchOptions),f=Nn.makeHash(`${Xct}`,c).slice(0,6);return[O5(e,{parentLocator:n,path:a,generatorHash:f,protocol:cA})]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.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 s=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Ut.find(s.prefixPath,{baseFs:s.packageFs}),s.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 $ct={fetchers:[uS],resolvers:[fS]},eut=$ct;var U5={};Vt(U5,{FileFetcher:()=>gS,FileResolver:()=>dS,TarballFileFetcher:()=>mS,TarballFileResolver:()=>yS,default:()=>nut,fileUtils:()=>xm});Ge();Dt();var tw=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,AS=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,$i="file:";var xm={};Vt(xm,{fetchArchiveFromLocator:()=>hS,makeArchiveFromLocator:()=>lF,makeBufferFromLocator:()=>M5,makeLocator:()=>rw,makeSpec:()=>vEe,parseSpec:()=>pS});Ge();Dt();function pS(t){let{params:e,selector:r}=G.parseRange(t),s=fe.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?G.parseLocator(e.locator):null,path:s}}function vEe({parentLocator:t,path:e,hash:r,protocol:s}){let a=t!==null?{locator:G.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return G.makeRange({protocol:s,source:e,selector:e,params:{...n,...a}})}function rw(t,{parentLocator:e,path:r,hash:s,protocol:a}){return G.makeLocator(t,vEe({parentLocator:e,path:r,hash:s,protocol:a}))}async function hS(t,e){let{parentLocator:r,path:s}=G.parseFileStyleRange(t.reference,{protocol:$i}),a=J.isAbsolute(s)?{packageFs:new Sn(vt.root),prefixPath:vt.dot,localPath:vt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new Sn(vt.root),prefixPath:J.relative(vt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let c=n.packageFs,f=J.join(n.prefixPath,s);return await je.releaseAfterUseAsync(async()=>await c.readFilePromise(f),n.releaseFs)}async function lF(t,{protocol:e,fetchOptions:r,inMemory:s=!1}){let{parentLocator:a,path:n}=G.parseFileStyleRange(t.reference,{protocol:e}),c=J.isAbsolute(n)?{packageFs:new Sn(vt.root),prefixPath:vt.dot,localPath:vt.root}:await r.fetcher.fetch(a,r),f=c.localPath?{packageFs:new Sn(vt.root),prefixPath:J.relative(vt.root,c.localPath)}:c;c!==f&&c.releaseFs&&c.releaseFs();let p=f.packageFs,h=J.join(f.prefixPath,n);return await je.releaseAfterUseAsync(async()=>await ps.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:G.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:s}),f.releaseFs)}async function M5(t,{protocol:e,fetchOptions:r}){return(await lF(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var gS=class{supports(e,r){return!!e.reference.startsWith($i)}getLocalPath(e,r){let{parentLocator:s,path:a}=G.parseFileStyleRange(e.reference,{protocol:$i});if(J.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(s,r);return n===null?null:J.resolve(n,a)}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{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:c}}async fetchFromDisk(e,r){return lF(e,{protocol:$i,fetchOptions:r})}};Ge();Ge();var tut=2,dS=class{supportsDescriptor(e,r){return e.range.match(tw)?!0:!!e.range.startsWith($i)}supportsLocator(e,r){return!!e.reference.startsWith($i)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){return tw.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,s){if(!s.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=pS(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let c=await M5(G.makeLocator(e,G.makeRange({protocol:$i,source:a,selector:a,params:{locator:G.stringifyLocator(n)}})),{protocol:$i,fetchOptions:s.fetchOptions}),f=Nn.makeHash(`${tut}`,c).slice(0,6);return[rw(e,{parentLocator:n,path:a,hash:f,protocol:$i})]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.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 s=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Ut.find(s.prefixPath,{baseFs:s.packageFs}),s.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}}};Ge();var mS=class{supports(e,r){return AS.test(e.reference)?!!e.reference.startsWith($i):!1}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{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:c}}async fetchFromDisk(e,r){let s=await hS(e,r);return await ps.convertToZip(s,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}};Ge();Ge();Ge();var yS=class{supportsDescriptor(e,r){return AS.test(e.range)?!!(e.range.startsWith($i)||tw.test(e.range)):!1}supportsLocator(e,r){return AS.test(e.reference)?!!e.reference.startsWith($i):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){return tw.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,s){if(!s.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=pS(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let c=rw(e,{parentLocator:n,path:a,hash:"",protocol:$i}),f=await hS(c,s.fetchOptions),p=Nn.makeHash(f).slice(0,6);return[rw(e,{parentLocator:n,path:a,hash:p,protocol:$i})]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.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 s=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Ut.find(s.prefixPath,{baseFs:s.packageFs}),s.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 rut={fetchers:[mS,gS],resolvers:[yS,dS]},nut=rut;var j5={};Vt(j5,{GithubFetcher:()=>ES,default:()=>sut,githubUtils:()=>cF});Ge();Dt();var cF={};Vt(cF,{invalidGithubUrlMessage:()=>PEe,isGithubUrl:()=>_5,parseGithubUrl:()=>H5});var SEe=ut(Ie("querystring")),DEe=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function _5(t){return t?DEe.some(e=>!!t.match(e)):!1}function H5(t){let e;for(let f of DEe)if(e=t.match(f),e)break;if(!e)throw new Error(PEe(t));let[,r,s,a,n="master"]=e,{commit:c}=SEe.default.parse(n);return n=c||n.replace(/[^:]*:/,""),{auth:r,username:s,reponame:a,treeish:n}}function PEe(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var ES=class{supports(e,r){return!!_5(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{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:c}}async fetchFromNetwork(e,r){let s=await ln.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await ce.mktempPromise(async a=>{let n=new Sn(a);await ps.extractArchiveTo(s,n,{stripComponents:1});let c=ka.splitRepoUrl(e.reference),f=J.join(a,"package.tgz");await In.prepareExternalProject(a,f,{configuration:r.project.configuration,report:r.report,workspace:c.extra.workspace,locator:e});let p=await ce.readFilePromise(f);return await ps.convertToZip(p,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:s,username:a,reponame:n,treeish:c}=H5(e.reference);return`https://${s?`${s}@`:""}github.com/${a}/${n}/archive/${c}.tar.gz`}};var iut={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let s=new ES;if(!s.supports(e,r))return null;try{return await s.fetch(e,r)}catch{return null}}}},sut=iut;var G5={};Vt(G5,{TarballHttpFetcher:()=>CS,TarballHttpResolver:()=>wS,default:()=>aut});Ge();function IS(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 CS=class{supports(e,r){return IS(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{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:c}}async fetchFromNetwork(e,r){let s=await ln.get(e.reference,{configuration:r.project.configuration});return await ps.convertToZip(s,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}};Ge();Ge();var wS=class{supportsDescriptor(e,r){return IS(e.range)}supportsLocator(e,r){return IS(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){return[G.convertDescriptorToLocator(e)]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.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 s=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Ut.find(s.prefixPath,{baseFs:s.packageFs}),s.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 out={fetchers:[CS],resolvers:[wS]},aut=out;var q5={};Vt(q5,{InitCommand:()=>z0,InitInitializerCommand:()=>nw,default:()=>cut});Yt();Ge();Ge();Dt();Yt();var z0=class extends ft{constructor(){super(...arguments);this.private=ge.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=ge.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=ge.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.name=ge.String("-n,--name",{description:"Initialize a package with the given name"});this.usev2=ge.Boolean("-2",!1,{hidden:!0});this.yes=ge.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),s=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return s!==null?await this.executeProxy(r,s):await this.executeRegular(r)}async executeProxy(r,s){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new nt("Cannot use the --install flag from within a project subdirectory");ce.existsSync(this.context.cwd)||await ce.mkdirPromise(this.context.cwd,{recursive:!0});let a=J.join(this.context.cwd,Er.lockfile);ce.existsSync(a)||await ce.writeFilePromise(a,"");let n=await this.cli.run(["set","version",s],{quiet:!0});if(n!==0)return n;let c=[];return this.private&&c.push("-p"),this.workspace&&c.push("-w"),this.name&&c.push(`-n=${this.name}`),this.yes&&c.push("-y"),await ce.mktempPromise(async f=>{let{code:p}=await qr.pipevp("yarn",["init",...c],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await In.makeScriptEnv({binFolder:f})});return p})}async initialize(){}async executeRegular(r){let s=null;try{s=(await Rt.find(r,this.context.cwd)).project}catch{s=null}ce.existsSync(this.context.cwd)||await ce.mkdirPromise(this.context.cwd,{recursive:!0});let a=await Ut.tryFind(this.context.cwd),n=a??new Ut,c=Object.fromEntries(r.get("initFields").entries());n.load(c),n.name=n.name??G.makeIdent(r.get("initScope"),this.name??J.basename(this.context.cwd)),n.packageManager=fn&&je.isTaggedYarnVersion(fn)?`yarn@${fn}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await ce.mkdirPromise(J.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let f={};n.exportTo(f);let p=J.join(this.context.cwd,Ut.fileName);await ce.changeFilePromise(p,`${JSON.stringify(f,null,2)} -`,{automaticNewlines:!0});let h=[p],E=J.join(this.context.cwd,"README.md");if(ce.existsSync(E)||(await ce.writeFilePromise(E,`# ${G.stringifyIdent(n.name)} -`),h.push(E)),!s||s.cwd===this.context.cwd){let C=J.join(this.context.cwd,Er.lockfile);ce.existsSync(C)||(await ce.writeFilePromise(C,""),h.push(C));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(ue=>`${ue} -`).join(""),I=J.join(this.context.cwd,".gitignore");ce.existsSync(I)||(await ce.writeFilePromise(I,b),h.push(I));let N=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(ue=>`${ue} -`).join(""),U=J.join(this.context.cwd,".gitattributes");ce.existsSync(U)||(await ce.writeFilePromise(U,N),h.push(U));let W={"*":{charset:"utf-8",endOfLine:"lf",indentSize:2,indentStyle:"space",insertFinalNewline:!0}};je.mergeIntoTarget(W,r.get("initEditorConfig"));let ee=`root = true -`;for(let[ue,le]of Object.entries(W)){ee+=` -[${ue}] -`;for(let[me,pe]of Object.entries(le)){let Be=me.replace(/[A-Z]/g,Ce=>`_${Ce.toLowerCase()}`);ee+=`${Be} = ${pe} -`}}let ie=J.join(this.context.cwd,".editorconfig");ce.existsSync(ie)||(await ce.writeFilePromise(ie,ee),h.push(ie)),await this.cli.run(["install"],{quiet:!0}),await this.initialize(),ce.existsSync(J.join(this.context.cwd,".git"))||(await qr.execvp("git",["init"],{cwd:this.context.cwd}),await qr.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await qr.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};var nw=class extends z0{constructor(){super(...arguments);this.initializer=ge.String();this.argv=ge.Proxy()}static{this.paths=[["init"]]}async initialize(){this.context.stdout.write(` -`),await this.cli.run(["dlx",this.initializer,...this.argv],{quiet:!0})}};var lut={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:[z0,nw]},cut=lut;var HW={};Vt(HW,{SearchCommand:()=>Iw,UpgradeInteractiveCommand:()=>Cw,default:()=>ygt});Ge();var xEe=ut(Ie("os"));function iw({stdout:t}){if(xEe.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")}Yt();var HIe=ut(l9()),c9={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},oAt=(0,HIe.default)(c9.appId,c9.apiKey).initIndex(c9.indexName),u9=async(t,e=0)=>await oAt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var CD=["regular","dev","peer"],Iw=class extends ft{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(){iw(this.context);let{Gem:e}=await Promise.resolve().then(()=>(qF(),kW)),{ScrollableItems:r}=await Promise.resolve().then(()=>(JF(),VF)),{useKeypress:s}=await Promise.resolve().then(()=>(yD(),m2e)),{useMinistore:a}=await Promise.resolve().then(()=>(OW(),NW)),{renderForm:n}=await Promise.resolve().then(()=>(XF(),ZF)),{default:c}=await Promise.resolve().then(()=>ut(P2e())),{Box:f,Text:p}=await Promise.resolve().then(()=>ut(Wc())),{default:h,useEffect:E,useState:C}=await Promise.resolve().then(()=>ut(hn())),S=await ze.find(this.context.cwd,this.context.plugins),b=()=>h.createElement(f,{flexDirection:"row"},h.createElement(f,{flexDirection:"column",width:48},h.createElement(f,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(f,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(f,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(f,{flexDirection:"column"},h.createElement(f,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(f,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),I=()=>h.createElement(h.Fragment,null,h.createElement(f,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(f,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(f,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),T=()=>h.createElement(f,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),N=({hit:pe,active:Be})=>{let[Ce,g]=a(pe.name,null);s({active:Be},(Ae,se)=>{if(se.name!=="space")return;if(!Ce){g(CD[0]);return}let X=CD.indexOf(Ce)+1;X===CD.length?g(null):g(CD[X])},[Ce,g]);let we=G.parseIdent(pe.name),ye=G.prettyIdent(S,we);return h.createElement(f,null,h.createElement(f,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},ye)),h.createElement(f,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},pe.owner.name)),h.createElement(f,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},pe.version)),h.createElement(f,{width:16,marginLeft:1},h.createElement(p,null,pe.humanDownloadsLast30Days)))},U=({name:pe,active:Be})=>{let[Ce]=a(pe,null),g=G.parseIdent(pe);return h.createElement(f,null,h.createElement(f,{width:47},h.createElement(p,{bold:!0}," - ",G.prettyIdent(S,g))),CD.map(we=>h.createElement(f,{key:we,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:Ce===we})," ",h.createElement(p,{bold:!0},we)))))},W=()=>h.createElement(f,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),ie=await n(({useSubmit:pe})=>{let Be=a();pe(Be);let Ce=Array.from(Be.keys()).filter(j=>Be.get(j)!==null),[g,we]=C(""),[ye,Ae]=C(0),[se,X]=C([]),De=j=>{j.match(/\t| /)||we(j)},Te=async()=>{Ae(0);let j=await u9(g);j.query===g&&X(j.hits)},mt=async()=>{let j=await u9(g,ye+1);j.query===g&&j.page-1===ye&&(Ae(j.page),X([...se,...j.hits]))};return E(()=>{g?Te():X([])},[g]),h.createElement(f,{flexDirection:"column"},h.createElement(b,null),h.createElement(f,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(f,{width:41},h.createElement(c,{value:g,onChange:De,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(I,null)),se.length?h.createElement(r,{radius:2,loop:!1,children:se.map(j=>h.createElement(N,{key:j.name,hit:j,active:!1})),willReachEnd:mt}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(f,{flexDirection:"row",marginTop:1},h.createElement(f,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(T,null)),Ce.length?Ce.map(j=>h.createElement(U,{key:j,name:j,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(W,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ie>"u")return 1;let ue=Array.from(ie.keys()).filter(pe=>ie.get(pe)==="regular"),le=Array.from(ie.keys()).filter(pe=>ie.get(pe)==="dev"),me=Array.from(ie.keys()).filter(pe=>ie.get(pe)==="peer");return ue.length&&await this.cli.run(["add",...ue]),le.length&&await this.cli.run(["add","--dev",...le]),me&&await this.cli.run(["add","--peer",...me]),0}};Ge();Yt();GG();var F2e=ut(Ai()),T2e=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/;function N2e(t,e){return t.length>0?[t.slice(0,e)].concat(N2e(t.slice(e),e)):[]}var Cw=class extends ft{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(){iw(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(R2e(),Q2e)),{Pad:r}=await Promise.resolve().then(()=>(_W(),k2e)),{ScrollableItems:s}=await Promise.resolve().then(()=>(JF(),VF)),{useMinistore:a}=await Promise.resolve().then(()=>(OW(),NW)),{renderForm:n}=await Promise.resolve().then(()=>(XF(),ZF)),{Box:c,Text:f}=await Promise.resolve().then(()=>ut(Wc())),{default:p,useEffect:h,useRef:E,useState:C}=await Promise.resolve().then(()=>ut(hn())),S=await ze.find(this.context.cwd,this.context.plugins),{project:b,workspace:I}=await Rt.find(S,this.context.cwd),T=await Kr.find(S);if(!I)throw new ar(b.cwd,this.context.cwd);await b.restoreInstallState({restoreResolutions:!1});let N=this.context.stdout.rows-7,U=(we,ye)=>{let Ae=pde(we,ye),se="";for(let X of Ae)X.added?se+=he.pretty(S,X.value,"green"):X.removed||(se+=X.value);return se},W=(we,ye)=>{if(we===ye)return ye;let Ae=G.parseRange(we),se=G.parseRange(ye),X=Ae.selector.match(T2e),De=se.selector.match(T2e);if(!X||!De)return U(we,ye);let Te=["gray","red","yellow","green","magenta"],mt=null,j="";for(let rt=1;rt{let se=await Zu.fetchDescriptorFrom(we,Ae,{project:b,cache:T,preserveModifier:ye,workspace:I});return se!==null?se.range:we.range},ie=async we=>{let ye=F2e.default.valid(we.range)?`^${we.range}`:we.range,[Ae,se]=await Promise.all([ee(we,we.range,ye).catch(()=>null),ee(we,we.range,"latest").catch(()=>null)]),X=[{value:null,label:we.range}];return Ae&&Ae!==we.range?X.push({value:Ae,label:W(we.range,Ae)}):X.push({value:null,label:""}),se&&se!==Ae&&se!==we.range?X.push({value:se,label:W(we.range,se)}):X.push({value:null,label:""}),X},ue=()=>p.createElement(c,{flexDirection:"row"},p.createElement(c,{flexDirection:"column",width:49},p.createElement(c,{marginLeft:1},p.createElement(f,null,"Press ",p.createElement(f,{bold:!0,color:"cyanBright"},""),"/",p.createElement(f,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(c,{marginLeft:1},p.createElement(f,null,"Press ",p.createElement(f,{bold:!0,color:"cyanBright"},""),"/",p.createElement(f,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(c,{flexDirection:"column"},p.createElement(c,{marginLeft:1},p.createElement(f,null,"Press ",p.createElement(f,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(c,{marginLeft:1},p.createElement(f,null,"Press ",p.createElement(f,{bold:!0,color:"cyanBright"},"")," to abort.")))),le=()=>p.createElement(c,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(c,{width:50},p.createElement(f,{bold:!0},p.createElement(f,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(c,{width:17},p.createElement(f,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(c,{width:17},p.createElement(f,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(c,{width:17},p.createElement(f,{bold:!0,underline:!0,color:"gray"},"Latest"))),me=({active:we,descriptor:ye,suggestions:Ae})=>{let[se,X]=a(ye.descriptorHash,null),De=G.stringifyIdent(ye),Te=Math.max(0,45-De.length);return p.createElement(p.Fragment,null,p.createElement(c,null,p.createElement(c,{width:45},p.createElement(f,{bold:!0},G.prettyIdent(S,ye)),p.createElement(r,{active:we,length:Te})),p.createElement(e,{active:we,options:Ae,value:se,skewer:!0,onChange:X,sizes:[17,17,17]})))},pe=({dependencies:we})=>{let[ye,Ae]=C(we.map(()=>null)),se=E(!0),X=async De=>{let Te=await ie(De);return Te.filter(mt=>mt.label!=="").length<=1?null:{descriptor:De,suggestions:Te}};return h(()=>()=>{se.current=!1},[]),h(()=>{let De=Math.trunc(N*1.75),Te=we.slice(0,De),mt=we.slice(De),j=N2e(mt,N),rt=Te.map(X).reduce(async(Fe,Ne)=>{await Fe;let be=await Ne;be!==null&&se.current&&Ae(Ve=>{let ke=Ve.findIndex(Ue=>Ue===null),it=[...Ve];return it[ke]=be,it})},Promise.resolve());j.reduce((Fe,Ne)=>Promise.all(Ne.map(be=>Promise.resolve().then(()=>X(be)))).then(async be=>{be=be.filter(Ve=>Ve!==null),await Fe,se.current&&Ae(Ve=>{let ke=Ve.findIndex(it=>it===null);return Ve.slice(0,ke).concat(be).concat(Ve.slice(ke+be.length))})}),rt).then(()=>{se.current&&Ae(Fe=>Fe.filter(Ne=>Ne!==null))})},[]),ye.length?p.createElement(s,{radius:N>>1,children:ye.map((De,Te)=>De!==null?p.createElement(me,{key:Te,active:!1,descriptor:De.descriptor,suggestions:De.suggestions}):p.createElement(f,{key:Te},"Loading..."))}):p.createElement(f,null,"No upgrades found")},Ce=await n(({useSubmit:we})=>{we(a());let ye=new Map;for(let se of b.workspaces)for(let X of["dependencies","devDependencies"])for(let De of se.manifest[X].values())b.tryWorkspaceByDescriptor(De)===null&&(De.range.startsWith("link:")||ye.set(De.descriptorHash,De));let Ae=je.sortMap(ye.values(),se=>G.stringifyDescriptor(se));return p.createElement(c,{flexDirection:"column"},p.createElement(ue,null),p.createElement(le,null),p.createElement(pe,{dependencies:Ae}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Ce>"u")return 1;let g=!1;for(let we of b.workspaces)for(let ye of["dependencies","devDependencies"]){let Ae=we.manifest[ye];for(let se of Ae.values()){let X=Ce.get(se.descriptorHash);typeof X<"u"&&X!==null&&(Ae.set(se.identHash,G.makeDescriptor(se,X)),g=!0)}}return g?await b.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:T}):0}};var mgt={commands:[Iw,Cw]},ygt=mgt;var GW={};Vt(GW,{default:()=>wgt});Ge();var BD="jsr:";Ge();Ge();function ww(t){let e=t.range.slice(4);if(Fr.validRange(e))return G.makeDescriptor(t,`npm:${G.stringifyIdent(G.wrapIdentIntoScope(t,"jsr"))}@${e}`);let r=G.tryParseDescriptor(e,!0);if(r!==null)return G.makeDescriptor(t,`npm:${G.stringifyIdent(G.wrapIdentIntoScope(r,"jsr"))}@${r.range}`);throw new Error(`Invalid range: ${t.range}`)}function Bw(t){return G.makeLocator(G.wrapIdentIntoScope(t,"jsr"),`npm:${t.reference.slice(4)}`)}function jW(t){return G.makeLocator(G.unwrapIdentFromScope(t,"jsr"),`jsr:${t.reference.slice(4)}`)}var $F=class{supports(e,r){return e.reference.startsWith(BD)}getLocalPath(e,r){let s=Bw(e);return r.fetcher.getLocalPath(s,r)}fetch(e,r){let s=Bw(e);return r.fetcher.fetch(s,r)}};var eN=class{supportsDescriptor(e,r){return!!e.range.startsWith(BD)}supportsLocator(e,r){return!!e.reference.startsWith(BD)}shouldPersistResolution(e,r){let s=Bw(e);return r.resolver.shouldPersistResolution(s,r)}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{inner:ww(e)}}async getCandidates(e,r,s){let a=s.project.configuration.normalizeDependency(ww(e));return(await s.resolver.getCandidates(a,r,s)).map(c=>jW(c))}async getSatisfying(e,r,s,a){let n=a.project.configuration.normalizeDependency(ww(e));return a.resolver.getSatisfying(n,r,s,a)}async resolve(e,r){let s=Bw(e),a=await r.resolver.resolve(s,r);return{...a,...jW(a)}}};var Egt=["dependencies","devDependencies","peerDependencies"];function Igt(t,e){for(let r of Egt)for(let s of t.manifest.getForScope(r).values()){if(!s.range.startsWith("jsr:"))continue;let a=ww(s),n=r==="dependencies"?G.makeDescriptor(s,"unknown"):null,c=n!==null&&t.manifest.ensureDependencyMeta(n).optional?"optionalDependencies":r;e[c][G.stringifyIdent(s)]=a.range}}var Cgt={hooks:{beforeWorkspacePacking:Igt},resolvers:[eN],fetchers:[$F]},wgt=Cgt;var qW={};Vt(qW,{LinkFetcher:()=>vD,LinkResolver:()=>SD,PortalFetcher:()=>DD,PortalResolver:()=>PD,default:()=>vgt});Ge();Dt();var rh="portal:",nh="link:";var vD=class{supports(e,r){return!!e.reference.startsWith(nh)}getLocalPath(e,r){let{parentLocator:s,path:a}=G.parseFileStyleRange(e.reference,{protocol:nh});if(J.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(s,r);return n===null?null:J.resolve(n,a)}async fetch(e,r){let{parentLocator:s,path:a}=G.parseFileStyleRange(e.reference,{protocol:nh}),n=J.isAbsolute(a)?{packageFs:new Sn(vt.root),prefixPath:vt.dot,localPath:vt.root}:await r.fetcher.fetch(s,r),c=n.localPath?{packageFs:new Sn(vt.root),prefixPath:J.relative(vt.root,n.localPath),localPath:vt.root}:n;n!==c&&n.releaseFs&&n.releaseFs();let f=c.packageFs,p=J.resolve(c.localPath??c.packageFs.getRealPath(),c.prefixPath,a);return n.localPath?{packageFs:new Sn(p,{baseFs:f}),releaseFs:c.releaseFs,prefixPath:vt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new Hf(p,{baseFs:f}),releaseFs:c.releaseFs,prefixPath:vt.dot,discardFromLookup:!0}}};Ge();Dt();var SD=class{supportsDescriptor(e,r){return!!e.range.startsWith(nh)}supportsLocator(e,r){return!!e.reference.startsWith(nh)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){return G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){let a=e.range.slice(nh.length);return[G.makeLocator(e,`${nh}${fe.toPortablePath(a)}`)]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.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}}};Ge();Dt();var DD=class{supports(e,r){return!!e.reference.startsWith(rh)}getLocalPath(e,r){let{parentLocator:s,path:a}=G.parseFileStyleRange(e.reference,{protocol:rh});if(J.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(s,r);return n===null?null:J.resolve(n,a)}async fetch(e,r){let{parentLocator:s,path:a}=G.parseFileStyleRange(e.reference,{protocol:rh}),n=J.isAbsolute(a)?{packageFs:new Sn(vt.root),prefixPath:vt.dot,localPath:vt.root}:await r.fetcher.fetch(s,r),c=n.localPath?{packageFs:new Sn(vt.root),prefixPath:J.relative(vt.root,n.localPath),localPath:vt.root}:n;n!==c&&n.releaseFs&&n.releaseFs();let f=c.packageFs,p=J.resolve(c.localPath??c.packageFs.getRealPath(),c.prefixPath,a);return n.localPath?{packageFs:new Sn(p,{baseFs:f}),releaseFs:c.releaseFs,prefixPath:vt.dot,localPath:p}:{packageFs:new Hf(p,{baseFs:f}),releaseFs:c.releaseFs,prefixPath:vt.dot}}};Ge();Ge();Dt();var PD=class{supportsDescriptor(e,r){return!!e.range.startsWith(rh)}supportsLocator(e,r){return!!e.reference.startsWith(rh)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){return G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){let a=e.range.slice(rh.length);return[G.makeLocator(e,`${rh}${fe.toPortablePath(a)}`)]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.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 s=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Ut.find(s.prefixPath,{baseFs:s.packageFs}),s.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 Bgt={fetchers:[vD,DD],resolvers:[SD,PD]},vgt=Bgt;var PY={};Vt(PY,{NodeModulesLinker:()=>jD,NodeModulesMode:()=>BY,PnpLooseLinker:()=>GD,default:()=>Hdt});Dt();Ge();Dt();Dt();var YW=(t,e)=>`${t}@${e}`,O2e=(t,e)=>{let r=e.indexOf("#"),s=r>=0?e.substring(r+1):e;return YW(t,s)};var M2e=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),s=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:s,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},c;n.debugLevel>=0&&(c=Date.now());let f=Qgt(t,n),p=!1,h=0;do{let E=VW(f,[f],new Set([f.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()-c}ms, rounds: ${h}`),n.debugLevel>=1){let E=bD(f);if(VW(f,[f],new Set([f.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: -${E}, next tree: -${bD(f)}`);let S=U2e(f);if(S)throw new Error(`${S}, after hoisting finished: -${bD(f)}`)}return n.debugLevel>=2&&console.log(bD(f)),Rgt(f)},Sgt=t=>{let e=t[t.length-1],r=new Map,s=new Set,a=n=>{if(!s.has(n)){s.add(n);for(let c of n.hoistedDependencies.values())r.set(c.name,c);for(let c of n.dependencies.values())n.peerNames.has(c.name)||a(c)}};return a(e),r},Dgt=t=>{let e=t[t.length-1],r=new Map,s=new Set,a=new Set,n=(c,f)=>{if(s.has(c))return;s.add(c);for(let h of c.hoistedDependencies.values())if(!f.has(h.name)){let E;for(let C of t)E=C.dependencies.get(h.name),E&&r.set(E.name,E)}let p=new Set;for(let h of c.dependencies.values())p.add(h.name);for(let h of c.dependencies.values())c.peerNames.has(h.name)||n(h,p)};return n(e,a),r},L2e=(t,e)=>{if(e.decoupled)return e;let{name:r,references:s,ident:a,locator:n,dependencies:c,originalDependencies:f,hoistedDependencies:p,peerNames:h,reasons:E,isHoistBorder:C,hoistPriority:S,dependencyKind:b,hoistedFrom:I,hoistedTo:T}=e,N={name:r,references:new Set(s),ident:a,locator:n,dependencies:new Map(c),originalDependencies:new Map(f),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(E),decoupled:!0,isHoistBorder:C,hoistPriority:S,dependencyKind:b,hoistedFrom:new Map(I),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},Pgt=(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 s=Array.from(e.keys());s.sort((a,n)=>{let c=e.get(a),f=e.get(n);if(f.hoistPriority!==c.hoistPriority)return f.hoistPriority-c.hoistPriority;{let p=c.dependents.size+c.peerDependents.size;return f.dependents.size+f.peerDependents.size-p}});for(let a of s){let n=a.substring(0,a.indexOf("@",1)),c=a.substring(n.length+1);if(!t.peerNames.has(n)){let f=r.get(n);f||(f=[],r.set(n,f)),f.indexOf(c)<0&&f.push(c)}}return r},WW=t=>{let e=new Set,r=(s,a=new Set)=>{if(!a.has(s)){a.add(s);for(let n of s.peerNames)if(!t.peerNames.has(n)){let c=t.dependencies.get(n);c&&!e.has(c)&&r(c,a)}e.add(s)}};for(let s of t.dependencies.values())t.peerNames.has(s.name)||r(s);return e},VW=(t,e,r,s,a,n=new Set)=>{let c=e[e.length-1];if(n.has(c))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(c);let f=Tgt(c),p=Pgt(c,f),h=t==c?new Map:a.fastLookupPossible?Sgt(e):Dgt(e),E,C=!1,S=!1,b=new Map(Array.from(p.entries()).map(([T,N])=>[T,N[0]])),I=new Map;do{let T=kgt(t,e,r,h,b,p,s,I,a);T.isGraphChanged&&(S=!0),T.anotherRoundNeeded&&(C=!0),E=!1;for(let[N,U]of p)U.length>1&&!c.dependencies.has(N)&&(b.delete(N),U.shift(),b.set(N,U[0]),E=!0)}while(E);for(let T of c.dependencies.values())if(!c.peerNames.has(T.name)&&!r.has(T.locator)){r.add(T.locator);let N=VW(t,[...e,T],r,I,a);N.isGraphChanged&&(S=!0),N.anotherRoundNeeded&&(C=!0),r.delete(T.locator)}return{anotherRoundNeeded:C,isGraphChanged:S}},bgt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},xgt=(t,e,r,s,a,n,c,f,{outputReason:p,fastLookupPossible:h})=>{let E,C=null,S=new Set;p&&(E=`${Array.from(e).map(N=>yo(N)).join("\u2192")}`);let b=r[r.length-1],T=!(s.ident===b.ident);if(p&&!T&&(C="- self-reference"),T&&(T=s.dependencyKind!==1,p&&!T&&(C="- workspace")),T&&s.dependencyKind===2&&(T=!bgt(s),p&&!T&&(C="- external soft link with unhoisted dependencies")),T&&(T=!t.peerNames.has(s.name),p&&!T&&(C=`- cannot shadow peer: ${yo(t.originalDependencies.get(s.name).locator)} at ${E}`)),T){let N=!1,U=a.get(s.name);if(N=!U||U.ident===s.ident,p&&!N&&(C=`- filled by: ${yo(U.locator)} at ${E}`),N)for(let W=r.length-1;W>=1;W--){let ie=r[W].dependencies.get(s.name);if(ie&&ie.ident!==s.ident){N=!1;let ue=f.get(b);ue||(ue=new Set,f.set(b,ue)),ue.add(s.name),p&&(C=`- filled by ${yo(ie.locator)} at ${r.slice(0,W).map(le=>yo(le.locator)).join("\u2192")}`);break}}T=N}if(T&&(T=n.get(s.name)===s.ident,p&&!T&&(C=`- filled by: ${yo(c.get(s.name)[0])} at ${E}`)),T){let N=!0,U=new Set(s.peerNames);for(let W=r.length-1;W>=1;W--){let ee=r[W];for(let ie of U){if(ee.peerNames.has(ie)&&ee.originalDependencies.has(ie))continue;let ue=ee.dependencies.get(ie);ue&&t.dependencies.get(ie)!==ue&&(W===r.length-1?S.add(ue):(S=null,N=!1,p&&(C=`- peer dependency ${yo(ue.locator)} from parent ${yo(ee.locator)} was not hoisted to ${E}`))),U.delete(ie)}if(!N)break}T=N}if(T&&!h)for(let N of s.hoistedDependencies.values()){let U=a.get(N.name)||t.dependencies.get(N.name);if(!U||N.ident!==U.ident){T=!1,p&&(C=`- previously hoisted dependency mismatch, needed: ${yo(N.locator)}, available: ${yo(U?.locator)}`);break}}return S!==null&&S.size>0?{isHoistable:2,dependsOn:S,reason:C}:{isHoistable:T?0:1,reason:C}},tN=t=>`${t.name}@${t.locator}`,kgt=(t,e,r,s,a,n,c,f,p)=>{let h=e[e.length-1],E=new Set,C=!1,S=!1,b=(U,W,ee,ie,ue)=>{if(E.has(ie))return;let le=[...W,tN(ie)],me=[...ee,tN(ie)],pe=new Map,Be=new Map;for(let Ae of WW(ie)){let se=xgt(h,r,[h,...U,ie],Ae,s,a,n,f,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(Be.set(Ae,se),se.isHoistable===2)for(let X of se.dependsOn){let De=pe.get(X.name)||new Set;De.add(Ae.name),pe.set(X.name,De)}}let Ce=new Set,g=(Ae,se,X)=>{if(!Ce.has(Ae)){Ce.add(Ae),Be.set(Ae,{isHoistable:1,reason:X});for(let De of pe.get(Ae.name)||[])g(ie.dependencies.get(De),se,p.debugLevel>=2?`- peer dependency ${yo(Ae.locator)} from parent ${yo(ie.locator)} was not hoisted`:"")}};for(let[Ae,se]of Be)se.isHoistable===1&&g(Ae,se,se.reason);let we=!1;for(let Ae of Be.keys())if(!Ce.has(Ae)){S=!0;let se=c.get(ie);se&&se.has(Ae.name)&&(C=!0),we=!0,ie.dependencies.delete(Ae.name),ie.hoistedDependencies.set(Ae.name,Ae),ie.reasons.delete(Ae.name);let X=h.dependencies.get(Ae.name);if(p.debugLevel>=2){let De=Array.from(W).concat([ie.locator]).map(mt=>yo(mt)).join("\u2192"),Te=h.hoistedFrom.get(Ae.name);Te||(Te=[],h.hoistedFrom.set(Ae.name,Te)),Te.push(De),ie.hoistedTo.set(Ae.name,Array.from(e).map(mt=>yo(mt.locator)).join("\u2192"))}if(!X)h.ident!==Ae.ident&&(h.dependencies.set(Ae.name,Ae),ue.add(Ae));else for(let De of Ae.references)X.references.add(De)}if(ie.dependencyKind===2&&we&&(C=!0),p.check){let Ae=U2e(t);if(Ae)throw new Error(`${Ae}, after hoisting dependencies of ${[h,...U,ie].map(se=>yo(se.locator)).join("\u2192")}: -${bD(t)}`)}let ye=WW(ie);for(let Ae of ye)if(Ce.has(Ae)){let se=Be.get(Ae);if((a.get(Ae.name)===Ae.ident||!ie.reasons.has(Ae.name))&&se.isHoistable!==0&&ie.reasons.set(Ae.name,se.reason),!Ae.isHoistBorder&&me.indexOf(tN(Ae))<0){E.add(ie);let De=L2e(ie,Ae);b([...U,ie],le,me,De,T),E.delete(ie)}}},I,T=new Set(WW(h)),N=Array.from(e).map(U=>tN(U));do{I=T,T=new Set;for(let U of I){if(U.locator===h.locator||U.isHoistBorder)continue;let W=L2e(h,U);b([],Array.from(r),N,W,T)}}while(T.size>0);return{anotherRoundNeeded:C,isGraphChanged:S}},U2e=t=>{let e=[],r=new Set,s=new Set,a=(n,c,f)=>{if(r.has(n)||(r.add(n),s.has(n)))return;let p=new Map(c);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),C=()=>`${Array.from(s).concat([n]).map(S=>yo(S.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let S=c.get(h.name);(S!==E||!S||S.ident!==h.ident)&&e.push(`${C()} - broken peer promise: expected ${h.ident} but found ${S&&S.ident}`)}else{let S=f.hoistedFrom.get(n.name),b=n.hoistedTo.get(h.name),I=`${S?` hoisted from ${S.join(", ")}`:""}`,T=`${b?` hoisted to ${b}`:""}`,N=`${C()}${I}`;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`)}}s.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);s.delete(n)};return a(t,t.dependencies,t),e.join(` -`)},Qgt=(t,e)=>{let{identName:r,name:s,reference:a,peerNames:n}=t,c={name:s,references:new Set([a]),locator:YW(r,a),ident:O2e(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},f=new Map([[t,c]]),p=(h,E)=>{let C=f.get(h),S=!!C;if(!C){let{name:b,identName:I,reference:T,peerNames:N,hoistPriority:U,dependencyKind:W}=h,ee=e.hoistingLimits.get(E.locator);C={name:b,references:new Set([T]),locator:YW(I,T),ident:O2e(I,T),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(N),reasons:new Map,decoupled:!0,isHoistBorder:ee?ee.has(b):!1,hoistPriority:U||0,dependencyKind:W||0,hoistedFrom:new Map,hoistedTo:new Map},f.set(h,C)}if(E.dependencies.set(h.name,C),E.originalDependencies.set(h.name,C),S){let b=new Set,I=T=>{if(!b.has(T)){b.add(T),T.decoupled=!1;for(let N of T.dependencies.values())T.peerNames.has(N.name)||I(N)}};I(C)}else for(let b of h.dependencies)p(b,C)};for(let h of t.dependencies)p(h,c);return c},JW=t=>t.substring(0,t.indexOf("@",1)),Rgt=t=>{let e={name:t.name,identName:JW(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),s=(a,n,c)=>{let f=r.has(a),p;if(n===a)p=c;else{let{name:h,references:E,locator:C}=a;p={name:h,identName:JW(C),references:E,dependencies:new Set}}if(c.dependencies.add(p),!f){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||s(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())s(a,t,e);return e},Tgt=t=>{let e=new Map,r=new Set([t]),s=c=>`${c.name}@${c.ident}`,a=c=>{let f=s(c),p=e.get(f);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(f,p)),p},n=(c,f)=>{let p=!!r.has(f);if(a(f).dependents.add(c.ident),!p){r.add(f);for(let E of f.dependencies.values()){let C=a(E);C.hoistPriority=Math.max(C.hoistPriority,E.hoistPriority),f.peerNames.has(E.name)?C.peerDependents.add(f.ident):n(f,E)}}};for(let c of t.dependencies.values())t.peerNames.has(c.name)||n(t,c);return e},yo=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let s=t.substring(e+1);if(s==="workspace:.")return".";if(s){let a=(s.indexOf("#")>0?s.split("#")[1]:s).replace("npm:","");return s.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`};var bD=t=>{let e=0,r=(a,n,c="")=>{if(e>5e4||n.has(a))return"";e++;let f=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":"")+(S!==E.name?`a:${E.name}:`:"")+yo(E.locator)+(C?` ${C}`:"")} -`,p+=r(E,n,`${c}${h5e4?` -Tree is too large, part of the tree has been dunped -`:"")};var xD=(s=>(s.WORKSPACES="workspaces",s.DEPENDENCIES="dependencies",s.NONE="none",s))(xD||{}),_2e="node_modules",rg="$wsroot$";var kD=(t,e)=>{let{packageTree:r,hoistingLimits:s,errors:a,preserveSymlinksRequired:n}=Ngt(t,e),c=null;if(a.length===0){let f=M2e(r,{hoistingLimits:s});c=Lgt(t,f,e)}return{tree:c,errors:a,preserveSymlinksRequired:n}},pA=t=>`${t.name}@${t.reference}`,zW=t=>{let e=new Map;for(let[r,s]of t.entries())if(!s.dirList){let a=e.get(s.locator);a||(a={target:s.target,linkType:s.linkType,locations:[],aliases:s.aliases},e.set(s.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((s,a)=>{let n=s.split(J.delimiter).length,c=a.split(J.delimiter).length;return a===s?0:n!==c?c-n:a>s?1:-1});return e},H2e=(t,e)=>{let r=G.isVirtualLocator(t)?G.devirtualizeLocator(t):t,s=G.isVirtualLocator(e)?G.devirtualizeLocator(e):e;return G.areLocatorsEqual(r,s)},KW=(t,e,r,s)=>{if(t.linkType!=="SOFT")return!1;let a=fe.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return J.contains(s,a)===null},Fgt=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 s=fe.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},c=t.getDependencyTreeRoots(),f=new Map,p=new Set,h=(S,b)=>{let I=pA(S);if(p.has(I))return;p.add(I);let T=t.getPackageInformation(S);if(T){let N=b?pA(b):"";if(pA(S)!==N&&T.linkType==="SOFT"&&!S.reference.startsWith("link:")&&!KW(T,S,t,s)){let U=j2e(T,S,t);(!f.get(U)||S.reference.startsWith("workspace:"))&&f.set(U,S)}for(let[U,W]of T.packageDependencies)W!==null&&(T.packagePeers.has(U)||h(t.getLocator(U,W),S))}};for(let S of c)h(S,null);let E=s.split(J.sep);for(let S of f.values()){let b=t.getPackageInformation(S),T=fe.toPortablePath(b.packageLocation.slice(0,-1)).split(J.sep).slice(E.length),N=n;for(let U of T){let W=N.children.get(U);W||(W={children:new Map},N.children.set(U,W)),N=W}N.workspaceLocator=S}let C=(S,b)=>{if(S.workspaceLocator){let I=pA(b),T=a.get(I);T||(T=new Set,a.set(I,T)),T.add(S.workspaceLocator)}for(let I of S.children.values())C(I,S.workspaceLocator||b)};for(let S of n.children.values())C(S,n.workspaceLocator);return a},Ngt=(t,e)=>{let r=[],s=!1,a=new Map,n=Fgt(t),c=t.getPackageInformation(t.topLevel);if(c===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let f=t.findPackageLocator(c.packageLocation);if(f===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=fe.toPortablePath(c.packageLocation.slice(0,-1)),h={name:f.name,identName:f.name,reference:f.reference,peerNames:c.packagePeers,dependencies:new Set,dependencyKind:1},E=new Map,C=(b,I)=>`${pA(I)}:${b}`,S=(b,I,T,N,U,W,ee,ie)=>{let ue=C(b,T),le=E.get(ue),me=!!le;!me&&T.name===f.name&&T.reference===f.reference&&(le=h,E.set(ue,h));let pe=KW(I,T,t,p);if(!le){let Ae=0;pe?Ae=2:I.linkType==="SOFT"&&T.name.endsWith(rg)&&(Ae=1),le={name:b,identName:T.name,reference:T.reference,dependencies:new Set,peerNames:Ae===1?new Set:I.packagePeers,dependencyKind:Ae},E.set(ue,le)}let Be;if(pe?Be=2:U.linkType==="SOFT"?Be=1:Be=0,le.hoistPriority=Math.max(le.hoistPriority||0,Be),ie&&!pe){let Ae=pA({name:N.identName,reference:N.reference}),se=a.get(Ae)||new Set;a.set(Ae,se),se.add(le.name)}let Ce=new Map(I.packageDependencies);if(e.project){let Ae=e.project.workspacesByCwd.get(fe.toPortablePath(I.packageLocation.slice(0,-1)));if(Ae){let se=new Set([...Array.from(Ae.manifest.peerDependencies.values(),X=>G.stringifyIdent(X)),...Array.from(Ae.manifest.peerDependenciesMeta.keys())]);for(let X of se)Ce.has(X)||(Ce.set(X,W.get(X)||null),le.peerNames.add(X))}}let g=pA({name:T.name.replace(rg,""),reference:T.reference}),we=n.get(g);if(we)for(let Ae of we)Ce.set(`${Ae.name}${rg}`,Ae.reference);(I!==U||I.linkType!=="SOFT"||!pe&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(ee)))&&N.dependencies.add(le);let ye=T!==f&&I.linkType==="SOFT"&&!T.name.endsWith(rg)&&!pe;if(!me&&!ye){let Ae=new Map;for(let[se,X]of Ce)if(X!==null){let De=t.getLocator(se,X),Te=t.getLocator(se.replace(rg,""),X),mt=t.getPackageInformation(Te);if(mt===null)throw new Error("Assertion failed: Expected the package to have been registered");let j=KW(mt,De,t,p);if(e.validateExternalSoftLinks&&e.project&&j){mt.packageDependencies.size>0&&(s=!0);for(let[Ve,ke]of mt.packageDependencies)if(ke!==null){let it=G.parseLocator(Array.isArray(ke)?`${ke[0]}@${ke[1]}`:`${Ve}@${ke}`);if(pA(it)!==pA(De)){let Ue=Ce.get(Ve);if(Ue){let x=G.parseLocator(Array.isArray(Ue)?`${Ue[0]}@${Ue[1]}`:`${Ve}@${Ue}`);H2e(x,it)||r.push({messageName:71,text:`Cannot link ${G.prettyIdent(e.project.configuration,G.parseIdent(De.name))} into ${G.prettyLocator(e.project.configuration,G.parseLocator(`${T.name}@${T.reference}`))} dependency ${G.prettyLocator(e.project.configuration,it)} conflicts with parent dependency ${G.prettyLocator(e.project.configuration,x)}`})}else{let x=Ae.get(Ve);if(x){let w=x.target,P=G.parseLocator(Array.isArray(w)?`${w[0]}@${w[1]}`:`${Ve}@${w}`);H2e(P,it)||r.push({messageName:71,text:`Cannot link ${G.prettyIdent(e.project.configuration,G.parseIdent(De.name))} into ${G.prettyLocator(e.project.configuration,G.parseLocator(`${T.name}@${T.reference}`))} dependency ${G.prettyLocator(e.project.configuration,it)} conflicts with dependency ${G.prettyLocator(e.project.configuration,P)} from sibling portal ${G.prettyIdent(e.project.configuration,G.parseIdent(x.portal.name))}`})}else Ae.set(Ve,{target:it.reference,portal:De})}}}}let rt=e.hoistingLimitsByCwd?.get(ee),Fe=j?ee:J.relative(p,fe.toPortablePath(mt.packageLocation))||vt.dot,Ne=e.hoistingLimitsByCwd?.get(Fe);S(se,mt,De,le,I,Ce,Fe,rt==="dependencies"||Ne==="dependencies"||Ne==="workspaces")}}};return S(f.name,c,f,h,c,c.packageDependencies,vt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:s}};function j2e(t,e,r){let s=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return fe.toPortablePath(s||t.packageLocation)}function Ogt(t,e,r){let s=e.getLocator(t.name.replace(rg,""),t.reference),a=e.getPackageInformation(s);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:fe.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:j2e(a,t,e)}}var Lgt=(t,e,r)=>{let s=new Map,a=(E,C,S)=>{let{linkType:b,target:I}=Ogt(E,t,r);return{locator:pA(E),nodePath:C,target:I,linkType:b,aliases:S}},n=E=>{let[C,S]=E.split("/");return S?{scope:C,name:S}:{scope:null,name:C}},c=new Set,f=(E,C,S)=>{if(c.has(E))return;c.add(E);let b=Array.from(E.references).sort().join("#");for(let I of E.dependencies){let T=Array.from(I.references).sort().join("#");if(I.identName===E.identName.replace(rg,"")&&T===b)continue;let N=Array.from(I.references).sort(),U={name:I.identName,reference:N[0]},{name:W,scope:ee}=n(I.name),ie=ee?[ee,W]:[W],ue=J.join(C,_2e),le=J.join(ue,...ie),me=`${S}/${U.name}`,pe=a(U,S,N.slice(1)),Be=!1;if(pe.linkType==="SOFT"&&r.project){let Ce=r.project.workspacesByCwd.get(pe.target.slice(0,-1));Be=!!(Ce&&!Ce.manifest.name)}if(!I.name.endsWith(rg)&&!Be){let Ce=s.get(le);if(Ce){if(Ce.dirList)throw new Error(`Assertion failed: ${le} cannot merge dir node with leaf node`);{let ye=G.parseLocator(Ce.locator),Ae=G.parseLocator(pe.locator);if(Ce.linkType!==pe.linkType)throw new Error(`Assertion failed: ${le} cannot merge nodes with different link types ${Ce.nodePath}/${G.stringifyLocator(ye)} and ${S}/${G.stringifyLocator(Ae)}`);if(ye.identHash!==Ae.identHash)throw new Error(`Assertion failed: ${le} cannot merge nodes with different idents ${Ce.nodePath}/${G.stringifyLocator(ye)} and ${S}/s${G.stringifyLocator(Ae)}`);pe.aliases=[...pe.aliases,...Ce.aliases,G.parseLocator(Ce.locator).reference]}}s.set(le,pe);let g=le.split("/"),we=g.indexOf(_2e);for(let ye=g.length-1;we>=0&&ye>we;ye--){let Ae=fe.toPortablePath(g.slice(0,ye).join(J.sep)),se=g[ye],X=s.get(Ae);if(!X)s.set(Ae,{dirList:new Set([se])});else if(X.dirList){if(X.dirList.has(se))break;X.dirList.add(se)}}}f(I,pe.linkType==="SOFT"?pe.target:le,me)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return s.set(h,p),f(e,h,""),s};Ge();Ge();Dt();Dt();eA();wc();var gY={};Vt(gY,{PnpInstaller:()=>Gm,PnpLinker:()=>sg,UnplugCommand:()=>Sw,default:()=>pdt,getPnpPath:()=>og,jsInstallUtils:()=>gA,pnpUtils:()=>HD,quotePathIfNeeded:()=>DBe});Dt();var SBe=Ie("url");Ge();Ge();Dt();Dt();var G2e={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 Mgt(t,e,r){let s="";s+="[";for(let a=0,n=t.length;a"u"||(f!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=rN(p,h,e,r).replace(/^ +/g,""),f+=1)}return a+="}",a}function Hgt(t,e,r){let s=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ -`;let c=0;for(let f=0,p=s.length;f"u"||(c!==0&&(n+=",",n+=` -`),n+=a,n+=JSON.stringify(h),n+=": ",n+=rN(h,E,e,a).replace(/^ +/g,""),c+=1)}return c!==0&&(n+=` -`),n+=r,n+="}",n}function rN(t,e,r,s){let{next:a}=G2e[r],n=a[t]||a["*"];return q2e(e,n,s)}function q2e(t,e,r){let{collapsed:s}=G2e[e];return Array.isArray(t)?s?Mgt(t,e,r):Ugt(t,e,r):typeof t=="object"&&t!==null?s?_gt(t,e,r):Hgt(t,e,r):JSON.stringify(t)}function W2e(t){return q2e(t,"TOP_LEVEL","")}function QD(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let s=[];for(let n of e)s.push(r.map(c=>n(c)));let a=r.map((n,c)=>c);return a.sort((n,c)=>{for(let f of s){let p=f[n]f[c]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function jgt(t){let e=new Map,r=QD(t.fallbackExclusionList||[],[({name:s,reference:a})=>s,({name:s,reference:a})=>a]);for(let{name:s,reference:a}of r){let n=e.get(s);typeof n>"u"&&e.set(s,n=new Set),n.add(a)}return Array.from(e).map(([s,a])=>[s,Array.from(a)])}function Ggt(t){return QD(t.fallbackPool||[],([e])=>e)}function qgt(t){let e=[],r=t.dependencyTreeRoots.find(s=>t.packageRegistry.get(s.name)?.get(s.reference)?.packageLocation==="./");for(let[s,a]of QD(t.packageRegistry,([n])=>n===null?"0":`1${n}`)){if(s===null)continue;let n=[];e.push([s,n]);for(let[c,{packageLocation:f,packageDependencies:p,packagePeers:h,linkType:E,discardFromLookup:C}]of QD(a,([S])=>S===null?"0":`1${S}`)){if(c===null)continue;let S=[];s!==null&&c!==null&&!p.has(s)&&S.push([s,c]);for(let[U,W]of p)S.push([U,W]);let b=QD(S,([U])=>U),I=h&&h.size>0?Array.from(h):void 0,N={packageLocation:f,packageDependencies:b,packagePeers:I,linkType:E,discardFromLookup:C||void 0};n.push([c,N]),r&&s===r.name&&c===r.reference&&e.unshift([null,[[null,N]]])}}return e}function RD(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,pnpZipBackend:t.pnpZipBackend,fallbackExclusionList:jgt(t),fallbackPool:Ggt(t),packageRegistryData:qgt(t)}}var J2e=ut(V2e());function K2e(t,e){return[t?`${t} -`:"",`/* eslint-disable */ -`,`// @ts-nocheck -`,`"use strict"; -`,` -`,e,` -`,(0,J2e.default)()].join("")}function Wgt(t){return JSON.stringify(t,null,2)}function Ygt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ -`)}'`}function Vgt(t){return[`const RAW_RUNTIME_STATE = -`,`${Ygt(W2e(t))}; - -`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { -`,` return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); -`,`} -`].join("")}function Jgt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { -`,` const fs = require('fs'); -`,` const path = require('path'); -`,` const pnpDataFilepath = path.resolve(__dirname, ${JSON.stringify(Er.pnpData)}); -`,` return hydrateRuntimeState(JSON.parse(fs.readFileSync(pnpDataFilepath, 'utf8')), {basePath: basePath || __dirname}); -`,`} -`].join("")}function z2e(t){let e=RD(t),r=Vgt(e);return K2e(t.shebang,r)}function Z2e(t){let e=RD(t),r=Jgt(),s=K2e(t.shebang,r);return{dataFile:Wgt(e),loaderFile:s}}Dt();function XW(t,{basePath:e}){let r=fe.toPortablePath(e),s=J.resolve(r),a=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,n=new Map,c=new Map(t.packageRegistryData.map(([C,S])=>[C,new Map(S.map(([b,I])=>{if(C===null!=(b===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let T=I.discardFromLookup??!1,N={name:C,reference:b},U=n.get(I.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&T,T||(U.locator=N)):n.set(I.packageLocation,{locator:N,discardFromLookup:T});let W=null;return[b,{packageDependencies:new Map(I.packageDependencies),packagePeers:new Set(I.packagePeers),linkType:I.linkType,discardFromLookup:T,get packageLocation(){return W||(W=J.join(s,I.packageLocation))}}]}))])),f=new Map(t.fallbackExclusionList.map(([C,S])=>[C,new Set(S)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,E=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:E,fallbackExclusionList:f,pnpZipBackend:t.pnpZipBackend,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:c}}Dt();Dt();var sh=Ie("module"),jm=Ie("url"),lY=Ie("util");var ta=Ie("url");var tBe=ut(Ie("assert"));var $W=Array.isArray,TD=JSON.stringify,FD=Object.getOwnPropertyNames,Hm=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),eY=(t,e)=>RegExp.prototype.exec.call(t,e),tY=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),ng=(t,...e)=>String.prototype.endsWith.apply(t,e),rY=(t,...e)=>String.prototype.includes.apply(t,e),nY=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),ND=(t,...e)=>String.prototype.indexOf.apply(t,e),X2e=(t,...e)=>String.prototype.replace.apply(t,e),ig=(t,...e)=>String.prototype.slice.apply(t,e),hA=(t,...e)=>String.prototype.startsWith.apply(t,e),$2e=Map,eBe=JSON.parse;function OD(t,e,r){return class extends r{constructor(...s){super(e(...s)),this.code=t,this.name=`${r.name} [${t}]`}}}var rBe=OD("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),iY=OD("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),nBe=OD("ERR_INVALID_PACKAGE_TARGET",(t,e,r,s=!1,a=void 0)=>{let n=typeof r=="string"&&!s&&r.length&&!hA(r,"./");return e==="."?((0,tBe.default)(s===!1),`Invalid "exports" main target ${TD(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${s?"imports":"exports"}" target ${TD(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),LD=OD("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),iBe=OD("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 iN=Ie("url");function sBe(t,e){let r=Object.create(null);for(let s=0;se):t+e}MD(r,t,s,c,a)}eY(aBe,ig(t,2))!==null&&MD(r,t,s,c,a);let p=new URL(t,s),h=p.pathname,E=new URL(".",s).pathname;if(hA(h,E)||MD(r,t,s,c,a),e==="")return p;if(eY(aBe,e)!==null){let C=n?X2e(r,"*",()=>e):r+e;Zgt(C,s,c,a)}return n?new URL(tY(lBe,p.href,()=>e)):new URL(e,p)}function $gt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function vw(t,e,r,s,a,n,c,f){if(typeof e=="string")return Xgt(e,r,s,t,a,n,c,f);if($W(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:s===-1||t.length>e.length?-1:e.length>t.length?1:0}function edt(t,e,r){if(typeof t=="string"||$W(t))return!0;if(typeof t!="object"||t===null)return!1;let s=FD(t),a=!1,n=0;for(let c=0;c=h.length&&ng(e,C)&&uBe(n,h)===1&&nY(h,"*")===E&&(n=h,c=ig(e,E,e.length-C.length))}}if(n){let p=r[n],h=vw(t,p,c,n,s,!0,!1,a);return h==null&&sY(e,t,s),h}sY(e,t,s)}function ABe({name:t,base:e,conditions:r,readFileSyncFn:s}){if(t==="#"||hA(t,"#/")||ng(t,"/")){let c="is not a valid internal imports specifier name";throw new iY(t,c,(0,ta.fileURLToPath)(e))}let a,n=oBe(e,s);if(n.exists){a=(0,ta.pathToFileURL)(n.pjsonPath);let c=n.imports;if(c)if(Hm(c,t)&&!rY(t,"*")){let f=vw(a,c[t],"",t,e,!1,!0,r);if(f!=null)return f}else{let f="",p,h=FD(c);for(let E=0;E=C.length&&ng(t,b)&&uBe(f,C)===1&&nY(C,"*")===S&&(f=C,p=ig(t,S,t.length-b.length))}}if(f){let E=c[f],C=vw(a,E,p,f,e,!0,!0,r);if(C!=null)return C}}}zgt(t,a,e)}Dt();var rdt=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function gs(t,e,r={},s){s??=rdt.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:s},pnpCode:{...a,value:t},data:{...a,value:r}})}function lf(t){return fe.normalize(fe.fromPortablePath(t))}var dBe=ut(hBe());function mBe(t){return ndt(),aY[t]}var aY;function ndt(){aY||(aY={"--conditions":[],...gBe(idt()),...gBe(process.execArgv)})}function gBe(t){return(0,dBe.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function idt(){let t=[],e=sdt(process.env.NODE_OPTIONS||"",t);return t.length,e}function sdt(t,e){let r=[],s=!1,a=!0;for(let n=0;nparseInt(t,10)),yBe=ml>19||ml===19&&ih>=2||ml===18&&ih>=13,IXt=ml===20&&ih<6||ml===19&&ih>=3,CXt=ml>19||ml===19&&ih>=6,wXt=ml>=21||ml===20&&ih>=10||ml===18&&ih>=19,BXt=ml>=21||ml===20&&ih>=10||ml===18&&ih>=20,vXt=ml>=22;function EBe(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>fe.fromPortablePath(uo.resolveVirtual(fe.toPortablePath(e)))),yBe)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function cY(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,s=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,c=/\/$/,f=/^\.{0,2}\//,p={name:null,reference:null},h=[],E=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Fe of["react-scripts","gatsby"]){let Ne=t.packageRegistry.get(Fe);if(Ne)for(let be of Ne.keys()){if(be===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Fe,reference:be})}}let{ignorePattern:C,packageRegistry:S,packageLocatorsByLocations:b}=t;function I(Fe,Ne){return{fn:Fe,args:Ne,error:null,result:null}}function T(Fe){let Ne=process.stderr?.hasColors?.()??process.stdout.isTTY,be=(it,Ue)=>`\x1B[${it}m${Ue}\x1B[0m`,Ve=Fe.error;console.error(Ve?be("31;1",`\u2716 ${Fe.error?.message.replace(/\n.*/s,"")}`):be("33;1","\u203C Resolution")),Fe.args.length>0&&console.error();for(let it of Fe.args)console.error(` ${be("37;1","In \u2190")} ${(0,lY.inspect)(it,{colors:Ne,compact:!0})}`);Fe.result&&(console.error(),console.error(` ${be("37;1","Out \u2192")} ${(0,lY.inspect)(Fe.result,{colors:Ne,compact:!0})}`));let ke=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(ke.length>0){console.error();for(let it of ke)console.error(` ${be("38;5;244",it)}`)}console.error()}function N(Fe,Ne){if(e.allowDebug===!1)return Ne;if(Number.isFinite(s)){if(s>=2)return(...be)=>{let Ve=I(Fe,be);try{return Ve.result=Ne(...be)}catch(ke){throw Ve.error=ke}finally{T(Ve)}};if(s>=1)return(...be)=>{try{return Ne(...be)}catch(Ve){let ke=I(Fe,be);throw ke.error=Ve,T(ke),Ve}}}return Ne}function U(Fe){let Ne=g(Fe);if(!Ne)throw gs("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return Ne}function W(Fe){if(Fe.name===null)return!0;for(let Ne of t.dependencyTreeRoots)if(Ne.name===Fe.name&&Ne.reference===Fe.reference)return!0;return!1}let ee=new Set(["node","require",...mBe("--conditions")]);function ie(Fe,Ne=ee,be){let Ve=Ae(J.join(Fe,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(Ve===null)throw gs("INTERNAL",`The locator that owns the "${Fe}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:ke}=U(Ve),it=J.join(ke,Er.manifest);if(!e.fakeFs.existsSync(it))return null;let Ue=JSON.parse(e.fakeFs.readFileSync(it,"utf8"));if(Ue.exports==null)return null;let x=J.contains(ke,Fe);if(x===null)throw gs("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");x!=="."&&!f.test(x)&&(x=`./${x}`);try{let w=fBe({packageJSONUrl:(0,jm.pathToFileURL)(fe.fromPortablePath(it)),packageSubpath:x,exports:Ue.exports,base:be?(0,jm.pathToFileURL)(fe.fromPortablePath(be)):null,conditions:Ne});return fe.toPortablePath((0,jm.fileURLToPath)(w))}catch(w){throw gs("EXPORTS_RESOLUTION_FAILED",w.message,{unqualifiedPath:lf(Fe),locator:Ve,pkgJson:Ue,subpath:lf(x),conditions:Ne},w.code)}}function ue(Fe,Ne,{extensions:be}){let Ve;try{Ne.push(Fe),Ve=e.fakeFs.statSync(Fe)}catch{}if(Ve&&!Ve.isDirectory())return e.fakeFs.realpathSync(Fe);if(Ve&&Ve.isDirectory()){let ke;try{ke=JSON.parse(e.fakeFs.readFileSync(J.join(Fe,Er.manifest),"utf8"))}catch{}let it;if(ke&&ke.main&&(it=J.resolve(Fe,ke.main)),it&&it!==Fe){let Ue=ue(it,Ne,{extensions:be});if(Ue!==null)return Ue}}for(let ke=0,it=be.length;ke{let x=JSON.stringify(Ue.name);if(Ve.has(x))return;Ve.add(x);let w=we(Ue);for(let P of w)if(U(P).packagePeers.has(Fe))ke(P);else{let F=be.get(P.name);typeof F>"u"&&be.set(P.name,F=new Set),F.add(P.reference)}};ke(Ne);let it=[];for(let Ue of[...be.keys()].sort())for(let x of[...be.get(Ue)].sort())it.push({name:Ue,reference:x});return it}function Ae(Fe,{resolveIgnored:Ne=!1,includeDiscardFromLookup:be=!1}={}){if(pe(Fe)&&!Ne)return null;let Ve=J.relative(t.basePath,Fe);Ve.match(n)||(Ve=`./${Ve}`),Ve.endsWith("/")||(Ve=`${Ve}/`);do{let ke=b.get(Ve);if(typeof ke>"u"||ke.discardFromLookup&&!be){Ve=Ve.substring(0,Ve.lastIndexOf("/",Ve.length-2)+1);continue}return ke.locator}while(Ve!=="");return null}function se(Fe){try{return e.fakeFs.readFileSync(fe.toPortablePath(Fe),"utf8")}catch(Ne){if(Ne.code==="ENOENT")return;throw Ne}}function X(Fe,Ne,{considerBuiltins:be=!0}={}){if(Fe.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Fe==="pnpapi")return fe.toPortablePath(e.pnpapiResolution);if(be&&(0,sh.isBuiltin)(Fe))return null;let Ve=lf(Fe),ke=Ne&&lf(Ne);if(Ne&&pe(Ne)&&(!J.isAbsolute(Fe)||Ae(Fe)===null)){let x=me(Fe,Ne);if(x===!1)throw gs("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: "${Ve}" -Required by: ${ke} -`,{request:Ve,issuer:ke});return fe.toPortablePath(x)}let it,Ue=Fe.match(a);if(Ue){if(!Ne)throw gs("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:Ve,issuer:ke});let[,x,w]=Ue,P=Ae(Ne);if(!P){let Re=me(Fe,Ne);if(Re===!1)throw gs("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: "${Ve}" -Required by: ${ke} -`,{request:Ve,issuer:ke});return fe.toPortablePath(Re)}let F=U(P).packageDependencies.get(x),z=null;if(F==null&&P.name!==null){let Re=t.fallbackExclusionList.get(P.name);if(!Re||!Re.has(P.reference)){for(let Ct=0,qt=h.length;CtW(lt))?Z=gs("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!==Ve?` (via "${Ve}")`:""} -Required by: ${P.name}@${P.reference} (via ${ke}) -${Re.map(lt=>`Ancestor breaking the chain: ${lt.name}@${lt.reference} -`).join("")} -`,{request:Ve,issuer:ke,issuerLocator:Object.assign({},P),dependencyName:x,brokenAncestors:Re}):Z=gs("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!==Ve?` (via "${Ve}")`:""} -Required by: ${P.name}@${P.reference} (via ${ke}) - -${Re.map(lt=>`Ancestor breaking the chain: ${lt.name}@${lt.reference} -`).join("")} -`,{request:Ve,issuer:ke,issuerLocator:Object.assign({},P),dependencyName:x,brokenAncestors:Re})}else F===void 0&&(!be&&(0,sh.isBuiltin)(Fe)?W(P)?Z=gs("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!==Ve?` (via "${Ve}")`:""} -Required by: ${ke} -`,{request:Ve,issuer:ke,dependencyName:x}):Z=gs("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!==Ve?` (via "${Ve}")`:""} -Required by: ${ke} -`,{request:Ve,issuer:ke,issuerLocator:Object.assign({},P),dependencyName:x}):W(P)?Z=gs("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!==Ve?` (via "${Ve}")`:""} -Required by: ${ke} -`,{request:Ve,issuer:ke,dependencyName:x}):Z=gs("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!==Ve?` (via "${Ve}")`:""} -Required by: ${P.name}@${P.reference} (via ${ke}) -`,{request:Ve,issuer:ke,issuerLocator:Object.assign({},P),dependencyName:x}));if(F==null){if(z===null||Z===null)throw Z||new Error("Assertion failed: Expected an error to have been set");F=z;let Re=Z.message.replace(/\n.*/g,"");Z.message=Re,!E.has(Re)&&s!==0&&(E.add(Re),process.emitWarning(Z))}let $=Array.isArray(F)?{name:F[0],reference:F[1]}:{name:x,reference:F},oe=U($);if(!oe.packageLocation)throw gs("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!==Ve?` (via "${Ve}")`:""} -Required by: ${P.name}@${P.reference} (via ${ke}) -`,{request:Ve,issuer:ke,dependencyLocator:Object.assign({},$)});let xe=oe.packageLocation;w?it=J.join(xe,w):it=xe}else if(J.isAbsolute(Fe))it=J.normalize(Fe);else{if(!Ne)throw gs("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:Ve,issuer:ke});let x=J.resolve(Ne);Ne.match(c)?it=J.normalize(J.join(x,Fe)):it=J.normalize(J.join(J.dirname(x),Fe))}return J.normalize(it)}function De(Fe,Ne,be=ee,Ve){if(n.test(Fe))return Ne;let ke=ie(Ne,be,Ve);return ke?J.normalize(ke):Ne}function Te(Fe,{extensions:Ne=Object.keys(sh.Module._extensions)}={}){let be=[],Ve=ue(Fe,be,{extensions:Ne});if(Ve)return J.normalize(Ve);{EBe(be.map(Ue=>fe.fromPortablePath(Ue)));let ke=lf(Fe),it=Ae(Fe);if(it){let{packageLocation:Ue}=U(it),x=!0;try{e.fakeFs.accessSync(Ue)}catch(w){if(w?.code==="ENOENT")x=!1;else{let P=(w?.message??w??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw gs("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${P}). - -Missing package: ${it.name}@${it.reference} -Expected package location: ${lf(Ue)} -`,{unqualifiedPath:ke,extensions:Ne})}}if(!x){let w=Ue.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 gs("QUALIFIED_PATH_RESOLUTION_FAILED",`${w} - -Missing package: ${it.name}@${it.reference} -Expected package location: ${lf(Ue)} -`,{unqualifiedPath:ke,extensions:Ne})}}throw gs("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. - -Source path: ${ke} -${be.map(Ue=>`Not found: ${lf(Ue)} -`).join("")}`,{unqualifiedPath:ke,extensions:Ne})}}function mt(Fe,Ne,be){if(!Ne)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let Ve=ABe({name:Fe,base:(0,jm.pathToFileURL)(fe.fromPortablePath(Ne)),conditions:be.conditions??ee,readFileSyncFn:se});if(Ve instanceof URL)return Te(fe.toPortablePath((0,jm.fileURLToPath)(Ve)),{extensions:be.extensions});if(Ve.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return j(Ve,Ne,be)}function j(Fe,Ne,be={}){try{if(Fe.startsWith("#"))return mt(Fe,Ne,be);let{considerBuiltins:Ve,extensions:ke,conditions:it}=be,Ue=X(Fe,Ne,{considerBuiltins:Ve});if(Fe==="pnpapi")return Ue;if(Ue===null)return null;let x=()=>Ne!==null?pe(Ne):!1,w=(!Ve||!(0,sh.isBuiltin)(Fe))&&!x()?De(Fe,Ue,it,Ne):Ue;return Te(w,{extensions:ke})}catch(Ve){throw Object.hasOwn(Ve,"pnpCode")&&Object.assign(Ve.data,{request:lf(Fe),issuer:Ne&&lf(Ne)}),Ve}}function rt(Fe){let Ne=J.normalize(Fe),be=uo.resolveVirtual(Ne);return be!==Ne?be:null}return{VERSIONS:Be,topLevel:Ce,getLocator:(Fe,Ne)=>Array.isArray(Ne)?{name:Ne[0],reference:Ne[1]}:{name:Fe,reference:Ne},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Fe=[];for(let[Ne,be]of S)for(let Ve of be.keys())Ne!==null&&Ve!==null&&Fe.push({name:Ne,reference:Ve});return Fe},getPackageInformation:Fe=>{let Ne=g(Fe);if(Ne===null)return null;let be=fe.fromPortablePath(Ne.packageLocation);return{...Ne,packageLocation:be}},findPackageLocator:Fe=>Ae(fe.toPortablePath(Fe)),resolveToUnqualified:N("resolveToUnqualified",(Fe,Ne,be)=>{let Ve=Ne!==null?fe.toPortablePath(Ne):null,ke=X(fe.toPortablePath(Fe),Ve,be);return ke===null?null:fe.fromPortablePath(ke)}),resolveUnqualified:N("resolveUnqualified",(Fe,Ne)=>fe.fromPortablePath(Te(fe.toPortablePath(Fe),Ne))),resolveRequest:N("resolveRequest",(Fe,Ne,be)=>{let Ve=Ne!==null?fe.toPortablePath(Ne):null,ke=j(fe.toPortablePath(Fe),Ve,be);return ke===null?null:fe.fromPortablePath(ke)}),resolveVirtual:N("resolveVirtual",Fe=>{let Ne=rt(fe.toPortablePath(Fe));return Ne!==null?fe.fromPortablePath(Ne):null})}}Dt();var IBe=(t,e,r)=>{let s=RD(t),a=XW(s,{basePath:e}),n=fe.join(e,Er.pnpCjs);return cY(a,{fakeFs:r,pnpapiResolution:n})};var fY=ut(wBe());Yt();var gA={};Vt(gA,{checkManifestCompatibility:()=>BBe,extractBuildRequest:()=>sN,getExtractHint:()=>AY,hasBindingGyp:()=>pY});Ge();Dt();function BBe(t){return G.isPackageCompatible(t,fs.getArchitectureSet())}function sN(t,e,r,{configuration:s}){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(s,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(s,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!s.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${G.prettyLocator(s,t)} lists build scripts, but all build scripts have been disabled.`)}:BBe(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${G.prettyLocator(s,t)} The ${fs.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var adt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function AY(t){return t.packageFs.getExtractHint({relevantExtensions:adt})}function pY(t){let e=J.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var HD={};Vt(HD,{getUnpluggedPath:()=>_D});Ge();Dt();function _D(t,{configuration:e}){return J.resolve(e.get("pnpUnpluggedFolder"),G.slugifyLocator(t))}var ldt=new Set([G.makeIdent(null,"open").identHash,G.makeIdent(null,"opn").identHash]),sg=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 s=og(r.project).cjs;if(!ce.existsSync(s))throw new nt(`The project in ${he.pretty(r.project.configuration,`${r.project.cwd}/package.json`,he.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=je.getFactoryWithDefault(this.pnpCache,s,()=>je.dynamicRequire(s,{cachingStrategy:je.CachingStrategy.FsTime})),n={name:G.stringifyIdent(e),reference:e.reference},c=a.getPackageInformation(n);if(!c)throw new nt(`Couldn't find ${G.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return fe.toPortablePath(c.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let s=og(r.project).cjs;if(!ce.existsSync(s))return null;let n=je.getFactoryWithDefault(this.pnpCache,s,()=>je.dynamicRequire(s,{cachingStrategy:je.CachingStrategy.FsTime})).findPackageLocator(fe.fromPortablePath(e));return n?G.makeLocator(G.parseIdent(n.name),n.reference):null}makeInstaller(e){return new Gm(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},Gm=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new je.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,s){let a=G.stringifyIdent(e),n=e.reference,c=!!this.opts.project.tryWorkspaceByLocator(e),f=G.isVirtualLocator(e),p=e.peerDependencies.size>0&&!f,h=!p&&!c,E=!p&&e.linkType!=="SOFT",C,S;if(h||E){let ee=f?G.devirtualizeLocator(e):e;C=this.customData.store.get(ee.locatorHash),typeof C>"u"&&(C=await cdt(r),e.linkType==="HARD"&&this.customData.store.set(ee.locatorHash,C)),C.manifest.type==="module"&&(this.isESMLoaderRequired=!0),S=this.opts.project.getDependencyMeta(ee,e.version)}let b=h?sN(e,C,S,{configuration:this.opts.project.configuration}):null,I=E?await this.unplugPackageIfNeeded(e,C,r,S,s):r.packageFs;if(J.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let T=J.resolve(I.getRealPath(),r.prefixPath),N=hY(this.opts.project.cwd,T),U=new Map,W=new Set;if(f){for(let ee of e.peerDependencies.values())U.set(G.stringifyIdent(ee),null),W.add(G.stringifyIdent(ee));if(!c){let ee=G.devirtualizeLocator(e);this.virtualTemplates.set(ee.locatorHash,{location:hY(this.opts.project.cwd,uo.resolveVirtual(T)),locator:ee})}}return je.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:N,packageDependencies:U,packagePeers:W,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:T,buildRequest:b}}async attachInternalDependencies(e,r){let s=this.getPackageInformation(e);for(let[a,n]of r){let c=G.areIdentsEqual(a,n)?n.reference:[G.stringifyIdent(n),n.reference];s.packageDependencies.set(G.stringifyIdent(a),c)}}async attachExternalDependents(e,r){for(let s of r)this.getDiskInformation(s).packageDependencies.set(G.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=og(this.opts.project);if(this.isEsmEnabled()||await ce.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await ce.removePromise(e.cjs),await ce.removePromise(e.data),await ce.removePromise(e.esmLoader),await ce.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:C,location:S}of this.virtualTemplates.values())je.getMapWithDefault(this.packageRegistry,G.stringifyIdent(C)).set(C.reference,{packageLocation:S,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1});let r=this.opts.project.configuration.get("pnpFallbackMode"),s=this.opts.project.workspaces.map(({anchoredLocator:C})=>({name:G.stringifyIdent(C),reference:C.reference})),a=r!=="none",n=[],c=new Map,f=je.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang"),E=this.opts.project.configuration.get("pnpZipBackend");if(r==="dependencies-only")for(let C of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(C)&&n.push({name:G.stringifyIdent(C),reference:C.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:s,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:c,ignorePattern:f,pnpZipBackend:E,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=og(this.opts.project),s=await this.locateNodeModules(e.ignorePattern);if(s.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 s)await ce.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=z2e(e);await ce.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await ce.removePromise(r.data)}else{let{dataFile:n,loaderFile:c}=Z2e(e);await ce.changeFilePromise(r.cjs,c,{automaticNewlines:!0,mode:493}),await ce.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 ce.changeFilePromise(r.esmLoader,(0,fY.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await ce.removePromise(a);else for(let n of await ce.readdirPromise(a)){let c=J.resolve(a,n);this.unpluggedPaths.has(c)||await ce.removePromise(c)}}async locateNodeModules(e){let r=[],s=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=J.join(a.cwd,"node_modules");if(s&&s.test(J.relative(this.opts.project.cwd,a.cwd))||!ce.existsSync(n))continue;let c=await ce.readdirPromise(n,{withFileTypes:!0}),f=c.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(f.length===c.length)r.push(n);else for(let p of f)r.push(J.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,s,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,s,n):s.packageFs}shouldBeUnplugged(e,r,s){return typeof s.unplugged<"u"?s.unplugged:ldt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(sN(e,r,s,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,s){let a=_D(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new _f(a,{baseFs:r.packageFs,pathUtils:J}):(this.unpluggedPaths.add(a),s.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=J.join(a,r.prefixPath,".ready");await ce.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await ce.mkdirPromise(a,{recursive:!0}),await ce.copyPromise(a,vt.dot,{baseFs:r.packageFs,overwrite:!1}),await ce.writeFilePromise(n,""))})),new Sn(a))}getPackageInformation(e){let r=G.stringifyIdent(e),s=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(s);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=je.getMapWithDefault(this.packageRegistry,"@@disk"),s=hY(this.opts.project.cwd,e);return je.getFactoryWithDefault(r,s,()=>({packageLocation:s,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function hY(t,e){let r=J.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function cdt(t){let e=await Ut.tryFind(t.prefixPath,{baseFs:t.packageFs})??new Ut,r=new Set(["preinstall","install","postinstall"]);for(let s of e.scripts.keys())r.has(s)||e.scripts.delete(s);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:AY(t),hasBindingGyp:pY(t)}}}Ge();Ge();Yt();var vBe=ut(Go());var Sw=class extends ft{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd),n=await Kr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new nt("This command can only be used if the `nodeLinker` option is set to `pnp`");await s.restoreInstallState();let c=new Set(this.patterns),f=this.patterns.map(b=>{let I=G.parseDescriptor(b),T=I.range!=="unknown"?I:G.makeDescriptor(I,"*");if(!Fr.validRange(T.range))throw new nt(`The range of the descriptor patterns must be a valid semver range (${G.prettyDescriptor(r,T)})`);return N=>{let U=G.stringifyIdent(N);return!vBe.default.isMatch(U,G.stringifyIdent(T))||N.version&&!Fr.satisfiesWithPrereleases(N.version,T.range)?!1:(c.delete(b),!0)}}),p=()=>{let b=[];for(let I of s.storedPackages.values())!s.tryWorkspaceByLocator(I)&&!G.isVirtualLocator(I)&&f.some(T=>T(I))&&b.push(I);return b},h=b=>{let I=new Set,T=[],N=(U,W)=>{if(I.has(U.locatorHash))return;let ee=!!s.tryWorkspaceByLocator(U);if(!(W>0&&!this.recursive&&ee)&&(I.add(U.locatorHash),!s.tryWorkspaceByLocator(U)&&f.some(ie=>ie(U))&&T.push(U),!(W>0&&!this.recursive)))for(let ie of U.dependencies.values()){let ue=s.storedResolutions.get(ie.descriptorHash);if(!ue)throw new Error("Assertion failed: The resolution should have been registered");let le=s.storedPackages.get(ue);if(!le)throw new Error("Assertion failed: The package should have been registered");N(le,W+1)}};for(let U of b)N(U.anchoredPackage,0);return T},E,C;if(this.all&&this.recursive?(E=p(),C="the project"):this.all?(E=h(s.workspaces),C="any workspace"):(E=h([a]),C="this workspace"),c.size>1)throw new nt(`Patterns ${he.prettyList(r,c,he.Type.CODE)} don't match any packages referenced by ${C}`);if(c.size>0)throw new nt(`Pattern ${he.prettyList(r,c,he.Type.CODE)} doesn't match any packages referenced by ${C}`);E=je.sortMap(E,b=>G.stringifyLocator(b));let S=await Ot.start({configuration:r,stdout:this.context.stdout,json:this.json},async b=>{for(let I of E){let T=I.version??"unknown",N=s.topLevelWorkspace.manifest.ensureDependencyMeta(G.makeDescriptor(I,T));N.unplugged=!0,b.reportInfo(0,`Will unpack ${G.prettyLocator(r,I)} to ${he.pretty(r,_D(I,{configuration:r}),he.Type.PATH)}`),b.reportJson({locator:G.stringifyLocator(I),version:T})}await s.topLevelWorkspace.persistManifest(),this.json||b.reportSeparator()});return S.hasErrors()?S.exitCode():await s.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};var og=t=>({cjs:J.join(t.cwd,Er.pnpCjs),data:J.join(t.cwd,Er.pnpData),esmLoader:J.join(t.cwd,Er.pnpEsmLoader)}),DBe=t=>/\s/.test(t)?JSON.stringify(t):t;async function udt(t,e,r){let s=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(s," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n||void 0;return}let c=og(t),f=`--require ${DBe(fe.fromPortablePath(c.cjs))}`;ce.existsSync(c.esmLoader)&&(f=`${f} --experimental-loader ${(0,SBe.pathToFileURL)(fe.fromPortablePath(c.esmLoader)).href}`),ce.existsSync(c.cjs)&&(e.NODE_OPTIONS=n?`${f} ${n}`:f)}async function fdt(t,e){let r=og(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var Adt={hooks:{populateYarnPaths:fdt,setupScriptEnvironment:udt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "pnpm", or "node-modules"',type:"STRING",default:"pnp"},minizip:{description:"Whether Yarn should use minizip to extract archives",type:"BOOLEAN",default:!1},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},pnpZipBackend:{description:"Whether to use the experimental js implementation for the ZipFS",type:"STRING",values:["libzip","js"],default:"libzip"},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:[sg],commands:[Sw]},pdt=Adt;var FBe=ut(QBe());Yt();var wY=ut(Ie("crypto")),NBe=ut(Ie("fs")),OBe=1,Ri="node_modules",oN=".bin",LBe=".yarn-state.yml",kdt=1e3,BY=(s=>(s.CLASSIC="classic",s.HARDLINKS_LOCAL="hardlinks-local",s.HARDLINKS_GLOBAL="hardlinks-global",s))(BY||{}),jD=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 s=r.project.tryWorkspaceByLocator(e);if(s)return s.cwd;let a=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await CY(r.project,{unrollAliases:!0}));if(a===null)throw new nt("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 nt(`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 c=n.locations.sort((p,h)=>p.split(J.sep).length-h.split(J.sep).length),f=J.join(r.project.configuration.startingCwd,Ri);return c.find(p=>J.contains(f,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let s=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await CY(r.project,{unrollAliases:!0}));if(s===null)return null;let{locationRoot:a,segments:n}=aN(J.resolve(e),{skipPrefix:r.project.cwd}),c=s.locationTree.get(a);if(!c)return null;let f=c.locator;for(let p of n){if(c=c.children.get(p),!c)break;f=c.locator||f}return G.parseLocator(f)}makeInstaller(e){return new IY(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},IY=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 s=J.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await Qdt(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,c=new Set;n.has(G.stringifyIdent(e))||n.set(G.stringifyIdent(e),e.reference);let f=e;if(G.isVirtualLocator(e)){f=G.devirtualizeLocator(e);for(let E of e.peerDependencies.values())n.set(G.stringifyIdent(E),null),c.add(G.stringifyIdent(E))}let p={packageLocation:`${fe.fromPortablePath(s)}/`,packageDependencies:n,packagePeers:c,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(f.locatorHash,h),{packageLocation:s,buildRequest:null}}async attachInternalDependencies(e,r){let s=this.localStore.get(e.locatorHash);if(typeof s>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let c=G.areIdentsEqual(a,n)?n.reference:[G.stringifyIdent(n),n.reference];s.pnpNode.packageDependencies.set(G.stringifyIdent(a),c)}}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 uo({baseFs:new $f({maxOpenFiles:80,readOnlyArchives:!0})}),r=await CY(this.opts.project),s=this.opts.project.configuration.get("nmMode");(r===null||s!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:s,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(S=>{let b=this.opts.project.configuration.get("nmHoistingLimits");try{b=je.validateEnum(xD,S.manifest.installConfig?.hoistingLimits??b)}catch{let I=G.prettyWorkspace(this.opts.project.configuration,S);this.opts.report.reportWarning(57,`${I}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(xD).join(", ")}, using default: "${b}"`)}return[S.relativeCwd,b]})),n=new Map(this.opts.project.workspaces.map(S=>{let b=this.opts.project.configuration.get("nmSelfReferences");return b=S.manifest.installConfig?.selfReferences??b,[S.relativeCwd,b]})),c={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(S,b)=>Array.isArray(b)?{name:b[0],reference:b[1]}:{name:S,reference:b},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(S=>{let b=S.anchoredLocator;return{name:G.stringifyIdent(b),reference:b.reference}}),getPackageInformation:S=>{let b=S.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:G.makeLocator(G.parseIdent(S.name),S.reference),I=this.localStore.get(b.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return I.pnpNode},findPackageLocator:S=>{let b=this.opts.project.tryWorkspaceByCwd(fe.toPortablePath(S));if(b!==null){let I=b.anchoredLocator;return{name:G.stringifyIdent(I),reference:I.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:S=>fe.fromPortablePath(uo.resolveVirtual(fe.toPortablePath(S)))},{tree:f,errors:p,preserveSymlinksRequired:h}=kD(c,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!f){for(let{messageName:S,text:b}of p)this.opts.report.reportError(S,b);return}let E=zW(f);await Mdt(r,E,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async S=>{let b=G.parseLocator(S),I=this.localStore.get(b.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the slot to exist");return I.customPackageData.manifest}});let C=[];for(let[S,b]of E.entries()){if(_Be(S))continue;let I=G.parseLocator(S),T=this.localStore.get(I.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=gA.extractBuildRequest(T.pkg,T.customPackageData,T.dependencyMeta,{configuration:this.opts.project.configuration});N&&C.push({buildLocations:b.locations,locator:I,buildRequest:N})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${he.pretty(this.opts.project.configuration,"--preserve-symlinks",he.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:C}}};async function Qdt(t,e){let r=await Ut.tryFind(e.prefixPath,{baseFs:e.packageFs})??new Ut,s=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())s.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:gA.hasBindingGyp(e)}}}async function Rdt(t,e,r,s,{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: ${OBe} -`,n+=` nmMode: ${s.value} -`;let c=Array.from(e.keys()).sort(),f=G.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let E of c){let C=e.get(E);n+=` -`,n+=`${JSON.stringify(E)}: -`,n+=` locations: -`;for(let S of C.locations){let b=J.contains(t.cwd,S);if(b===null)throw new Error(`Assertion failed: Expected the path to be within the project (${S})`);n+=` - ${JSON.stringify(b)} -`}if(C.aliases.length>0){n+=` aliases: -`;for(let S of C.aliases)n+=` - ${JSON.stringify(S)} -`}if(E===f&&r.size>0){n+=` bin: -`;for(let[S,b]of r){let I=J.contains(t.cwd,S);if(I===null)throw new Error(`Assertion failed: Expected the path to be within the project (${S})`);n+=` ${JSON.stringify(I)}: -`;for(let[T,N]of b){let U=J.relative(J.join(S,Ri),N);n+=` ${JSON.stringify(T)}: ${JSON.stringify(U)} -`}}}}let p=t.cwd,h=J.join(p,Ri,LBe);a&&await ce.removePromise(h),await ce.changeFilePromise(h,n,{automaticNewlines:!0})}async function CY(t,{unrollAliases:e=!1}={}){let r=t.cwd,s=J.join(r,Ri,LBe),a;try{a=await ce.statPromise(s)}catch{}if(!a)return null;let n=as(await ce.readFilePromise(s,"utf8"));if(n.__metadata.version>OBe)return null;let c=n.__metadata.nmMode||"classic",f=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let C=E.locations.map(b=>J.join(r,b)),S=E.bin;if(S)for(let[b,I]of Object.entries(S)){let T=J.join(r,fe.toPortablePath(b)),N=je.getMapWithDefault(p,T);for(let[U,W]of Object.entries(I))N.set(U,fe.toPortablePath([T,Ri,W].join(J.sep)))}if(f.set(h,{target:vt.dot,linkType:"HARD",locations:C,aliases:E.aliases||[]}),e&&E.aliases)for(let b of E.aliases){let{scope:I,name:T}=G.parseLocator(h),N=G.makeLocator(G.makeIdent(I,T),b),U=G.stringifyLocator(N);f.set(U,{target:vt.dot,linkType:"HARD",locations:C,aliases:[]})}}return{locatorMap:f,binSymlinks:p,locationTree:MBe(f,{skipPrefix:t.cwd}),nmMode:c,mtimeMs:a.mtimeMs}}var Pw=async(t,e)=>{if(t.split(J.sep).indexOf(Ri)<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 ce.lstatPromise(t),!r.isDirectory()&&!r.isSymbolicLink()||r.isSymbolicLink()&&!e.isWorkspaceDir)){await ce.unlinkPromise(t);return}let s=await ce.readdirPromise(t,{withFileTypes:!0});for(let n of s){let c=J.join(t,n.name);n.isDirectory()?(n.name!==Ri||e&&e.innerLoop)&&await Pw(c,{innerLoop:!0,contentsOnly:!1}):await ce.unlinkPromise(c)}let a=!e.innerLoop&&e.isWorkspaceDir&&r?.isSymbolicLink();!e.contentsOnly&&!a&&await ce.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},RBe=4,aN=(t,{skipPrefix:e})=>{let r=J.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let s=r.split(J.sep).filter(p=>p!==""),a=s.indexOf(Ri),n=s.slice(0,a).join(J.sep),c=J.join(e,n),f=s.slice(a);return{locationRoot:c,segments:f}},MBe=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let s=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&J.contains(e,n.target)!==null){let f=je.getFactoryWithDefault(r,n.target,s);f.locator=a,f.linkType=n.linkType}for(let c of n.locations){let{locationRoot:f,segments:p}=aN(c,{skipPrefix:e}),h=je.getFactoryWithDefault(r,f,s);for(let E=0;E{if(process.platform==="win32"&&r==="junctions"){let s;try{s=await ce.lstatPromise(t)}catch{}if(!s||s.isDirectory()){await ce.symlinkPromise(t,e,"junction");return}}await ce.symlinkPromise(J.relative(J.dirname(e),t),e)};async function UBe(t,e,r){let s=J.join(t,`${wY.default.randomBytes(16).toString("hex")}.tmp`);try{await ce.writeFilePromise(s,r);try{await ce.linkPromise(s,e)}catch{}}finally{await ce.unlinkPromise(s)}}async function Tdt({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:s,baseFs:a,nmMode:n}){if(r.kind==="file"){if(n.value==="hardlinks-global"&&s&&r.digest){let f=J.join(s,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await ce.statPromise(f);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs{await ce.mkdirPromise(t,{recursive:!0});let f=async(E=vt.dot)=>{let C=J.join(e,E),S=await r.readdirPromise(C,{withFileTypes:!0}),b=new Map;for(let I of S){let T=J.join(E,I.name),N,U=J.join(C,I.name);if(I.isFile()){if(N={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let W=await Nn.checksumFile(U,{baseFs:r,algorithm:"sha1"});N.digest=W}}else if(I.isDirectory())N={kind:"directory"};else if(I.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),I.isDirectory()&&T!==Ri){let W=await f(T);for(let[ee,ie]of W)b.set(ee,ie)}}return b},p;if(a.value==="hardlinks-global"&&s&&c){let E=J.join(s,c.substring(0,2),`${c.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await ce.readFilePromise(E,"utf8"))))}catch{p=await f()}}else p=await f();let h=!1;for(let[E,C]of p){let S=J.join(e,E),b=J.join(t,E);if(C.kind==="directory")await ce.mkdirPromise(b,{recursive:!0});else if(C.kind==="file"){let I=C.mtimeMs;await Tdt({srcPath:S,dstPath:b,entry:C,nmMode:a,baseFs:r,globalHardlinksStore:s}),C.mtimeMs!==I&&(h=!0)}else C.kind==="symlink"&&await vY(J.resolve(J.dirname(b),C.symlinkTo),b,n)}if(a.value==="hardlinks-global"&&s&&h&&c){let E=J.join(s,c.substring(0,2),`${c.substring(2)}.json`);await ce.removePromise(E),await UBe(s,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function Ndt(t,e,r,s){let a=new Map,n=new Map,c=new Map,f=!1,p=(h,E,C,S,b)=>{let I=!0,T=J.join(h,E),N=new Set;if(E===Ri||E.startsWith("@")){let W;try{W=ce.statSync(T)}catch{}I=!!W,W?W.mtimeMs>r?(f=!0,N=new Set(ce.readdirSync(T))):N=new Set(C.children.get(E).children.keys()):f=!0;let ee=e.get(h);if(ee){let ie=J.join(h,Ri,oN),ue;try{ue=ce.statSync(ie)}catch{}if(!ue)f=!0;else if(ue.mtimeMs>r){f=!0;let le=new Set(ce.readdirSync(ie)),me=new Map;n.set(h,me);for(let[pe,Be]of ee)le.has(pe)&&me.set(pe,Be)}else n.set(h,ee)}}else I=b.has(E);let U=C.children.get(E);if(I){let{linkType:W,locator:ee}=U,ie={children:new Map,linkType:W,locator:ee};if(S.children.set(E,ie),ee){let ue=je.getSetWithDefault(c,ee);ue.add(T),c.set(ee,ue)}for(let ue of U.children.keys())p(T,ue,U,ie,N)}else U.locator&&s.storedBuildState.delete(G.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:C,locator:S}=E,b={children:new Map,linkType:C,locator:S};if(a.set(h,b),S){let I=je.getSetWithDefault(c,E.locator);I.add(h),c.set(E.locator,I)}E.children.has(Ri)&&p(h,Ri,E,b,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:c,installChangedByUser:f}}function _Be(t){let e=G.parseDescriptor(t);return G.isVirtualDescriptor(e)&&(e=G.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function Odt(t,e,r,{loadManifest:s}){let a=new Map;for(let[f,{locations:p}]of t){let h=_Be(f)?null:await s(f,p[0]),E=new Map;if(h)for(let[C,S]of h.bin){let b=J.join(p[0],S);S!==""&&ce.existsSync(b)&&E.set(C,S)}a.set(f,E)}let n=new Map,c=(f,p,h)=>{let E=new Map,C=J.contains(r,f);if(h.locator&&C!==null){let S=a.get(h.locator);for(let[b,I]of S){let T=J.join(f,fe.toPortablePath(I));E.set(b,T)}for(let[b,I]of h.children){let T=J.join(f,b),N=c(T,T,I);N.size>0&&n.set(f,new Map([...n.get(f)||new Map,...N]))}}else for(let[S,b]of h.children){let I=c(J.join(f,S),p,b);for(let[T,N]of I)E.set(T,N)}return E};for(let[f,p]of e){let h=c(f,f,p);h.size>0&&n.set(f,new Map([...n.get(f)||new Map,...h]))}return n}var TBe=(t,e)=>{if(!t||!e)return t===e;let r=G.parseLocator(t);G.isVirtualLocator(r)&&(r=G.devirtualizeLocator(r));let s=G.parseLocator(e);return G.isVirtualLocator(s)&&(s=G.devirtualizeLocator(s)),G.areLocatorsEqual(r,s)};function SY(t){return J.join(t.get("globalFolder"),"store")}function Ldt(t,e){let r=s=>{let a=s.split(J.sep),n=a.lastIndexOf(Ri);if(n<0||n==a.length-1)throw new Error(`Assertion failed. Path is outside of any node_modules package ${s}`);return a.slice(0,n+(a[n+1].startsWith("@")?3:2)).join(J.sep)};for(let s of t.values())for(let[a,n]of s)e.has(r(n))&&s.delete(a)}async function Mdt(t,e,{baseFs:r,project:s,report:a,loadManifest:n,realLocatorChecksums:c}){let f=J.join(s.cwd,Ri),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:C}=Ndt(t.locationTree,t.binSymlinks,t.mtimeMs,s),S=MBe(e,{skipPrefix:s.cwd}),b=[],I=async({srcDir:Be,dstDir:Ce,linkType:g,globalHardlinksStore:we,nmMode:ye,windowsLinkType:Ae,packageChecksum:se})=>{let X=(async()=>{try{g==="SOFT"?(await ce.mkdirPromise(J.dirname(Ce),{recursive:!0}),await vY(J.resolve(Be),Ce,Ae)):await Fdt(Ce,Be,{baseFs:r,globalHardlinksStore:we,nmMode:ye,windowsLinkType:Ae,packageChecksum:se})}catch(De){throw De.message=`While persisting ${Be} -> ${Ce} ${De.message}`,De}finally{ie.tick()}})().then(()=>b.splice(b.indexOf(X),1));b.push(X),b.length>RBe&&await Promise.race(b)},T=async(Be,Ce,g)=>{let we=(async()=>{let ye=async(Ae,se,X)=>{try{X.innerLoop||await ce.mkdirPromise(se,{recursive:!0});let De=await ce.readdirPromise(Ae,{withFileTypes:!0});for(let Te of De){if(!X.innerLoop&&Te.name===oN)continue;let mt=J.join(Ae,Te.name),j=J.join(se,Te.name);Te.isDirectory()?(Te.name!==Ri||X&&X.innerLoop)&&(await ce.mkdirPromise(j,{recursive:!0}),await ye(mt,j,{...X,innerLoop:!0})):me.value==="hardlinks-local"||me.value==="hardlinks-global"?await ce.linkPromise(mt,j):await ce.copyFilePromise(mt,j,NBe.default.constants.COPYFILE_FICLONE)}}catch(De){throw X.innerLoop||(De.message=`While cloning ${Ae} -> ${se} ${De.message}`),De}finally{X.innerLoop||ie.tick()}};await ye(Be,Ce,g)})().then(()=>b.splice(b.indexOf(we),1));b.push(we),b.length>RBe&&await Promise.race(b)},N=async(Be,Ce,g)=>{if(g)for(let[we,ye]of Ce.children){let Ae=g.children.get(we);await N(J.join(Be,we),ye,Ae)}else{Ce.children.has(Ri)&&await Pw(J.join(Be,Ri),{contentsOnly:!1});let we=J.basename(Be)===Ri&&p.has(J.join(J.dirname(Be)));await Pw(Be,{contentsOnly:Be===f,isWorkspaceDir:we})}};for(let[Be,Ce]of p){let g=S.get(Be);for(let[we,ye]of Ce.children){if(we===".")continue;let Ae=g&&g.children.get(we),se=J.join(Be,we);await N(se,ye,Ae)}}let U=async(Be,Ce,g)=>{if(g){TBe(Ce.locator,g.locator)||await Pw(Be,{contentsOnly:Ce.linkType==="HARD"});for(let[we,ye]of Ce.children){let Ae=g.children.get(we);await U(J.join(Be,we),ye,Ae)}}else{Ce.children.has(Ri)&&await Pw(J.join(Be,Ri),{contentsOnly:!0});let we=J.basename(Be)===Ri&&S.has(J.join(J.dirname(Be)));await Pw(Be,{contentsOnly:Ce.linkType==="HARD",isWorkspaceDir:we})}};for(let[Be,Ce]of S){let g=p.get(Be);for(let[we,ye]of Ce.children){if(we===".")continue;let Ae=g&&g.children.get(we);await U(J.join(Be,we),ye,Ae)}}let W=new Map,ee=[];for(let[Be,Ce]of E)for(let g of Ce){let{locationRoot:we,segments:ye}=aN(g,{skipPrefix:s.cwd}),Ae=S.get(we),se=we;if(Ae){for(let X of ye)if(se=J.join(se,X),Ae=Ae.children.get(X),!Ae)break;if(Ae){let X=TBe(Ae.locator,Be),De=e.get(Ae.locator),Te=De.target,mt=se,j=De.linkType;if(X)W.has(Te)||W.set(Te,mt);else if(Te!==mt){let rt=G.parseLocator(Ae.locator);G.isVirtualLocator(rt)&&(rt=G.devirtualizeLocator(rt)),ee.push({srcDir:Te,dstDir:mt,linkType:j,realLocatorHash:rt.locatorHash})}}}}for(let[Be,{locations:Ce}]of e.entries())for(let g of Ce){let{locationRoot:we,segments:ye}=aN(g,{skipPrefix:s.cwd}),Ae=p.get(we),se=S.get(we),X=we,De=e.get(Be),Te=G.parseLocator(Be);G.isVirtualLocator(Te)&&(Te=G.devirtualizeLocator(Te));let mt=Te.locatorHash,j=De.target,rt=g;if(j===rt)continue;let Fe=De.linkType;for(let Ne of ye)se=se.children.get(Ne);if(!Ae)ee.push({srcDir:j,dstDir:rt,linkType:Fe,realLocatorHash:mt});else for(let Ne of ye)if(X=J.join(X,Ne),Ae=Ae.children.get(Ne),!Ae){ee.push({srcDir:j,dstDir:rt,linkType:Fe,realLocatorHash:mt});break}}let ie=Ao.progressViaCounter(ee.length),ue=a.reportProgress(ie),le=s.configuration.get("nmMode"),me={value:le},pe=s.configuration.get("winLinkType");try{let Be=me.value==="hardlinks-global"?`${SY(s.configuration)}/v1`:null;if(Be&&!await ce.existsPromise(Be)){await ce.mkdirpPromise(Be);for(let g=0;g<256;g++)await ce.mkdirPromise(J.join(Be,g.toString(16).padStart(2,"0")))}for(let g of ee)(g.linkType==="SOFT"||!W.has(g.srcDir))&&(W.set(g.srcDir,g.dstDir),await I({...g,globalHardlinksStore:Be,nmMode:me,windowsLinkType:pe,packageChecksum:c.get(g.realLocatorHash)||null}));await Promise.all(b),b.length=0;for(let g of ee){let we=W.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==we&&await T(we,g.dstDir,{nmMode:me})}await Promise.all(b),await ce.mkdirPromise(f,{recursive:!0}),Ldt(h,new Set(ee.map(g=>g.dstDir)));let Ce=await Odt(e,S,s.cwd,{loadManifest:n});await Udt(h,Ce,s.cwd,pe),await Rdt(s,e,Ce,me,{installChangedByUser:C}),le=="hardlinks-global"&&me.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{ue.stop()}}async function Udt(t,e,r,s){for(let a of t.keys()){if(J.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=J.join(a,Ri,oN);await ce.removePromise(n)}}for(let[a,n]of e){if(J.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let c=J.join(a,Ri,oN),f=t.get(a)||new Map;await ce.mkdirPromise(c,{recursive:!0});for(let p of f.keys())n.has(p)||(await ce.removePromise(J.join(c,p)),process.platform==="win32"&&await ce.removePromise(J.join(c,`${p}.cmd`)));for(let[p,h]of n){let E=f.get(p),C=J.join(c,p);E!==h&&(process.platform==="win32"?await(0,FBe.default)(fe.fromPortablePath(h),fe.fromPortablePath(C),{createPwshFile:!1}):(await ce.removePromise(C),await vY(h,C,s),J.contains(r,await ce.realpathPromise(h))!==null&&await ce.chmodPromise(h,493)))}}}Ge();Dt();eA();var GD=class extends sg{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new DY(r)}},DY=class extends Gm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let s=new uo({baseFs:new $f({maxOpenFiles:80,readOnlyArchives:!0})}),a=IBe(r,this.opts.project.cwd,s),{tree:n,errors:c}=kD(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:C,text:S}of c)this.opts.report.reportError(C,S);return}let f=new Map;r.fallbackPool=f;let p=(C,S)=>{let b=G.parseLocator(S.locator),I=G.stringifyIdent(b);I===C?f.set(C,b.reference):f.set(C,[I,b.reference])},h=J.join(this.opts.project.cwd,Er.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 C of E.dirList){let S=J.join(h,C),b=n.get(S);if(typeof b>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in b)p(C,b);else for(let I of b.dirList){let T=J.join(S,I),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(`${C}/${I}`,N);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var _dt={hooks:{cleanGlobalArtifacts:async t=>{let e=SY(t);await ce.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:[jD,GD]},Hdt=_dt;var PK={};Vt(PK,{NpmHttpFetcher:()=>VD,NpmRemapResolver:()=>JD,NpmSemverFetcher:()=>oh,NpmSemverResolver:()=>KD,NpmTagResolver:()=>zD,default:()=>rPt,npmConfigUtils:()=>hi,npmHttpUtils:()=>an,npmPublishUtils:()=>v1});Ge();var JBe=ut(Ai());var oi="npm:";var an={};Vt(an,{AuthType:()=>WBe,customPackageError:()=>qm,del:()=>imt,get:()=>Wm,getIdentUrl:()=>WD,getPackageMetadata:()=>Qw,handleInvalidAuthenticationError:()=>ag,post:()=>rmt,put:()=>nmt});Ge();Ge();Dt();var kY=ut(Vv());ql();var qBe=ut(Ai());var hi={};Vt(hi,{RegistryType:()=>jBe,getAuditRegistry:()=>jdt,getAuthConfiguration:()=>xY,getDefaultRegistry:()=>qD,getPublishRegistry:()=>Gdt,getRegistryConfiguration:()=>GBe,getScopeConfiguration:()=>bY,getScopeRegistry:()=>bw,isPackageApproved:()=>xw,normalizeRegistry:()=>Jc});Ge();var HBe=ut(Go()),jBe=(s=>(s.AUDIT_REGISTRY="npmAuditRegistry",s.FETCH_REGISTRY="npmRegistryServer",s.PUBLISH_REGISTRY="npmPublishRegistry",s))(jBe||{});function Jc(t){return t.replace(/\/$/,"")}function jdt({configuration:t}){return qD({configuration:t,type:"npmAuditRegistry"})}function Gdt(t,{configuration:e}){return t.publishConfig?.registry?Jc(t.publishConfig.registry):t.name?bw(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):qD({configuration:e,type:"npmPublishRegistry"})}function bw(t,{configuration:e,type:r="npmRegistryServer"}){let s=bY(t,{configuration:e});if(s===null)return qD({configuration:e,type:r});let a=s.get(r);return a===null?qD({configuration:e,type:r}):Jc(a)}function qD({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return Jc(r!==null?r:t.get("npmRegistryServer"))}function GBe(t,{configuration:e}){let r=e.get("npmRegistries"),s=Jc(t),a=r.get(s);if(typeof a<"u")return a;let n=r.get(s.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}var qdt=new Map([["npmRegistryServer","https://npm.jsr.io/"]]);function bY(t,{configuration:e}){if(t===null)return null;let s=e.get("npmScopes").get(t);return s||(t==="jsr"?qdt:null)}function xY(t,{configuration:e,ident:r}){let s=r&&bY(r.scope,{configuration:e});return s?.get("npmAuthIdent")||s?.get("npmAuthToken")?s:GBe(t,{configuration:e})||e}function Wdt({configuration:t,version:e,publishTimes:r}){let s=t.get("npmMinimalAgeGate");if(s){let a=r?.[e];if(typeof a>"u"||(new Date().getTime()-new Date(a).getTime())/60/1e3Ydt(e,r,s))}function xw(t){return!Wdt(t)||Vdt(t)}var WBe=(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))(WBe||{});async function ag(t,{attemptedAs:e,registry:r,headers:s,configuration:a}){if(cN(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 omt(r,s,{configuration:a})}`:`attempted as ${e}`})`)}function qm(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 ${he.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function WD(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var YBe=new Map,Jdt=new Map;async function Kdt(t){return await je.getFactoryWithDefault(YBe,t,async()=>{let e=null;try{e=await ce.readJsonPromise(t)}catch{}return e})}async function zdt(t,e,{configuration:r,cached:s,registry:a,headers:n,version:c,...f}){return await je.getFactoryWithDefault(Jdt,t,async()=>await Wm(WD(e),{...f,customErrorMessage:qm,configuration:r,registry:a,ident:e,headers:{...n,"If-None-Match":s?.etag,"If-Modified-Since":s?.lastModified},wrapNetworkRequest:async p=>async()=>{let h=await p();if(h.statusCode===304){if(s===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...h,body:s.metadata}}let E=Xdt(JSON.parse(h.body.toString())),C={metadata:E,etag:h.headers.etag,lastModified:h.headers["last-modified"]};return YBe.set(t,Promise.resolve(C)),Promise.resolve().then(async()=>{let S=`${t}-${process.pid}.tmp`;await ce.mkdirPromise(J.dirname(S),{recursive:!0}),await ce.writeJsonPromise(S,C,{compact:!0}),await ce.renamePromise(S,t)}).catch(()=>{}),{...h,body:E}}}))}function Zdt(t){return t.scope!==null?`@${t.scope}-${t.name}-${t.scope.length}`:t.name}async function Qw(t,{cache:e,project:r,registry:s,headers:a,version:n,...c}){let{configuration:f}=r;s=YD(f,{ident:t,registry:s});let p=emt(f,s),h=J.join(p,`${Zdt(t)}.json`),E=null;if(!r.lockfileNeedsRefresh&&(E=await Kdt(h),E)){if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(f.get("enableOfflineMode")){let C=structuredClone(E.metadata),S=new Set;if(e){for(let I of Object.keys(C.versions)){let T=G.makeLocator(t,`npm:${I}`),N=e.getLocatorMirrorPath(T);(!N||!ce.existsSync(N))&&(delete C.versions[I],S.add(I))}let b=C["dist-tags"].latest;if(S.has(b)){let I=Object.keys(E.metadata.versions).sort(qBe.default.compare),T=I.indexOf(b);for(;S.has(I[T])&&T>=0;)T-=1;T>=0?C["dist-tags"].latest=I[T]:delete C["dist-tags"].latest}}return C}}return await zdt(h,t,{...c,configuration:f,cached:E,registry:s,headers:a,version:n})}var VBe=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function Xdt(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,Kd(r,VBe)])),time:t.time}}var $dt=Nn.makeHash("time",...VBe).slice(0,6);function emt(t,e){let r=tmt(t),s=new URL(e);return J.join(r,$dt,s.hostname)}function tmt(t){return J.join(t.get("globalFolder"),"metadata/npm")}async function Wm(t,{configuration:e,headers:r,ident:s,authType:a,allowOidc:n,registry:c,...f}){c=YD(e,{ident:s,registry:c}),s&&s.scope&&typeof a>"u"&&(a=1);let p=await lN(c,{authType:a,allowOidc:n,configuration:e,ident:s});p&&(r={...r,authorization:p});try{return await ln.get(t.charAt(0)==="/"?`${c}${t}`:t,{configuration:e,headers:r,...f})}catch(h){throw await ag(h,{registry:c,configuration:e,headers:r}),h}}async function rmt(t,e,{attemptedAs:r,configuration:s,headers:a,ident:n,authType:c=3,allowOidc:f,registry:p,otp:h,...E}){p=YD(s,{ident:n,registry:p});let C=await lN(p,{authType:c,allowOidc:f,configuration:s,ident:n});C&&(a={...a,authorization:C}),h&&(a={...a,...kw(h)});try{return await ln.post(p+t,e,{configuration:s,headers:a,...E})}catch(S){if(!cN(S)||h)throw await ag(S,{attemptedAs:r,registry:p,configuration:s,headers:a}),S;h=await QY(S,{configuration:s});let b={...a,...kw(h)};try{return await ln.post(`${p}${t}`,e,{configuration:s,headers:b,...E})}catch(I){throw await ag(I,{attemptedAs:r,registry:p,configuration:s,headers:a}),I}}}async function nmt(t,e,{attemptedAs:r,configuration:s,headers:a,ident:n,authType:c=3,allowOidc:f,registry:p,otp:h,...E}){p=YD(s,{ident:n,registry:p});let C=await lN(p,{authType:c,allowOidc:f,configuration:s,ident:n});C&&(a={...a,authorization:C}),h&&(a={...a,...kw(h)});try{return await ln.put(p+t,e,{configuration:s,headers:a,...E})}catch(S){if(!cN(S))throw await ag(S,{attemptedAs:r,registry:p,configuration:s,headers:a}),S;h=await QY(S,{configuration:s});let b={...a,...kw(h)};try{return await ln.put(`${p}${t}`,e,{configuration:s,headers:b,...E})}catch(I){throw await ag(I,{attemptedAs:r,registry:p,configuration:s,headers:a}),I}}}async function imt(t,{attemptedAs:e,configuration:r,headers:s,ident:a,authType:n=3,allowOidc:c,registry:f,otp:p,...h}){f=YD(r,{ident:a,registry:f});let E=await lN(f,{authType:n,allowOidc:c,configuration:r,ident:a});E&&(s={...s,authorization:E}),p&&(s={...s,...kw(p)});try{return await ln.del(f+t,{configuration:r,headers:s,...h})}catch(C){if(!cN(C)||p)throw await ag(C,{attemptedAs:e,registry:f,configuration:r,headers:s}),C;p=await QY(C,{configuration:r});let S={...s,...kw(p)};try{return await ln.del(`${f}${t}`,{configuration:r,headers:S,...h})}catch(b){throw await ag(b,{attemptedAs:e,registry:f,configuration:r,headers:s}),b}}}function YD(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return bw(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return Jc(r)}async function lN(t,{authType:e=2,allowOidc:r=!1,configuration:s,ident:a}){let n=xY(t,{configuration:s,ident:a}),c=smt(n,e);if(!c)return null;let f=await s.reduceHook(p=>p.getNpmAuthenticationHeader,void 0,t,{configuration:s,ident:a});if(f)return f;if(n.get("npmAuthToken"))return`Bearer ${n.get("npmAuthToken")}`;if(n.get("npmAuthIdent")){let p=n.get("npmAuthIdent");return p.includes(":")?`Basic ${Buffer.from(p).toString("base64")}`:`Basic ${p}`}if(r&&a){let p=await amt(t,{configuration:s,ident:a});if(p)return`Bearer ${p}`}if(c&&e!==1)throw new jt(33,"No authentication configured for request");return null}function smt(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 omt(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await ln.get(new URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function QY(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Ot.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,he.pretty(e,"$1",he.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&fs.openUrl){let{openNow:c}=await(0,kY.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});c&&(await fs.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:s}=await(0,kY.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(` -`),s}function cN(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 kw(t){return{"npm-otp":t}}async function amt(t,{configuration:e,ident:r}){let s=null;if(process.env.GITLAB)s=process.env.NPM_ID_TOKEN||null;else if(process.env.GITHUB_ACTIONS){if(!(process.env.ACTIONS_ID_TOKEN_REQUEST_URL&&process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN))return null;let a=`npm:${new URL(t).host.replace("registry.yarnpkg.com","registry.npmjs.org").replace("yarn.npmjs.org","registry.npmjs.org")}`,n=new URL(process.env.ACTIONS_ID_TOKEN_REQUEST_URL);n.searchParams.append("audience",a),s=(await ln.get(n.href,{configuration:e,jsonResponse:!0,headers:{Authorization:`Bearer ${process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN}`}})).value}if(!s)return null;try{return(await ln.post(`${t}/-/npm/v1/oidc/token/exchange/package${WD(r)}`,null,{configuration:e,jsonResponse:!0,headers:{Authorization:`Bearer ${s}`}})).token||null}catch{}return null}var VD=class{supports(e,r){if(!e.reference.startsWith(oi))return!1;let{selector:s,params:a}=G.parseRange(e.reference);return!(!JBe.default.valid(s)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{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:c}}async fetchFromNetwork(e,r){let{params:s}=G.parseRange(e.reference);if(s===null||typeof s.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await Wm(s.__archiveUrl,{customErrorMessage:qm,configuration:r.project.configuration,ident:e});return await ps.convertToZip(a,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}};Ge();var JD=class{supportsDescriptor(e,r){return!(!e.range.startsWith(oi)||!G.tryParseDescriptor(e.range.slice(oi.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){let s=r.project.configuration.normalizeDependency(G.parseDescriptor(e.range.slice(oi.length),!0));return r.resolver.getResolutionDependencies(s,r)}async getCandidates(e,r,s){let a=s.project.configuration.normalizeDependency(G.parseDescriptor(e.range.slice(oi.length),!0));return await s.resolver.getCandidates(a,r,s)}async getSatisfying(e,r,s,a){let n=a.project.configuration.normalizeDependency(G.parseDescriptor(e.range.slice(oi.length),!0));return a.resolver.getSatisfying(n,r,s,a)}resolve(e,r){throw new Error("Unreachable")}};Ge();Ge();var KBe=ut(Ai());var oh=class t{supports(e,r){if(!e.reference.startsWith(oi))return!1;let s=new URL(e.reference);return!(!KBe.default.valid(s.pathname)||s.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{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:c}}async fetchFromNetwork(e,r){let s;try{s=await Wm(t.getLocatorUrl(e),{customErrorMessage:qm,configuration:r.project.configuration,ident:e})}catch{s=await Wm(t.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:qm,configuration:r.project.configuration,ident:e})}return await ps.convertToZip(s,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:s}){let a=bw(e.scope,{configuration:s}),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=Fr.clean(e.reference.slice(oi.length));if(r===null)throw new jt(10,"The npm semver resolver got selected, but the version isn't semver");return`${WD(e)}/-/${e.name}-${r}.tgz`}};Ge();Ge();Ge();var RY=ut(Ai());var uN=G.makeIdent(null,"node-gyp"),lmt=/\b(node-gyp|prebuild-install)\b/,KD=class{supportsDescriptor(e,r){return e.range.startsWith(oi)?!!Fr.validRange(e.range.slice(oi.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(oi))return!1;let{selector:s}=G.parseRange(e.reference);return!!RY.default.valid(s)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){let a=Fr.validRange(e.range.slice(oi.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(oi.length)}`);let n=await Qw(e,{cache:s.fetchOptions?.cache,project:s.project,version:RY.default.valid(a.raw)?a.raw:void 0}),c=je.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new Fr.SemVer(h);if(a.test(E))return xw({configuration:s.project.configuration,ident:e,version:h,publishTimes:n.time})?E:je.mapAndFilter.skip}catch{}return je.mapAndFilter.skip}),f=c.filter(h=>!n.versions[h.raw].deprecated),p=f.length>0?f:c;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=G.makeLocator(e,`${oi}${h.raw}`),C=n.versions[h.raw].dist.tarball;return oh.isConventionalTarballUrl(E,C,{configuration:s.project.configuration})?E:G.bindLocator(E,{__archiveUrl:C})})}async getSatisfying(e,r,s,a){let n=Fr.validRange(e.range.slice(oi.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(oi.length)}`);return{locators:je.mapAndFilter(s,p=>{if(p.identHash!==e.identHash)return je.mapAndFilter.skip;let h=G.tryParseRange(p.reference,{requireProtocol:oi});if(!h)return je.mapAndFilter.skip;let E=new Fr.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:je.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:s}=G.parseRange(e.reference),a=Fr.clean(s);if(a===null)throw new jt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await Qw(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 c=new Ut;if(c.load(n.versions[a]),!c.dependencies.has(uN.identHash)&&!c.peerDependencies.has(uN.identHash)){for(let f of c.scripts.values())if(f.match(lmt)){c.dependencies.set(uN.identHash,G.makeDescriptor(uN,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:c.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(c.dependencies),peerDependencies:c.peerDependencies,dependenciesMeta:c.dependenciesMeta,peerDependenciesMeta:c.peerDependenciesMeta,bin:c.bin}}};Ge();Ge();var fN=ut(Ai());var zD=class{supportsDescriptor(e,r){return!(!e.range.startsWith(oi)||!Mp.test(e.range.slice(oi.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){let a=e.range.slice(oi.length),n=await Qw(e,{cache:s.fetchOptions?.cache,project:s.project});if(!Object.hasOwn(n,"dist-tags"))throw new jt(15,'Registry returned invalid data - missing "dist-tags" field');let c=n["dist-tags"];if(!Object.hasOwn(c,a))throw new jt(16,`Registry failed to return tag "${a}"`);let f=Object.keys(n.versions),p=n.time,h=c[a];if(a==="latest"&&!xw({configuration:s.project.configuration,ident:e,version:h,publishTimes:p})){let S=h.includes("-"),b=fN.default.rsort(f).find(I=>fN.default.lt(I,h)&&(S||!I.includes("-"))&&xw({configuration:s.project.configuration,ident:e,version:I,publishTimes:p}));if(!b)throw new jt(16,`The version for tag "${a}" is quarantined, and no lower version is available`);h=b}let E=G.makeLocator(e,`${oi}${h}`),C=n.versions[h].dist.tarball;return oh.isConventionalTarballUrl(E,C,{configuration:s.project.configuration})?[E]:[G.bindLocator(E,{__archiveUrl:C})]}async getSatisfying(e,r,s,a){let n=[];for(let c of s){if(c.identHash!==e.identHash)continue;let f=G.tryParseRange(c.reference,{requireProtocol:oi});if(!(!f||!fN.default.valid(f.selector))){if(f.params?.__archiveUrl){let p=G.makeRange({protocol:oi,selector:f.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(G.makeDescriptor(e,p),r,a);if(c.reference!==h.reference)continue}n.push(c)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var v1={};Vt(v1,{getGitHead:()=>$Dt,getPublishAccess:()=>Uxe,getReadmeContent:()=>_xe,makePublishBody:()=>XDt});Ge();Ge();Dt();var IV={};Vt(IV,{PackCommand:()=>jw,default:()=>HEt,packUtils:()=>yA});Ge();Ge();Ge();Dt();Yt();var yA={};Vt(yA,{genPackList:()=>FN,genPackStream:()=>EV,genPackageManifest:()=>DSe,hasPackScripts:()=>mV,prepareForPack:()=>yV});Ge();Dt();var dV=ut(Go()),vSe=ut(ISe()),SSe=Ie("zlib"),kEt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],QEt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function mV(t){return!!(In.hasWorkspaceScript(t,"prepack")||In.hasWorkspaceScript(t,"postpack"))}async function yV(t,{report:e},r){await In.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let s=J.join(t.cwd,Ut.fileName);await ce.existsPromise(s)&&await t.manifest.loadFile(s,{baseFs:ce}),await r()}finally{await In.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function EV(t,e){typeof e>"u"&&(e=await FN(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(J.normalize(n));for(let n of t.manifest.bin.values())r.add(J.normalize(n));let s=vSe.default.pack();process.nextTick(async()=>{for(let n of e){let c=J.normalize(n),f=J.resolve(t.cwd,c),p=J.join("package",c),h=await ce.lstatPromise(f),E={name:p,mtime:new Date(fi.SAFE_TIME*1e3)},C=r.has(c)?493:420,S,b,I=new Promise((N,U)=>{S=N,b=U}),T=N=>{N?b(N):S()};if(h.isFile()){let N;c==="package.json"?N=Buffer.from(JSON.stringify(await DSe(t),null,2)):N=await ce.readFilePromise(f),s.entry({...E,mode:C,type:"file"},N,T)}else h.isSymbolicLink()?s.entry({...E,mode:C,type:"symlink",linkname:await ce.readlinkPromise(f)},T):T(new Error(`Unsupported file type ${h.mode} for ${fe.fromPortablePath(c)}`));await I}s.finalize()});let a=(0,SSe.createGzip)();return s.pipe(a),a}async function DSe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function FN(t){let e=t.project,r=e.configuration,s={accept:[],reject:[]};for(let C of QEt)s.reject.push(C);for(let C of kEt)s.accept.push(C);s.reject.push(r.get("rcFilename"));let a=C=>{if(C===null||!C.startsWith(`${t.cwd}/`))return;let S=J.relative(t.cwd,C),b=J.resolve(vt.root,S);s.reject.push(b)};a(J.resolve(e.cwd,Er.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(C=>C.populateYarnPaths,e,C=>{a(C)});for(let C of e.workspaces){let S=J.relative(t.cwd,C.cwd);S!==""&&!S.match(/^(\.\.)?\//)&&s.reject.push(`/${S}`)}let n={accept:[],reject:[]},c=t.manifest.publishConfig?.main??t.manifest.main,f=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;c!=null&&n.accept.push(J.resolve(vt.root,c)),f!=null&&n.accept.push(J.resolve(vt.root,f)),typeof p=="string"&&n.accept.push(J.resolve(vt.root,p));for(let C of h.values())n.accept.push(J.resolve(vt.root,C));if(p instanceof Map)for(let[C,S]of p.entries())n.accept.push(J.resolve(vt.root,C)),typeof S=="string"&&n.accept.push(J.resolve(vt.root,S));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let C of t.manifest.files)PSe(n.accept,C,{cwd:vt.root})}return await REt(t.cwd,{hasExplicitFileList:E,globalList:s,ignoreList:n})}async function REt(t,{hasExplicitFileList:e,globalList:r,ignoreList:s}){let a=[],n=new Hf(t),c=[[vt.root,[s]]];for(;c.length>0;){let[f,p]=c.pop(),h=await n.lstatPromise(f);if(!wSe(f,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=await n.readdirPromise(f),C=!1,S=!1;if(!e||f!==vt.root)for(let T of E)C=C||T===".gitignore",S=S||T===".npmignore";let b=S?await CSe(n,f,".npmignore"):C?await CSe(n,f,".gitignore"):null,I=b!==null?[b].concat(p):p;wSe(f,{globalList:r,ignoreLists:p})&&(I=[...p,{accept:[],reject:["**/*"]}]);for(let T of E)c.push([J.resolve(f,T),I])}else(h.isFile()||h.isSymbolicLink())&&a.push(J.relative(vt.root,f))}return a.sort()}async function CSe(t,e,r){let s={accept:[],reject:[]},a=await t.readFilePromise(J.join(e,r),"utf8");for(let n of a.split(/\n/g))PSe(s.reject,n,{cwd:e});return s}function TEt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=J.resolve(e,t)),r&&(t=`!${t}`),t}function PSe(t,e,{cwd:r}){let s=e.trim();s===""||s[0]==="#"||t.push(TEt(s,{cwd:r}))}function wSe(t,{globalList:e,ignoreLists:r}){let s=TN(t,e.accept);if(s!==0)return s===2;let a=TN(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let c=TN(t,n.accept);if(c!==0)return c===2;let f=TN(t,n.reject);if(f!==0)return f===1}return!1}function TN(t,e){let r=e,s=[];for(let a=0;a{await yV(a,{report:p},async()=>{p.reportJson({base:fe.fromPortablePath(a.cwd)});let h=await FN(a);for(let E of h)p.reportInfo(null,fe.fromPortablePath(E)),p.reportJson({location:fe.fromPortablePath(E)});if(!this.dryRun){let E=await EV(a,h);await ce.mkdirPromise(J.dirname(c),{recursive:!0});let C=ce.createWriteStream(c);E.pipe(C),await new Promise(S=>{C.on("finish",S)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${he.pretty(r,c,he.Type.PATH)}`),p.reportJson({output:fe.fromPortablePath(c)}))})).exitCode()}};function FEt(t,{workspace:e}){let r=t.replace("%s",NEt(e)).replace("%v",OEt(e));return fe.toPortablePath(r)}function NEt(t){return t.manifest.name!==null?G.slugifyIdent(t.manifest.name):"package"}function OEt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var LEt=["dependencies","devDependencies","peerDependencies"],MEt="workspace:",UEt=(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 s of LEt)for(let a of t.manifest.getForScope(s).values()){let n=r.tryWorkspaceByDescriptor(a),c=G.parseRange(a.range);if(c.protocol===MEt)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 f;G.areDescriptorsEqual(a,n.anchoredDescriptor)||c.selector==="*"?f=n.manifest.version??"0.0.0":c.selector==="~"||c.selector==="^"?f=`${c.selector}${n.manifest.version??"0.0.0"}`:f=c.selector;let p=s==="dependencies"?G.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":s;e[h][G.stringifyIdent(a)]=f}}},_Et={hooks:{beforeWorkspacePacking:UEt},commands:[jw]},HEt=_Et;var Mxe=ut(OSe());Ge();var Oxe=ut(Nxe()),{env:Bt}=process,GDt="application/vnd.in-toto+json",qDt="https://in-toto.io/Statement/v0.1",WDt="https://in-toto.io/Statement/v1",YDt="https://slsa.dev/provenance/v0.2",VDt="https://slsa.dev/provenance/v1",JDt="https://github.com/actions/runner",KDt="https://slsa-framework.github.io/github-actions-buildtypes/workflow/v1",zDt="https://github.com/npm/cli/gitlab",ZDt="v0alpha1",Lxe=async(t,e)=>{let r;if(Bt.GITHUB_ACTIONS){if(!Bt.ACTIONS_ID_TOKEN_REQUEST_URL)throw new jt(91,'Provenance generation in GitHub Actions requires "write" access to the "id-token" permission');let s=(Bt.GITHUB_WORKFLOW_REF||"").replace(`${Bt.GITHUB_REPOSITORY}/`,""),a=s.indexOf("@"),n=s.slice(0,a),c=s.slice(a+1);r={_type:WDt,subject:t,predicateType:VDt,predicate:{buildDefinition:{buildType:KDt,externalParameters:{workflow:{ref:c,repository:`${Bt.GITHUB_SERVER_URL}/${Bt.GITHUB_REPOSITORY}`,path:n}},internalParameters:{github:{event_name:Bt.GITHUB_EVENT_NAME,repository_id:Bt.GITHUB_REPOSITORY_ID,repository_owner_id:Bt.GITHUB_REPOSITORY_OWNER_ID}},resolvedDependencies:[{uri:`git+${Bt.GITHUB_SERVER_URL}/${Bt.GITHUB_REPOSITORY}@${Bt.GITHUB_REF}`,digest:{gitCommit:Bt.GITHUB_SHA}}]},runDetails:{builder:{id:`${JDt}/${Bt.RUNNER_ENVIRONMENT}`},metadata:{invocationId:`${Bt.GITHUB_SERVER_URL}/${Bt.GITHUB_REPOSITORY}/actions/runs/${Bt.GITHUB_RUN_ID}/attempts/${Bt.GITHUB_RUN_ATTEMPT}`}}}}}else if(Bt.GITLAB_CI){if(!Bt.SIGSTORE_ID_TOKEN)throw new jt(91,`Provenance generation in GitLab CI requires "SIGSTORE_ID_TOKEN" with "sigstore" audience to be present in "id_tokens". For more info see: -https://docs.gitlab.com/ee/ci/secrets/id_token_authentication.html`);r={_type:qDt,subject:t,predicateType:YDt,predicate:{buildType:`${zDt}/${ZDt}`,builder:{id:`${Bt.CI_PROJECT_URL}/-/runners/${Bt.CI_RUNNER_ID}`},invocation:{configSource:{uri:`git+${Bt.CI_PROJECT_URL}`,digest:{sha1:Bt.CI_COMMIT_SHA},entryPoint:Bt.CI_JOB_NAME},parameters:{CI:Bt.CI,CI_API_GRAPHQL_URL:Bt.CI_API_GRAPHQL_URL,CI_API_V4_URL:Bt.CI_API_V4_URL,CI_BUILD_BEFORE_SHA:Bt.CI_BUILD_BEFORE_SHA,CI_BUILD_ID:Bt.CI_BUILD_ID,CI_BUILD_NAME:Bt.CI_BUILD_NAME,CI_BUILD_REF:Bt.CI_BUILD_REF,CI_BUILD_REF_NAME:Bt.CI_BUILD_REF_NAME,CI_BUILD_REF_SLUG:Bt.CI_BUILD_REF_SLUG,CI_BUILD_STAGE:Bt.CI_BUILD_STAGE,CI_COMMIT_BEFORE_SHA:Bt.CI_COMMIT_BEFORE_SHA,CI_COMMIT_BRANCH:Bt.CI_COMMIT_BRANCH,CI_COMMIT_REF_NAME:Bt.CI_COMMIT_REF_NAME,CI_COMMIT_REF_PROTECTED:Bt.CI_COMMIT_REF_PROTECTED,CI_COMMIT_REF_SLUG:Bt.CI_COMMIT_REF_SLUG,CI_COMMIT_SHA:Bt.CI_COMMIT_SHA,CI_COMMIT_SHORT_SHA:Bt.CI_COMMIT_SHORT_SHA,CI_COMMIT_TIMESTAMP:Bt.CI_COMMIT_TIMESTAMP,CI_COMMIT_TITLE:Bt.CI_COMMIT_TITLE,CI_CONFIG_PATH:Bt.CI_CONFIG_PATH,CI_DEFAULT_BRANCH:Bt.CI_DEFAULT_BRANCH,CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX:Bt.CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX,CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX:Bt.CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX,CI_DEPENDENCY_PROXY_SERVER:Bt.CI_DEPENDENCY_PROXY_SERVER,CI_DEPENDENCY_PROXY_USER:Bt.CI_DEPENDENCY_PROXY_USER,CI_JOB_ID:Bt.CI_JOB_ID,CI_JOB_NAME:Bt.CI_JOB_NAME,CI_JOB_NAME_SLUG:Bt.CI_JOB_NAME_SLUG,CI_JOB_STAGE:Bt.CI_JOB_STAGE,CI_JOB_STARTED_AT:Bt.CI_JOB_STARTED_AT,CI_JOB_URL:Bt.CI_JOB_URL,CI_NODE_TOTAL:Bt.CI_NODE_TOTAL,CI_PAGES_DOMAIN:Bt.CI_PAGES_DOMAIN,CI_PAGES_URL:Bt.CI_PAGES_URL,CI_PIPELINE_CREATED_AT:Bt.CI_PIPELINE_CREATED_AT,CI_PIPELINE_ID:Bt.CI_PIPELINE_ID,CI_PIPELINE_IID:Bt.CI_PIPELINE_IID,CI_PIPELINE_SOURCE:Bt.CI_PIPELINE_SOURCE,CI_PIPELINE_URL:Bt.CI_PIPELINE_URL,CI_PROJECT_CLASSIFICATION_LABEL:Bt.CI_PROJECT_CLASSIFICATION_LABEL,CI_PROJECT_DESCRIPTION:Bt.CI_PROJECT_DESCRIPTION,CI_PROJECT_ID:Bt.CI_PROJECT_ID,CI_PROJECT_NAME:Bt.CI_PROJECT_NAME,CI_PROJECT_NAMESPACE:Bt.CI_PROJECT_NAMESPACE,CI_PROJECT_NAMESPACE_ID:Bt.CI_PROJECT_NAMESPACE_ID,CI_PROJECT_PATH:Bt.CI_PROJECT_PATH,CI_PROJECT_PATH_SLUG:Bt.CI_PROJECT_PATH_SLUG,CI_PROJECT_REPOSITORY_LANGUAGES:Bt.CI_PROJECT_REPOSITORY_LANGUAGES,CI_PROJECT_ROOT_NAMESPACE:Bt.CI_PROJECT_ROOT_NAMESPACE,CI_PROJECT_TITLE:Bt.CI_PROJECT_TITLE,CI_PROJECT_URL:Bt.CI_PROJECT_URL,CI_PROJECT_VISIBILITY:Bt.CI_PROJECT_VISIBILITY,CI_REGISTRY:Bt.CI_REGISTRY,CI_REGISTRY_IMAGE:Bt.CI_REGISTRY_IMAGE,CI_REGISTRY_USER:Bt.CI_REGISTRY_USER,CI_RUNNER_DESCRIPTION:Bt.CI_RUNNER_DESCRIPTION,CI_RUNNER_ID:Bt.CI_RUNNER_ID,CI_RUNNER_TAGS:Bt.CI_RUNNER_TAGS,CI_SERVER_HOST:Bt.CI_SERVER_HOST,CI_SERVER_NAME:Bt.CI_SERVER_NAME,CI_SERVER_PORT:Bt.CI_SERVER_PORT,CI_SERVER_PROTOCOL:Bt.CI_SERVER_PROTOCOL,CI_SERVER_REVISION:Bt.CI_SERVER_REVISION,CI_SERVER_SHELL_SSH_HOST:Bt.CI_SERVER_SHELL_SSH_HOST,CI_SERVER_SHELL_SSH_PORT:Bt.CI_SERVER_SHELL_SSH_PORT,CI_SERVER_URL:Bt.CI_SERVER_URL,CI_SERVER_VERSION:Bt.CI_SERVER_VERSION,CI_SERVER_VERSION_MAJOR:Bt.CI_SERVER_VERSION_MAJOR,CI_SERVER_VERSION_MINOR:Bt.CI_SERVER_VERSION_MINOR,CI_SERVER_VERSION_PATCH:Bt.CI_SERVER_VERSION_PATCH,CI_TEMPLATE_REGISTRY_HOST:Bt.CI_TEMPLATE_REGISTRY_HOST,GITLAB_CI:Bt.GITLAB_CI,GITLAB_FEATURES:Bt.GITLAB_FEATURES,GITLAB_USER_ID:Bt.GITLAB_USER_ID,GITLAB_USER_LOGIN:Bt.GITLAB_USER_LOGIN,RUNNER_GENERATE_ARTIFACTS_METADATA:Bt.RUNNER_GENERATE_ARTIFACTS_METADATA},environment:{name:Bt.CI_RUNNER_DESCRIPTION,architecture:Bt.CI_RUNNER_EXECUTABLE_ARCH,server:Bt.CI_SERVER_URL,project:Bt.CI_PROJECT_PATH,job:{id:Bt.CI_JOB_ID},pipeline:{id:Bt.CI_PIPELINE_ID,ref:Bt.CI_CONFIG_PATH}}},metadata:{buildInvocationId:`${Bt.CI_JOB_URL}`,completeness:{parameters:!0,environment:!0,materials:!1},reproducible:!1},materials:[{uri:`git+${Bt.CI_PROJECT_URL}`,digest:{sha1:Bt.CI_COMMIT_SHA}}]}}}else throw new jt(91,"Provenance generation is only supported in GitHub Actions and GitLab CI");return Oxe.attest(Buffer.from(JSON.stringify(r)),GDt,e)};async function XDt(t,e,{access:r,tag:s,registry:a,gitHead:n,provenance:c}){let f=t.manifest.name,p=t.manifest.version,h=G.stringifyIdent(f),E=Mxe.default.fromData(e,{algorithms:["sha1","sha512"]}),C=r??Uxe(t,f),S=await _xe(t),b=await yA.genPackageManifest(t),I=`${h}-${p}.tgz`,T=new URL(`${Jc(a)}/${h}/-/${I}`),N={[I]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}};if(c){let U={name:`pkg:npm/${h.replace(/^@/,"%40")}@${p}`,digest:{sha512:E.sha512[0].hexDigest()}},W=await Lxe([U]),ee=JSON.stringify(W);N[`${h}-${p}.sigstore`]={content_type:W.mediaType,data:ee,length:ee.length}}return{_id:h,_attachments:N,name:h,access:C,"dist-tags":{[s]:p},versions:{[p]:{...b,_id:`${h}@${p}`,name:h,version:p,gitHead:n,dist:{shasum:E.sha1[0].hexDigest(),integrity:E.sha512[0].toString(),tarball:T.toString()}}},readme:S}}async function $Dt(t){try{let{stdout:e}=await qr.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}function Uxe(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 _xe(t){let e=fe.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${G.stringifyIdent(r)} -`;try{a=await ce.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var DK={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}},Hxe={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"}},ePt={npmMinimalAgeGate:{description:"Minimum age of a package version according to the publish date on the npm registry in minutes to be considered for installation",type:"NUMBER",default:0},npmPreapprovedPackages:{description:"Array of package descriptors or package name glob patterns to exclude from the minimum release age check",type:"STRING",isArray:!0,default:[]}},tPt={configuration:{...DK,...Hxe,...ePt,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...DK,...Hxe}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:Jc,valueDefinition:{description:"",type:"SHAPE",properties:{...DK}}}},fetchers:[VD,oh],resolvers:[JD,KD,zD]},rPt=tPt;var OK={};Vt(OK,{NpmAuditCommand:()=>D1,NpmInfoCommand:()=>P1,NpmLoginCommand:()=>b1,NpmLogoutCommand:()=>k1,NpmPublishCommand:()=>Q1,NpmTagAddCommand:()=>T1,NpmTagListCommand:()=>R1,NpmTagRemoveCommand:()=>F1,NpmWhoamiCommand:()=>N1,default:()=>cPt,npmAuditTypes:()=>KP,npmAuditUtils:()=>xL});Ge();Ge();Yt();var RK=ut(Go());Ul();var KP={};Vt(KP,{Environment:()=>VP,Severity:()=>JP});var VP=(s=>(s.All="all",s.Production="production",s.Development="development",s))(VP||{}),JP=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(JP||{});var xL={};Vt(xL,{allSeverities:()=>S1,getPackages:()=>QK,getReportTree:()=>xK,getSeverityInclusions:()=>bK,getTopLevelDependencies:()=>kK});Ge();var jxe=ut(Ai());var S1=["info","low","moderate","high","critical"];function bK(t){if(typeof t>"u")return new Set(S1);let e=S1.indexOf(t),r=S1.slice(e);return new Set(r)}function xK(t){let e={},r={children:e};for(let[s,a]of je.sortMap(Object.entries(t),n=>n[0]))for(let n of je.sortMap(a,c=>`${c.id}`))e[`${s}/${n.id}`]={value:he.tuple(he.Type.IDENT,G.parseIdent(s)),children:{ID:typeof n.id<"u"&&{label:"ID",value:he.tuple(he.Type.ID,n.id)},Issue:{label:"Issue",value:he.tuple(he.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:he.tuple(he.Type.URL,n.url)},Severity:{label:"Severity",value:he.tuple(he.Type.NO_HINT,n.severity)},"Vulnerable Versions":{label:"Vulnerable Versions",value:he.tuple(he.Type.RANGE,n.vulnerable_versions)},"Tree Versions":{label:"Tree Versions",children:[...n.versions].sort(jxe.default.compare).map(c=>({value:he.tuple(he.Type.REFERENCE,c)}))},Dependents:{label:"Dependents",children:je.sortMap(n.dependents,c=>G.stringifyLocator(c)).map(c=>({value:he.tuple(he.Type.LOCATOR,c)}))}}};return r}function kK(t,e,{all:r,environment:s}){let a=[],n=r?t.workspaces:[e],c=["all","production"].includes(s),f=["all","development"].includes(s);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!f:!c)||a.push({workspace:p,dependency:h});return a}function QK(t,e,{recursive:r}){let s=new Map,a=new Set,n=[],c=(f,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 S=G.stringifyIdent(E),b=je.getMapWithDefault(s,S);je.getArrayWithDefault(b,E.version).push(f)}if(r)for(let S of E.dependencies.values())n.push([E,S])};for(let{workspace:f,dependency:p}of e)n.push([f.anchoredLocator,p]);for(;n.length>0;){let[f,p]=n.shift();c(f,p)}return s}var D1=class extends ft{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=ge.String("--environment","all",{description:"Which environments to cover",validator:fo(VP)});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.noDeprecations=ge.Boolean("--no-deprecations",!1,{description:"Don't warn about deprecated packages"});this.severity=ge.String("--severity","info",{description:"Minimal severity requested for packages to be displayed",validator:fo(JP)});this.excludes=ge.Array("--exclude",[],{description:"Array of glob patterns of packages to exclude from audit"});this.ignores=ge.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 ${S1.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:s,workspace:a}=await Rt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState();let n=kK(s,a,{all:this.all,environment:this.environment}),c=QK(s,n,{recursive:this.recursive}),f=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[N,U]of c)f.some(W=>RK.default.isMatch(N,W))||(p[N]=[...U.keys()]);let h=hi.getAuditRegistry({configuration:r}),E,C=await lA.start({configuration:r,stdout:this.context.stdout},async()=>{let N=an.post("/-/npm/v1/security/advisories/bulk",p,{authType:an.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=this.noDeprecations?[]:await Promise.all(Array.from(Object.entries(p),async([ee,ie])=>{let ue=await an.getPackageMetadata(G.parseIdent(ee),{project:s});return je.mapAndFilter(ie,le=>{let{deprecated:me}=ue.versions[le];return me?[ee,le,me]:je.mapAndFilter.skip})})),W=await N;for(let[ee,ie,ue]of U.flat(1))Object.hasOwn(W,ee)&&W[ee].some(le=>Fr.satisfiesWithPrereleases(ie,le.vulnerable_versions))||(W[ee]??=[],W[ee].push({id:`${ee} (deprecation)`,title:(typeof ue=="string"?ue:"").trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:ie}));E=W});if(C.hasErrors())return C.exitCode();let S=bK(this.severity),b=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),I=Object.create(null);for(let[N,U]of Object.entries(E)){let W=U.filter(ee=>!RK.default.isMatch(`${ee.id}`,b)&&S.has(ee.severity));W.length>0&&(I[N]=W.map(ee=>{let ie=c.get(N);if(typeof ie>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let ue=[...ie.keys()].filter(me=>Fr.satisfiesWithPrereleases(me,ee.vulnerable_versions)),le=new Map;for(let me of ue)for(let pe of ie.get(me))le.set(pe.locatorHash,pe);return{...ee,versions:ue,dependents:[...le.values()]}}))}let T=Object.keys(I).length>0;return T?(xs.emitTree(xK(I),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Ot.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async N=>{N.reportInfo(1,"No audit suggestions")}),T?1:0)}};Ge();Ge();Dt();Yt();var TK=ut(Ai()),FK=Ie("util"),P1=class extends ft{constructor(){super(...arguments);this.fields=ge.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=ge.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:s}=await Rt.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],c=!1,f=await Ot.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 ie=s.topLevelWorkspace;if(!ie.manifest.name)throw new nt(`Missing ${he.pretty(r,"name",he.Type.CODE)} field in ${fe.fromPortablePath(J.join(ie.cwd,Er.manifest))}`);E=G.makeDescriptor(ie.manifest.name,"unknown")}else E=G.parseDescriptor(h);let C=an.getIdentUrl(E),S=NK(await an.get(C,{configuration:r,ident:E,jsonResponse:!0,customErrorMessage:an.customPackageError})),b=Object.keys(S.versions).sort(TK.default.compareLoose),T=S["dist-tags"].latest||b[b.length-1],N=Fr.validRange(E.range);if(N){let ie=TK.default.maxSatisfying(b,N);ie!==null?T=ie:(p.reportWarning(0,`Unmet range ${G.prettyRange(r,E.range)}; falling back to the latest version`),c=!0)}else Object.hasOwn(S["dist-tags"],E.range)?T=S["dist-tags"][E.range]:E.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${G.prettyRange(r,E.range)}; falling back to the latest version`),c=!0);let U=S.versions[T],W={...S,...U,version:T,versions:b},ee;if(a!==null){ee={};for(let ie of a){let ue=W[ie];if(typeof ue<"u")ee[ie]=ue;else{p.reportWarning(1,`The ${he.pretty(r,ie,he.Type.CODE)} field doesn't exist inside ${G.prettyIdent(r,E)}'s information`),c=!0;continue}}}else this.json||(delete W.dist,delete W.readme,delete W.users),ee=W;p.reportJson(ee),this.json||n.push(ee)}});FK.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||c)&&this.context.stdout.write(` -`),this.context.stdout.write(`${(0,FK.inspect)(p,{depth:1/0,colors:!0,compact:!1})} -`);return f.exitCode()}};function NK(t){if(Array.isArray(t)){let e=[];for(let r of t)r=NK(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 s=NK(t[r]);s&&(e[r]=s)}return e}else return t||null}Ge();Ge();Yt();var Gxe=ut(Vv()),b1=class extends ft{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Login to the publish registry"});this.alwaysAuth=ge.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),s=await kL({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Ot.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let c=await sPt({configuration:r,registry:s,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),f=await nPt(s,c,r);return await iPt(s,f,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};async function kL({scope:t,publish:e,configuration:r,cwd:s}){return t&&e?hi.getScopeRegistry(t,{configuration:r,type:hi.RegistryType.PUBLISH_REGISTRY}):t?hi.getScopeRegistry(t,{configuration:r}):e?hi.getPublishRegistry((await eC(r,s)).manifest,{configuration:r}):hi.getDefaultRegistry({configuration:r})}async function nPt(t,e,r){let s=`/-/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:an.AuthType.NO_AUTH};try{return(await an.put(s,a,n)).token}catch(E){if(!(E.originalError?.name==="HTTPError"&&E.originalError?.response.statusCode===409))throw E}let c={...n,authType:an.AuthType.NO_AUTH,headers:{authorization:`Basic ${Buffer.from(`${e.name}:${e.password}`).toString("base64")}`}},f=await an.get(s,c);for(let[E,C]of Object.entries(f))(!a[E]||E==="roles")&&(a[E]=C);let p=`${s}/-rev/${a._rev}`;return(await an.put(p,a,c)).token}async function iPt(t,e,{alwaysAuth:r,scope:s}){let a=c=>f=>{let p=je.isIndexableObject(f)?f:{},h=p[c],E=je.isIndexableObject(h)?h:{};return{...p,[c]:{...E,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=s?{npmScopes:a(s)}:{npmRegistries:a(t)};return await ze.updateHomeConfiguration(n)}async function sPt({configuration:t,registry:e,report:r,stdin:s,stdout:a}){r.reportInfo(0,`Logging in to ${he.pretty(t,e,he.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 c=await(0,Gxe.prompt)([{type:"input",name:"name",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:s,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:s,stdout:a}]);return r.reportSeparator(),c}Ge();Ge();Yt();var x1=new Set(["npmAuthIdent","npmAuthToken"]),k1=class extends ft{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=ge.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),s=async()=>{let n=await kL({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),c=await ze.find(this.context.cwd,this.context.plugins),f=G.makeIdent(this.scope??null,"pkg");return!hi.getAuthConfiguration(n,{configuration:c,ident:f}).get("npmAuthToken")};return(await Ot.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await aPt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await qxe("npmScopes",this.scope),await s()?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 c=await kL({configuration:r,cwd:this.context.cwd,publish:this.publish});await qxe("npmRegistries",c),await s()?n.reportInfo(0,`Successfully logged out from ${c}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};function oPt(t,e){let r=t[e];if(!je.isIndexableObject(r))return!1;let s=new Set(Object.keys(r));if([...x1].every(n=>!s.has(n)))return!1;for(let n of x1)s.delete(n);if(s.size===0)return t[e]=void 0,!0;let a={...r};for(let n of x1)delete a[n];return t[e]=a,!0}async function aPt(){let t=e=>{let r=!1,s=je.isIndexableObject(e)?{...e}:{};s.npmAuthToken&&(delete s.npmAuthToken,r=!0);for(let a of Object.keys(s))oPt(s,a)&&(r=!0);if(Object.keys(s).length!==0)return r?s:e};return await ze.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function qxe(t,e){return await ze.updateHomeConfiguration({[t]:r=>{let s=je.isIndexableObject(r)?r:{};if(!Object.hasOwn(s,e))return r;let a=s[e],n=je.isIndexableObject(a)?a:{},c=new Set(Object.keys(n));if([...x1].every(p=>!c.has(p)))return r;for(let p of x1)c.delete(p);if(c.size===0)return Object.keys(s).length===1?void 0:{...s,[e]:void 0};let f={};for(let p of x1)f[p]=void 0;return{...s,[e]:{...n,...f}}}})}Ge();Dt();Yt();var Q1=class extends ft{constructor(){super(...arguments);this.access=ge.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=ge.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=ge.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"});this.otp=ge.String("--otp",{description:"The OTP token to use with the command"});this.provenance=ge.Boolean("--provenance",!1,{description:"Generate provenance for the package. Only available in GitHub Actions and GitLab CI. Can be set globally through the `npmPublishProvenance` setting or the `YARN_NPM_CONFIG_PROVENANCE` environment variable, or per-package through the `publishConfig.provenance` field in package.json."});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"Show what would be published without actually publishing"});this.json=ge.Boolean("--json",!1,{description:"Output the result in JSON format"})}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:s,workspace:a}=await Rt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);if(a.manifest.private)throw new nt("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new nt("Workspaces must have valid names and versions to be published on an external registry");await s.restoreInstallState();let n=a.manifest.name,c=a.manifest.version,f=hi.getPublishRegistry(a.manifest,{configuration:r});return(await Ot.start({configuration:r,stdout:this.context.stdout,json:this.json},async h=>{if(this.tolerateRepublish)try{let E=await an.get(an.getIdentUrl(n),{configuration:r,registry:f,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,c)){let C=`Registry already knows about version ${c}; skipping.`;h.reportWarning(0,C),h.reportJson({name:n.name,version:c,registry:f,warning:C,skipped:!0});return}}catch(E){if(E.originalError?.response?.statusCode!==404)throw E}await In.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await yA.prepareForPack(a,{report:h},async()=>{let E=await yA.genPackList(a);for(let W of E)h.reportInfo(null,fe.fromPortablePath(W)),h.reportJson({file:fe.fromPortablePath(W)});let C=await yA.genPackStream(a,E),S=await je.bufferStream(C),b=await v1.getGitHead(a.cwd),I=!1,T="";a.manifest.publishConfig&&"provenance"in a.manifest.publishConfig?(I=!!a.manifest.publishConfig.provenance,T=I?"Generating provenance statement because `publishConfig.provenance` field is set.":"Skipping provenance statement because `publishConfig.provenance` field is set to false."):this.provenance?(I=!0,T="Generating provenance statement because `--provenance` flag is set."):r.get("npmPublishProvenance")&&(I=!0,T="Generating provenance statement because `npmPublishProvenance` setting is set."),T&&(h.reportInfo(null,T),h.reportJson({type:"provenance",enabled:I,provenanceMessage:T}));let N=await v1.makePublishBody(a,S,{access:this.access,tag:this.tag,registry:f,gitHead:b,provenance:I});this.dryRun||await an.put(an.getIdentUrl(n),N,{configuration:r,registry:f,ident:n,otp:this.otp,jsonResponse:!0,allowOidc:!!(process.env.CI&&(process.env.GITHUB_ACTIONS||process.env.GITLAB))});let U=this.dryRun?`[DRY RUN] Package would be published to ${f} with tag ${this.tag}`:"Package archive published";h.reportInfo(0,U),h.reportJson({name:n.name,version:c,registry:f,tag:this.tag||"latest",files:E.map(W=>fe.fromPortablePath(W)),access:this.access||null,dryRun:this.dryRun,published:!this.dryRun,message:U,provenance:!!I})})})).exitCode()}};Ge();Yt();var Wxe=ut(Ai());Ge();Dt();Yt();var R1=class extends ft{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd),n;if(typeof this.package<"u")n=G.parseIdent(this.package);else{if(!a)throw new ar(s.cwd,this.context.cwd);if(!a.manifest.name)throw new nt(`Missing 'name' field in ${fe.fromPortablePath(J.join(a.cwd,Er.manifest))}`);n=a.manifest.name}let c=await zP(n,r),p={children:je.sortMap(Object.entries(c),([h])=>h).map(([h,E])=>({value:he.tuple(he.Type.RESOLUTION,{descriptor:G.makeDescriptor(n,h),locator:G.makeLocator(n,E)})}))};return xs.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};async function zP(t,e){let r=`/-/package${an.getIdentUrl(t)}/dist-tags`;return an.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:an.customPackageError})}var T1=class extends ft{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);let n=G.parseDescriptor(this.package,!0),c=n.range;if(!Wxe.default.valid(c))throw new nt(`The range ${he.pretty(r,n.range,he.Type.RANGE)} must be a valid semver version`);let f=hi.getPublishRegistry(a.manifest,{configuration:r}),p=he.pretty(r,n,he.Type.IDENT),h=he.pretty(r,c,he.Type.RANGE),E=he.pretty(r,this.tag,he.Type.CODE);return(await Ot.start({configuration:r,stdout:this.context.stdout},async S=>{let b=await zP(n,r);Object.hasOwn(b,this.tag)&&b[this.tag]===c&&S.reportWarning(0,`Tag ${E} is already set to version ${h}`);let I=`/-/package${an.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await an.put(I,c,{configuration:r,registry:f,ident:n,jsonRequest:!0,jsonResponse:!0}),S.reportInfo(0,`Tag ${E} added to version ${h} of package ${p}`)})).exitCode()}};Ge();Yt();var F1=class extends ft{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.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 nt("The 'latest' tag cannot be removed.");let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Rt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);let n=G.parseIdent(this.package),c=hi.getPublishRegistry(a.manifest,{configuration:r}),f=he.pretty(r,this.tag,he.Type.CODE),p=he.pretty(r,n,he.Type.IDENT),h=await zP(n,r);if(!Object.hasOwn(h,this.tag))throw new nt(`${f} is not a tag of package ${p}`);return(await Ot.start({configuration:r,stdout:this.context.stdout},async C=>{let S=`/-/package${an.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await an.del(S,{configuration:r,registry:c,ident:n,jsonResponse:!0}),C.reportInfo(0,`Tag ${f} removed from package ${p}`)})).exitCode()}};Ge();Ge();Yt();var N1=class extends ft{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=ge.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),s;return this.scope&&this.publish?s=hi.getScopeRegistry(this.scope,{configuration:r,type:hi.RegistryType.PUBLISH_REGISTRY}):this.scope?s=hi.getScopeRegistry(this.scope,{configuration:r}):this.publish?s=hi.getPublishRegistry((await eC(r,this.context.cwd)).manifest,{configuration:r}):s=hi.getDefaultRegistry({configuration:r}),(await Ot.start({configuration:r,stdout:this.context.stdout},async n=>{let c;try{c=await an.get("/-/whoami",{configuration:r,registry:s,authType:an.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?G.makeIdent(this.scope,""):void 0})}catch(f){if(f.response?.statusCode===401||f.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw f}n.reportInfo(0,c.username)})).exitCode()}};var lPt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmPublishProvenance:{description:"Whether to generate provenance for the published packages",type:"BOOLEAN",default:!1},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:[D1,P1,b1,k1,Q1,T1,R1,F1,N1]},cPt=lPt;var GK={};Vt(GK,{PatchCommand:()=>H1,PatchCommitCommand:()=>_1,PatchFetcher:()=>tb,PatchResolver:()=>rb,default:()=>PPt,patchUtils:()=>gy});Ge();Ge();Dt();eA();var gy={};Vt(gy,{applyPatchFile:()=>RL,diffFolders:()=>HK,ensureUnpatchedDescriptor:()=>LK,ensureUnpatchedLocator:()=>FL,extractPackageToDisk:()=>_K,extractPatchFlags:()=>Xxe,isParentRequired:()=>UK,isPatchDescriptor:()=>TL,isPatchLocator:()=>Tg,loadPatchFiles:()=>eb,makeDescriptor:()=>NL,makeLocator:()=>MK,makePatchHash:()=>jK,parseDescriptor:()=>XP,parseLocator:()=>$P,parsePatchFile:()=>ZP,unpatchDescriptor:()=>vPt,unpatchLocator:()=>SPt});Ge();Dt();Ge();Dt();var uPt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function O1(t){return J.relative(vt.root,J.resolve(vt.root,fe.toPortablePath(t)))}function fPt(t){let e=t.trim().match(uPt);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 APt=420,pPt=493;var Yxe=()=>({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}),hPt=t=>({header:fPt(t),parts:[]}),gPt={"@":"header","-":"deletion","+":"insertion"," ":"context","\\":"pragma",undefined:"context"};function dPt(t){let e=[],r=Yxe(),s="parsing header",a=null,n=null;function c(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function f(){c(),e.push(r),r=Yxe()}for(let p=0;p0?"patch":"mode change",W=null;switch(U){case"rename":{if(!E||!C)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:s,fromPath:O1(E),toPath:O1(C)}),W=C}break;case"file deletion":{let ee=a||I;if(!ee)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:s,hunk:N&&N[0]||null,path:O1(ee),mode:QL(p),hash:S})}break;case"file creation":{let ee=n||T;if(!ee)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:s,hunk:N&&N[0]||null,path:O1(ee),mode:QL(h),hash:b})}break;case"patch":case"mode change":W=T||n;break;default:je.assertNever(U);break}W&&c&&f&&c!==f&&e.push({type:"mode change",semverExclusivity:s,path:O1(W),oldMode:QL(c),newMode:QL(f)}),W&&N&&N.length&&e.push({type:"patch",semverExclusivity:s,path:O1(W),hunks:N,beforeHash:S,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 QL(t){let e=parseInt(t,8)&511;if(e!==APt&&e!==pPt)throw new Error(`Unexpected file mode string: ${t}`);return e}function ZP(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),mPt(dPt(e))}function yPt(t){let e=0,r=0;for(let{type:s,lines:a}of t.parts)switch(s){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:je.assertNever(s);break}if(e!==t.header.original.length||r!==t.header.patched.length){let s=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${s(t.header.original.length)} ${s(t.header.patched.length)} @@, got @@ ${s(e)} ${s(r)} @@)`)}}Ge();Dt();var L1=class extends Error{constructor(r,s){super(`Cannot apply hunk #${r+1}`);this.hunk=s}};async function M1(t,e,r){let s=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,s.atime,s.mtime)}async function RL(t,{baseFs:e=new Yn,dryRun:r=!1,version:s=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&s!==null&&!Fr.satisfiesWithPrereleases(s,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 M1(e,J.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 M1(e,J.dirname(a.fromPath),async()=>{await M1(e,J.dirname(a.toPath),async()=>{await M1(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(J.dirname(a.path),{chmod:493,utimes:[fi.SAFE_TIME,fi.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,fi.SAFE_TIME,fi.SAFE_TIME)}break;case"patch":await M1(e,a.path,async()=>{await CPt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let c=(await e.statPromise(a.path)).mode;if(Vxe(a.newMode)!==Vxe(c))continue;await M1(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:je.assertNever(a);break}}function Vxe(t){return(t&64)>0}function Jxe(t){return t.replace(/\s+$/,"")}function IPt(t,e){return Jxe(t)===Jxe(e)}async function CPt({hunks:t,path:e},{baseFs:r,dryRun:s=!1}){let a=await r.statSync(e).mode,c=(await r.readFileSync(e,"utf8")).split(/\n/),f=[],p=0,h=0;for(let C of t){let S=Math.max(h,C.header.patched.start+p),b=Math.max(0,S-h),I=Math.max(0,c.length-S-C.header.original.length),T=Math.max(b,I),N=0,U=0,W=null;for(;N<=T;){if(N<=b&&(U=S-N,W=Kxe(C,c,U),W!==null)){N=-N;break}if(N<=I&&(U=S+N,W=Kxe(C,c,U),W!==null))break;N+=1}if(W===null)throw new L1(t.indexOf(C),C);f.push(W),p+=N,h=U+C.header.original.length}if(s)return;let E=0;for(let C of f)for(let S of C)switch(S.type){case"splice":{let b=S.index+E;c.splice(b,S.numToDelete,...S.linesToInsert),E+=S.linesToInsert.length-S.numToDelete}break;case"pop":c.pop();break;case"push":c.push(S.line);break;default:je.assertNever(S);break}await r.writeFilePromise(e,c.join(` -`),{mode:a})}function Kxe(t,e,r){let s=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let c=e[r];if(c==null||!IPt(c,n))return null;r+=1}a.type==="deletion"&&(s.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&s.push({type:"push",line:""}))}break;case"insertion":s.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&s.push({type:"pop"});break;default:je.assertNever(a.type);break}return s}var BPt=/^builtin<([^>]+)>$/;function U1(t,e){let{protocol:r,source:s,selector:a,params:n}=G.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(s===null)throw new Error("Patch locators must explicitly define their source");let c=a?a.split(/&/).map(E=>fe.toPortablePath(E)):[],f=n&&typeof n.locator=="string"?G.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(s);return{parentLocator:f,sourceItem:h,patchPaths:c,sourceVersion:p}}function TL(t){return t.range.startsWith("patch:")}function Tg(t){return t.reference.startsWith("patch:")}function XP(t){let{sourceItem:e,...r}=U1(t.range,G.parseDescriptor);return{...r,sourceDescriptor:e}}function $P(t){let{sourceItem:e,...r}=U1(t.reference,G.parseLocator);return{...r,sourceLocator:e}}function vPt(t){let{sourceItem:e}=U1(t.range,G.parseDescriptor);return e}function SPt(t){let{sourceItem:e}=U1(t.reference,G.parseLocator);return e}function LK(t){if(!TL(t))return t;let{sourceItem:e}=U1(t.range,G.parseDescriptor);return e}function FL(t){if(!Tg(t))return t;let{sourceItem:e}=U1(t.reference,G.parseLocator);return e}function zxe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:s,patchHash:a},n){let c=t!==null?{locator:G.stringifyLocator(t)}:{},f=typeof s<"u"?{version:s}:{},p=typeof a<"u"?{hash:a}:{};return G.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...f,...p,...c}})}function NL(t,{parentLocator:e,sourceDescriptor:r,patchPaths:s}){return G.makeDescriptor(t,zxe({parentLocator:e,sourceItem:r,patchPaths:s},G.stringifyDescriptor))}function MK(t,{parentLocator:e,sourcePackage:r,patchPaths:s,patchHash:a}){return G.makeLocator(t,zxe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:s,patchHash:a},G.stringifyLocator))}function Zxe({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:s},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let c=a.match(BPt);return c!==null?s(c[1]):a.startsWith("~/")?r(a.slice(2)):J.isAbsolute(a)?t(a):e(a)}function Xxe(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function UK(t){return Zxe({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function eb(t,e,r){let s=t!==null?await r.fetcher.fetch(t,r):null,a=s&&s.localPath?{packageFs:new Sn(vt.root),prefixPath:J.relative(vt.root,s.localPath)}:s;s&&s!==a&&s.releaseFs&&s.releaseFs();let n=await je.releaseAfterUseAsync(async()=>await Promise.all(e.map(async c=>{let f=Xxe(c),p=await Zxe({onAbsolute:async h=>await ce.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(J.join(a.prefixPath,h),"utf8")},onProject:async h=>await ce.readFilePromise(J.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(E=>E.getBuiltinPatch,r.project,h)},c);return{...f,source:p}})));for(let c of n)typeof c.source=="string"&&(c.source=c.source.replace(/\r\n?/g,` -`));return n}async function _K(t,{cache:e,project:r}){let s=r.storedPackages.get(t.locatorHash);if(typeof s>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=FL(t),n=r.storedChecksums,c=new ki,f=await ce.mktempPromise(),p=J.join(f,"source"),h=J.join(f,"user"),E=J.join(f,".yarn-patch.json"),C=r.configuration.makeFetcher(),S=[];try{let b,I;if(t.locatorHash===a.locatorHash){let T=await C.fetch(t,{cache:e,project:r,fetcher:C,checksums:n,report:c});S.push(()=>T.releaseFs?.()),b=T,I=T}else b=await C.fetch(t,{cache:e,project:r,fetcher:C,checksums:n,report:c}),S.push(()=>b.releaseFs?.()),I=await C.fetch(t,{cache:e,project:r,fetcher:C,checksums:n,report:c}),S.push(()=>I.releaseFs?.());await Promise.all([ce.copyPromise(p,b.prefixPath,{baseFs:b.packageFs}),ce.copyPromise(h,I.prefixPath,{baseFs:I.packageFs}),ce.writeJsonPromise(E,{locator:G.stringifyLocator(t),version:s.version})])}finally{for(let b of S)b()}return ce.detachTemp(f),h}async function HK(t,e){let r=fe.fromPortablePath(t).replace(/\\/g,"/"),s=fe.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await qr.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,s],{cwd:fe.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 c=r.startsWith("/")?f=>f.slice(1):f=>f;return a.replace(new RegExp(`(a|b)(${je.escapeRegExp(`/${c(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${je.escapeRegExp(`/${c(s)}/`)}`,"g"),"$1/").replace(new RegExp(je.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(je.escapeRegExp(`${s}/`),"g"),"")}function jK(t,e){let r=[];for(let{source:s}of t){if(s===null)continue;let a=ZP(s);for(let n of a){let{semverExclusivity:c,...f}=n;c!==null&&e!==null&&!Fr.satisfiesWithPrereleases(e,c)||r.push(JSON.stringify(f))}}return Nn.makeHash(`${3}`,...r).slice(0,6)}Ge();function $xe(t,{configuration:e,report:r}){for(let s of t.parts)for(let a of s.lines)switch(s.type){case"context":r.reportInfo(null,` ${he.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${he.pretty(e,a,he.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${he.pretty(e,a,he.Type.ADDED)}`);break;default:je.assertNever(s.type)}}var tb=class{supports(e,r){return!!Tg(e)}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{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:c}}async patchPackage(e,r){let{parentLocator:s,sourceLocator:a,sourceVersion:n,patchPaths:c}=$P(e),f=await eb(s,c,r),p=await ce.mktempPromise(),h=J.join(p,"current.zip"),E=await r.fetcher.fetch(a,r),C=G.getIdentVendorPath(e),S=new As(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await je.releaseAfterUseAsync(async()=>{await S.copyPromise(C,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs),S.saveAndClose();for(let{source:b,optional:I}of f){if(b===null)continue;let T=new As(h,{level:r.project.configuration.get("compressionLevel")}),N=new Sn(J.resolve(vt.root,C),{baseFs:T});try{await RL(ZP(b),{baseFs:N,version:n})}catch(U){if(!(U instanceof L1))throw U;let W=r.project.configuration.get("enableInlineHunks"),ee=!W&&!I?" (set enableInlineHunks for details)":"",ie=`${G.prettyLocator(r.project.configuration,e)}: ${U.message}${ee}`,ue=le=>{W&&$xe(U.hunk,{configuration:r.project.configuration,report:le})};if(T.discardAndClose(),I){r.report.reportWarningOnce(66,ie,{reportExtra:ue});continue}else throw new jt(66,ie,ue)}T.saveAndClose()}return new As(h,{level:r.project.configuration.get("compressionLevel")})}};Ge();var rb=class{supportsDescriptor(e,r){return!!TL(e)}supportsLocator(e,r){return!!Tg(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){let{patchPaths:a}=XP(e);return a.every(n=>!UK(n))?e:G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:s}=XP(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(s)}}async getCandidates(e,r,s){if(!s.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=XP(e),c=await eb(a,n,s.fetchOptions),f=r.sourceDescriptor;if(typeof f>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=jK(c,f.version);return[MK(e,{parentLocator:a,sourcePackage:f,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:s}=$P(e);return{...await r.resolver.resolve(s,r),...e}}};Ge();Dt();Yt();var _1=class extends ft{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState();let n=J.resolve(this.context.cwd,fe.toPortablePath(this.patchFolder)),c=J.join(n,"../source"),f=J.join(n,"../.yarn-patch.json");if(!ce.existsSync(c))throw new nt("The argument folder didn't get created by 'yarn patch'");let p=await HK(c,n),h=await ce.readJsonPromise(f),E=G.parseLocator(h.locator,!0);if(!s.storedPackages.has(E.locatorHash))throw new nt("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let C=r.get("patchFolder"),S=J.join(C,`${G.slugifyLocator(E)}.patch`);await ce.mkdirPromise(C,{recursive:!0}),await ce.writeFilePromise(S,p);let b=[],I=new Map;for(let T of s.storedPackages.values()){if(G.isVirtualLocator(T))continue;let N=T.dependencies.get(E.identHash);if(!N)continue;let U=G.ensureDevirtualizedDescriptor(N),W=LK(U),ee=s.storedResolutions.get(W.descriptorHash);if(!ee)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!s.storedPackages.get(ee))throw new Error("Assertion failed: Expected the package to have been registered");let ue=s.tryWorkspaceByLocator(T);if(ue)b.push(ue);else{let le=s.originalPackages.get(T.locatorHash);if(!le)throw new Error("Assertion failed: Expected the original package to have been registered");let me=le.dependencies.get(N.identHash);if(!me)throw new Error("Assertion failed: Expected the original dependency to have been registered");I.set(me.descriptorHash,me)}}for(let T of b)for(let N of Ut.hardDependencies){let U=T.manifest[N].get(E.identHash);if(!U)continue;let W=NL(U,{parentLocator:null,sourceDescriptor:G.convertLocatorToDescriptor(E),patchPaths:[J.join(Er.home,J.relative(s.cwd,S))]});T.manifest[N].set(U.identHash,W)}for(let T of I.values()){let N=NL(T,{parentLocator:null,sourceDescriptor:G.convertLocatorToDescriptor(E),patchPaths:[J.join(Er.home,J.relative(s.cwd,S))]});s.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:G.stringifyIdent(N),description:T.range}},reference:N.range})}await s.persist()}};Ge();Dt();Yt();var H1=class extends ft{constructor(){super(...arguments);this.update=ge.Boolean("-u,--update",!1,{description:"Reapply local patches that already apply to this packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd),n=await Kr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState();let c=G.parseLocator(this.package);if(c.reference==="unknown"){let f=je.mapAndFilter([...s.storedPackages.values()],p=>p.identHash!==c.identHash?je.mapAndFilter.skip:G.isVirtualLocator(p)?je.mapAndFilter.skip:Tg(p)!==this.update?je.mapAndFilter.skip:p);if(f.length===0)throw new nt("No package found in the project for the given locator");if(f.length>1)throw new nt(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): -${f.map(p=>` -- ${G.prettyLocator(r,p)}`).join("")}`);c=f[0]}if(!s.storedPackages.has(c.locatorHash))throw new nt("No package found in the project for the given locator");await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async f=>{let p=FL(c),h=await _K(c,{cache:n,project:s});f.reportJson({locator:G.stringifyLocator(p),path:fe.fromPortablePath(h)});let E=this.update?" along with its current modifications":"";f.reportInfo(0,`Package ${G.prettyLocator(r,p)} got extracted with success${E}!`),f.reportInfo(0,`You can now edit the following folder: ${he.pretty(r,fe.fromPortablePath(h),"magenta")}`),f.reportInfo(0,`Once you are done run ${he.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${fe.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};var DPt={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:[_1,H1],fetchers:[tb],resolvers:[rb]},PPt=DPt;var YK={};Vt(YK,{PnpmLinker:()=>nb,default:()=>TPt});Ge();Dt();Yt();var nb=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 s=this.getCustomDataKey(),a=r.project.linkersCustomData.get(s);if(!a)throw new nt(`The project in ${he.pretty(r.project.configuration,`${r.project.cwd}/package.json`,he.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 nt(`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 s=this.getCustomDataKey(),a=r.project.linkersCustomData.get(s);if(!a)throw new nt(`The project in ${he.pretty(r.project.configuration,`${r.project.cwd}/package.json`,he.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 c=e,f=e;do{f=c,c=J.dirname(f);let p=a.locatorByPath.get(f);if(p)return p}while(c!==f);return null}makeInstaller(e){return new qK(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},qK=class{constructor(e){this.opts=e;this.asyncActions=new je.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=$b(ce,{indexPath:J.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,s){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,s);case"HARD":return this.installPackageHard(e,r,s)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,s){let a=J.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?J.join(a,Er.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,s){let a=xPt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,G.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),s.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await ce.mkdirPromise(n,{recursive:!0}),await ce.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let f=G.isVirtualLocator(e)?G.devirtualizeLocator(e):e,p={manifest:await Ut.tryFind(r.prefixPath,{baseFs:r.packageFs})??new Ut,misc:{hasBindingGyp:gA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(f,e.version),E=gA.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"||!eke(e,{project:this.opts.project}))return;let s=this.customData.pathsByLocator.get(e.locatorHash);if(typeof s>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${G.stringifyLocator(e)})`);let{dependenciesLocation:a}=s;a&&this.asyncActions.reduce(e.locatorHash,async n=>{await ce.mkdirPromise(a,{recursive:!0});let c=await kPt(a),f=new Map(c),p=[n],h=(C,S)=>{let b=S;eke(S,{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(S));let I=this.customData.pathsByLocator.get(b.locatorHash);if(typeof I>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${G.stringifyLocator(S)})`);let T=G.stringifyIdent(C),N=J.join(a,T),U=J.relative(J.dirname(N),I.packageLocation),W=f.get(T);f.delete(T),p.push(Promise.resolve().then(async()=>{if(W){if(W.isSymbolicLink()&&await ce.readlinkPromise(N)===U)return;await ce.removePromise(N)}await ce.mkdirpPromise(J.dirname(N)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await ce.symlinkPromise(I.packageLocation,N,"junction"):await ce.symlinkPromise(U,N)}))},E=!1;for(let[C,S]of r)C.identHash===e.identHash&&(E=!0),h(C,S);!E&&!this.opts.project.tryWorkspaceByLocator(e)&&h(G.convertLocatorToDescriptor(e),e),p.push(QPt(a,f)),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=tke(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await ce.removePromise(e);else{let r;try{r=new Set(await ce.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:s}of this.customData.pathsByLocator.values()){if(!s)continue;let a=J.contains(e,s);if(a===null)continue;let[n]=a.split(J.sep);r.delete(n)}await Promise.all([...r].map(async s=>{await ce.removePromise(J.join(e,s))}))}return await this.asyncActions.wait(),await WK(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await WK(bPt(this.opts.project)),{customData:this.customData}}};function bPt(t){return J.join(t.cwd,Er.nodeModules)}function tke(t){return t.configuration.get("pnpmStoreFolder")}function xPt(t,{project:e}){let r=G.slugifyLocator(t),s=tke(e),a=J.join(s,r,"package"),n=J.join(s,r,Er.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function eke(t,{project:e}){return!G.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function kPt(t){let e=new Map,r=[];try{r=await ce.readdirPromise(t,{withFileTypes:!0})}catch(s){if(s.code!=="ENOENT")throw s}try{for(let s of r)if(!s.name.startsWith("."))if(s.name.startsWith("@")){let a=await ce.readdirPromise(J.join(t,s.name),{withFileTypes:!0});if(a.length===0)e.set(s.name,s);else for(let n of a)e.set(`${s.name}/${n.name}`,n)}else e.set(s.name,s)}catch(s){if(s.code!=="ENOENT")throw s}return e}async function QPt(t,e){let r=[],s=new Set;for(let a of e.keys()){r.push(ce.removePromise(J.join(t,a)));let n=G.tryParseIdent(a)?.scope;n&&s.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...s].map(a=>WK(J.join(t,a)))))}async function WK(t){try{await ce.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY"&&e.code!=="EBUSY")throw e}}var RPt={configuration:{pnpmStoreFolder:{description:"By default, the store is stored in the 'node_modules/.store' of the project. Sometimes in CI scenario's it is convenient to store this in a different location so it can be cached and reused.",type:"ABSOLUTE_PATH",default:"./node_modules/.store"}},linkers:[nb]},TPt=RPt;var $K={};Vt($K,{StageCommand:()=>j1,default:()=>qPt,stageUtils:()=>LL});Ge();Dt();Yt();Ge();Dt();var LL={};Vt(LL,{ActionType:()=>VK,checkConsensus:()=>OL,expandDirectory:()=>zK,findConsensus:()=>ZK,findVcsRoot:()=>JK,genCommitMessage:()=>XK,getCommitPrefix:()=>rke,isYarnFile:()=>KK});Dt();var VK=(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))(VK||{});async function JK(t,{marker:e}){do if(!ce.existsSync(J.join(t,e)))t=J.dirname(t);else return t;while(t!=="/");return null}function KK(t,{roots:e,names:r}){if(r.has(J.basename(t)))return!0;do if(!e.has(t))t=J.dirname(t);else return!0;while(t!=="/");return!1}function zK(t){let e=[],r=[t];for(;r.length>0;){let s=r.pop(),a=ce.readdirSync(s);for(let n of a){let c=J.resolve(s,n);ce.lstatSync(c).isDirectory()?r.push(c):e.push(c)}}return e}function OL(t,e){let r=0,s=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:s+=1);return r>=s}function ZK(t){let e=OL(t,/^(\w\(\w+\):\s*)?\w+s/),r=OL(t,/^(\w\(\w+\):\s*)?[A-Z]/),s=OL(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:s}}function rke(t){return t.useComponent?"chore(yarn): ":""}var FPt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function XK(t,e){let r=rke(t),s=[],a=e.slice().sort((n,c)=>n[0]-c[0]);for(;a.length>0;){let[n,c]=a.shift(),f=FPt.get(n);t.useUpperCase&&s.length===0&&(f=`${f[0].toUpperCase()}${f.slice(1)}`),t.useThirdPerson&&(f+="s");let p=[c];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)`),s.push(`${f} ${h}`)}return`${r}${s.join(", ")}`}var NPt="Commit generated via `yarn stage`",OPt=11;async function nke(t){let{code:e,stdout:r}=await qr.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function LPt(t,e){let r=[],s=e.filter(h=>J.basename(h.path)==="package.json");for(let{action:h,path:E}of s){let C=J.relative(t,E);if(h===4){let S=await nke(t),{stdout:b}=await qr.execvp("git",["show",`${S}:${C}`],{cwd:t,strict:!0}),I=await Ut.fromText(b),T=await Ut.fromFile(E),N=new Map([...T.dependencies,...T.devDependencies]),U=new Map([...I.dependencies,...I.devDependencies]);for(let[W,ee]of U){let ie=G.stringifyIdent(ee),ue=N.get(W);ue?ue.range!==ee.range&&r.push([4,`${ie} to ${ue.range}`]):r.push([3,ie])}for(let[W,ee]of N)U.has(W)||r.push([2,G.stringifyIdent(ee)])}else if(h===0){let S=await Ut.fromFile(E);S.name?r.push([0,G.stringifyIdent(S.name)]):r.push([0,"a package"])}else if(h===1){let S=await nke(t),{stdout:b}=await qr.execvp("git",["show",`${S}:${C}`],{cwd:t,strict:!0}),I=await Ut.fromText(b);I.name?r.push([1,G.stringifyIdent(I.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await qr.execvp("git",["log",`-${OPt}`,"--pretty=format:%s"],{cwd:t}),c=a===0?n.split(/\n/g).filter(h=>h!==""):[],f=ZK(c);return XK(f,r)}var MPt={0:[" A ","?? "],4:[" M "],1:[" D "]},UPt={0:["A "],4:["M "],1:["D "]},ike={async findRoot(t){return await JK(t,{marker:".git"})},async filterChanges(t,e,r,s){let{stdout:a}=await qr.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),c=s?.staged?UPt:MPt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),E=J.resolve(t,p.slice(3));if(!s?.staged&&h==="?? "&&p.endsWith("/"))return zK(E).map(C=>({action:0,path:C}));{let S=[0,4,1].find(b=>c[b].includes(h));return S!==void 0?[{action:S,path:E}]:[]}})).filter(p=>KK(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await LPt(t,e)},async makeStage(t,e){let r=e.map(s=>fe.fromPortablePath(s.path));await qr.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let s=e.map(a=>fe.fromPortablePath(a.path));await qr.execvp("git",["add","-N","--",...s],{cwd:t,strict:!0}),await qr.execvp("git",["commit","-m",`${r} - -${NPt} -`,"--",...s],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(s=>fe.fromPortablePath(s.path));await qr.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var _Pt=[ike],j1=class extends ft{constructor(){super(...arguments);this.commit=ge.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=ge.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=ge.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:s}=await Rt.find(r,this.context.cwd),{driver:a,root:n}=await HPt(s.cwd),c=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(C=>C.populateYarnPaths,s,C=>{c.push(C)});let f=new Set;for(let C of c)for(let S of jPt(n,C))f.add(S);let p=new Set([r.get("rcFilename"),Er.lockfile,Er.manifest]),h=await a.filterChanges(n,f,p),E=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${E} -`);else for(let C of h)this.context.stdout.write(`${fe.fromPortablePath(C.path)} -`);else if(this.reset){let C=await a.filterChanges(n,f,p,{staged:!0});C.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,C)}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 HPt(t){let e=null,r=null;for(let s of _Pt)if((r=await s.findRoot(t))!==null){e=s;break}if(e===null||r===null)throw new nt("No stage driver has been found for your current project");return{driver:e,root:r}}function jPt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let s;try{s=ce.statSync(e)}catch{break}if(s.isSymbolicLink())e=J.resolve(J.dirname(e),ce.readlinkSync(e));else break}return r}var GPt={commands:[j1]},qPt=GPt;var ez={};Vt(ez,{default:()=>XPt});Ge();Ge();Dt();var ake=ut(Ai());Ge();var ske=ut(l9()),WPt="e8e1bd300d860104bb8c58453ffa1eb4",YPt="OFCNCOG2CU",oke=async(t,e)=>{let r=G.stringifyIdent(t),a=VPt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},VPt=t=>(0,ske.default)(YPt,WPt,{requester:{async send(r){try{let s=await ln.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:s.body,isTimedOut:!1,status:s.statusCode}}catch(s){return{content:s.response.body,isTimedOut:!1,status:s.response.statusCode}}}}});var lke=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,JPt=async(t,e,r,s)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??(ce.existsSync(J.join(t.cwd,"tsconfig.json"))||ce.existsSync(J.join(a.cwd,"tsconfig.json")))))return;let f=n.makeResolver(),p={project:a,resolver:f,report:new ki};if(!await oke(r,n))return;let E=lke(r),C=G.parseRange(r.range).selector;if(!Fr.validRange(C)){let N=n.normalizeDependency(r),U=await f.getCandidates(N,{},p);C=G.parseRange(U[0].reference).selector}let S=ake.default.coerce(C);if(S===null)return;let b=`${Zu.Modifier.CARET}${S.major}`,I=G.makeDescriptor(G.makeIdent("types",E),b),T=je.mapAndFind(a.workspaces,N=>{let U=N.manifest.dependencies.get(r.identHash)?.descriptorHash,W=N.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&W!==r.descriptorHash)return je.mapAndFind.skip;let ee=[];for(let ie of Ut.allDependencies){let ue=N.manifest[ie].get(I.identHash);typeof ue>"u"||ee.push([ie,ue])}return ee.length===0?je.mapAndFind.skip:ee});if(typeof T<"u")for(let[N,U]of T)t.manifest[N].set(U.identHash,U);else{try{let N=n.normalizeDependency(I);if((await f.getCandidates(N,{},p)).length===0)return}catch{return}t.manifest[Zu.Target.DEVELOPMENT].set(I.identHash,I)}},KPt=async(t,e,r)=>{if(r.scope==="types")return;let{project:s}=t,{configuration:a}=s;if(!(a.get("tsEnableAutoTypes")??(ce.existsSync(J.join(t.cwd,"tsconfig.json"))||ce.existsSync(J.join(s.cwd,"tsconfig.json")))))return;let c=lke(r),f=G.makeIdent("types",c);for(let p of Ut.allDependencies)typeof t.manifest[p].get(f.identHash)>"u"||t.manifest[p].delete(f.identHash)},zPt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},ZPt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:JPt,afterWorkspaceDependencyRemoval:KPt,beforeWorkspacePacking:zPt}},XPt=ZPt;var sz={};Vt(sz,{VersionApplyCommand:()=>Y1,VersionCheckCommand:()=>V1,VersionCommand:()=>J1,default:()=>nbt,versionUtils:()=>W1});Ge();Ge();Yt();var W1={};Vt(W1,{Decision:()=>G1,applyPrerelease:()=>cke,applyReleases:()=>iz,applyStrategy:()=>ib,clearVersionFiles:()=>tz,getUndecidedDependentWorkspaces:()=>ob,getUndecidedWorkspaces:()=>ML,openVersionFile:()=>q1,requireMoreDecisions:()=>ebt,resolveVersionFiles:()=>sb,suggestStrategy:()=>nz,updateVersionFiles:()=>rz,validateReleaseDecision:()=>dy});Ge();Dt();wc();Yt();ql();var kA=ut(Ai()),$Pt=/^(>=|[~^]|)(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-]+)*)?$/,G1=(h=>(h.UNDECIDED="undecided",h.DECLINE="decline",h.MAJOR="major",h.MINOR="minor",h.PATCH="patch",h.PREMAJOR="premajor",h.PREMINOR="preminor",h.PREPATCH="prepatch",h.PRERELEASE="prerelease",h))(G1||{});function dy(t){let e=kA.default.valid(t);return e||je.validateEnum(N4(G1,"UNDECIDED"),t)}async function sb(t,{prerelease:e=null}={}){let r=new Map,s=t.configuration.get("deferredVersionFolder");if(!ce.existsSync(s))return r;let a=await ce.readdirPromise(s);for(let n of a){if(!n.endsWith(".yml"))continue;let c=J.join(s,n),f=await ce.readFilePromise(c,"utf8"),p=as(f);for(let[h,E]of Object.entries(p.releases||{})){if(E==="decline")continue;let C=G.parseIdent(h),S=t.tryWorkspaceByIdent(C);if(S===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${J.basename(c)} references ${h})`);if(S.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${G.prettyLocator(t.configuration,S.anchoredLocator)})`);let b=S.manifest.raw.stableVersion??S.manifest.version,I=r.get(S),T=ib(E==="prerelease"?S.manifest.version:b,dy(E));if(T===null)throw new Error(`Assertion failed: Expected ${b} to support being bumped via strategy ${E}`);let N=typeof I<"u"?kA.default.gt(T,I)?T:I:T;r.set(S,N)}}return e&&(r=new Map([...r].map(([n,c])=>[n,cke(c,{current:n.manifest.version,prerelease:e})]))),r}async function tz(t){let e=t.configuration.get("deferredVersionFolder");ce.existsSync(e)&&await ce.removePromise(e)}async function rz(t,e){let r=new Set(e),s=t.configuration.get("deferredVersionFolder");if(!ce.existsSync(s))return;let a=await ce.readdirPromise(s);for(let n of a){if(!n.endsWith(".yml"))continue;let c=J.join(s,n),f=await ce.readFilePromise(c,"utf8"),p=as(f),h=p?.releases;if(h){for(let E of Object.keys(h)){let C=G.parseIdent(E),S=t.tryWorkspaceByIdent(C);(S===null||r.has(S))&&delete p.releases[E]}Object.keys(p.releases).length>0?await ce.changeFilePromise(c,nl(new nl.PreserveOrdering(p))):await ce.unlinkPromise(c)}}}async function q1(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new nt("This command can only be run from within a Yarn project");let s=await ka.fetchRoot(r.projectCwd),a=s!==null?await ka.fetchBase(s,{baseRefs:r.get("changesetBaseRefs")}):null,n=s!==null?await ka.fetchChangedFiles(s,{base:a.hash,project:t}):[],c=r.get("deferredVersionFolder"),f=n.filter(b=>J.contains(c,b)!==null);if(f.length>1)throw new nt(`Your current branch contains multiple versioning files; this isn't supported: -- ${f.map(b=>fe.fromPortablePath(b)).join(` -- `)}`);let p=new Set(je.mapAndFilter(n,b=>{let I=t.tryWorkspaceByFilePath(b);return I===null?je.mapAndFilter.skip:I}));if(f.length===0&&p.size===0&&!e)return null;let h=f.length===1?f[0]:J.join(c,`${Nn.makeHash(Math.random().toString()).slice(0,8)}.yml`),E=ce.existsSync(h)?await ce.readFilePromise(h,"utf8"):"{}",C=as(E),S=new Map;for(let b of C.declined||[]){let I=G.parseIdent(b),T=t.getWorkspaceByIdent(I);S.set(T,"decline")}for(let[b,I]of Object.entries(C.releases||{})){let T=G.parseIdent(b),N=t.getWorkspaceByIdent(T);S.set(N,dy(I))}return{project:t,root:s,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:S,async saveAll(){let b={},I=[],T=[];for(let N of t.workspaces){if(N.manifest.version===null)continue;let U=G.stringifyIdent(N.anchoredLocator),W=S.get(N);W==="decline"?I.push(U):typeof W<"u"?b[U]=dy(W):p.has(N)&&T.push(U)}await ce.mkdirPromise(J.dirname(h),{recursive:!0}),await ce.changeFilePromise(h,nl(new nl.PreserveOrdering({releases:Object.keys(b).length>0?b:void 0,declined:I.length>0?I:void 0,undecided:T.length>0?T:void 0})))}}}function ebt(t){return ML(t).size>0||ob(t).length>0}function ML(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 ob(t,{include:e=new Set}={}){let r=[],s=new Map(je.mapAndFilter([...t.releases],([n,c])=>c==="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(je.mapAndFilter([...t.releases],([n,c])=>c!=="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||s.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let c of Ut.hardDependencies)for(let f of n.manifest.getForScope(c).values()){let p=t.project.tryWorkspaceByDescriptor(f);p!==null&&s.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function nz(t,e){let r=kA.default.clean(e);for(let s of Object.values(G1))if(s!=="undecided"&&s!=="decline"&&kA.default.inc(t,s)===r)return s;return null}function ib(t,e){if(kA.default.valid(e))return e;if(t===null)throw new nt(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!kA.default.valid(t))throw new nt(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=kA.default.inc(t,e);if(r===null)throw new nt(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function iz(t,e,{report:r,exact:s}){let a=new Map;for(let n of t.workspaces)for(let c of Ut.allDependencies)for(let f of n.manifest[c].values()){let p=t.tryWorkspaceByDescriptor(f);if(p===null||!e.has(p))continue;je.getArrayWithDefault(a,p).push([n,c,f.identHash])}for(let[n,c]of e){let f=n.manifest.version;n.manifest.version=c,kA.default.prerelease(c)===null?delete n.manifest.raw.stableVersion:n.manifest.raw.stableVersion||(n.manifest.raw.stableVersion=f);let p=n.manifest.name!==null?G.stringifyIdent(n.manifest.name):null;r.reportInfo(0,`${G.prettyLocator(t.configuration,n.anchoredLocator)}: Bumped to ${c}`),r.reportJson({cwd:fe.fromPortablePath(n.cwd),ident:p,oldVersion:f,newVersion:c});let h=a.get(n);if(!(typeof h>"u"))for(let[E,C,S]of h){let b=E.manifest[C].get(S);if(typeof b>"u")throw new Error("Assertion failed: The dependency should have existed");let I=b.range,T=!1;if(I.startsWith(Ei.protocol)&&(I=I.slice(Ei.protocol.length),T=!0,I===n.relativeCwd))continue;let N=I.match($Pt);if(!N){r.reportWarning(0,`Couldn't auto-upgrade range ${I} (in ${G.prettyLocator(t.configuration,E.anchoredLocator)})`);continue}let U=s?`${c}`:`${N[1]}${c}`;T&&(U=`${Ei.protocol}${U}`);let W=G.makeDescriptor(b,U);E.manifest[C].set(S,W)}}}var tbt=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function cke(t,{current:e,prerelease:r}){let s=new kA.default.SemVer(e),a=s.prerelease.slice(),n=[];s.prerelease=[],s.format()!==t&&(a.length=0);let c=!0,f=r.split(/\./g);for(let p of f){let h=tbt.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():c=!1;else{let E=c?h.extract(a):null;E!==null&&typeof E[0]=="number"?(n.push(h.generate(E[0])),a=E[1]):(n.push(h.generate()),c=!1)}}return s.prerelease&&(s.prerelease=[]),`${t}-${n.join(".")}`}var Y1=class extends ft{constructor(){super(...arguments);this.all=ge.Boolean("--all",!1,{description:"Apply the deferred version changes on all workspaces"});this.dryRun=ge.Boolean("--dry-run",!1,{description:"Print the versions without actually generating the package archive"});this.prerelease=ge.String("--prerelease",{description:"Add a prerelease identifier to new versions",tolerateBoolean:!0});this.exact=ge.Boolean("--exact",!1,{description:"Use the exact version of each package, removes any range. Useful for nightly releases where the range might match another version."});this.recursive=ge.Boolean("-R,--recursive",{description:"Release the transitive workspaces as well"});this.json=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd),n=await Kr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState({restoreResolutions:!1});let c=await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async f=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await sb(s,{prerelease:p}),E=new Map;if(this.all)E=h;else{let C=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let S of C){let b=h.get(S);typeof b<"u"&&E.set(S,b)}}if(E.size===0){let C=h.size>0?" Did you want to add --all?":"";f.reportWarning(0,`The current workspace doesn't seem to require a version bump.${C}`);return}iz(s,E,{report:f,exact:this.exact}),this.dryRun||(p||(this.all?await tz(s):await rz(s,[...E.keys()])),f.reportSeparator())});return this.dryRun||c.hasErrors()?c.exitCode():await s.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};Ge();Dt();Yt();var UL=ut(Ai());var V1=class extends ft{constructor(){super(...arguments);this.interactive=ge.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(){iw(this.context);let{Gem:r}=await Promise.resolve().then(()=>(qF(),kW)),{ScrollableItems:s}=await Promise.resolve().then(()=>(JF(),VF)),{FocusRequest:a}=await Promise.resolve().then(()=>(RW(),E2e)),{useListInput:n}=await Promise.resolve().then(()=>(YF(),I2e)),{renderForm:c}=await Promise.resolve().then(()=>(XF(),ZF)),{Box:f,Text:p}=await Promise.resolve().then(()=>ut(Wc())),{default:h,useCallback:E,useState:C}=await Promise.resolve().then(()=>ut(hn())),S=await ze.find(this.context.cwd,this.context.plugins),{project:b,workspace:I}=await Rt.find(S,this.context.cwd);if(!I)throw new ar(b.cwd,this.context.cwd);await b.restoreInstallState();let T=await q1(b);if(T===null||T.releaseRoots.size===0)return 0;if(T.root===null)throw new nt("This command can only be run on Git repositories");let N=()=>h.createElement(f,{flexDirection:"row",paddingBottom:1},h.createElement(f,{flexDirection:"column",width:60},h.createElement(f,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(f,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(f,{flexDirection:"column"},h.createElement(f,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(f,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:me,active:pe,decision:Be,setDecision:Ce})=>{let g=me.manifest.raw.stableVersion??me.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${G.prettyLocator(S,me.anchoredLocator)})`);if(UL.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let we=["undecided","decline","patch","minor","major"];n(Be,we,{active:pe,minus:"left",plus:"right",set:Ce});let ye=Be==="undecided"?h.createElement(p,{color:"yellow"},g):Be==="decline"?h.createElement(p,{color:"green"},g):h.createElement(p,null,h.createElement(p,{color:"magenta"},g)," \u2192 ",h.createElement(p,{color:"green"},UL.default.valid(Be)?Be:UL.default.inc(g,Be)));return h.createElement(f,{flexDirection:"column"},h.createElement(f,null,h.createElement(p,null,G.prettyLocator(S,me.anchoredLocator)," - ",ye)),h.createElement(f,null,we.map(Ae=>h.createElement(f,{key:Ae,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:Ae===Be})," ",Ae)))))},W=me=>{let pe=new Set(T.releaseRoots),Be=new Map([...me].filter(([Ce])=>pe.has(Ce)));for(;;){let Ce=ob({project:T.project,releases:Be}),g=!1;if(Ce.length>0){for(let[we]of Ce)if(!pe.has(we)){pe.add(we),g=!0;let ye=me.get(we);typeof ye<"u"&&Be.set(we,ye)}}if(!g)break}return{relevantWorkspaces:pe,relevantReleases:Be}},ee=()=>{let[me,pe]=C(()=>new Map(T.releases)),Be=E((Ce,g)=>{let we=new Map(me);g!=="undecided"?we.set(Ce,g):we.delete(Ce);let{relevantReleases:ye}=W(we);pe(ye)},[me,pe]);return[me,Be]},ie=({workspaces:me,releases:pe})=>{let Be=[];Be.push(`${me.size} total`);let Ce=0,g=0;for(let we of me){let ye=pe.get(we);typeof ye>"u"?g+=1:ye!=="decline"&&(Ce+=1)}return Be.push(`${Ce} release${Ce===1?"":"s"}`),Be.push(`${g} remaining`),h.createElement(p,{color:"yellow"},Be.join(", "))},le=await c(({useSubmit:me})=>{let[pe,Be]=ee();me(pe);let{relevantWorkspaces:Ce}=W(pe),g=new Set([...Ce].filter(se=>!T.releaseRoots.has(se))),[we,ye]=C(0),Ae=E(se=>{switch(se){case a.BEFORE:ye(we-1);break;case a.AFTER:ye(we+1);break}},[we,ye]);return h.createElement(f,{flexDirection:"column"},h.createElement(N,null),h.createElement(f,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(f,{flexDirection:"column",marginTop:1,paddingLeft:2},[...T.changedFiles].map(se=>h.createElement(f,{key:se},h.createElement(p,null,h.createElement(p,{color:"grey"},fe.fromPortablePath(T.root)),fe.sep,fe.relative(fe.fromPortablePath(T.root),fe.fromPortablePath(se)))))),T.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(f,{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(f,{marginTop:1},h.createElement(ie,{workspaces:T.releaseRoots,releases:pe})):null,h.createElement(f,{marginTop:1,flexDirection:"column"},h.createElement(s,{active:we%2===0,radius:1,size:2,onFocusRequest:Ae},[...T.releaseRoots].map(se=>h.createElement(U,{key:se.cwd,workspace:se,decision:pe.get(se)||"undecided",setDecision:X=>Be(se,X)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(f,{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(f,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(f,{marginTop:1},h.createElement(ie,{workspaces:g,releases:pe})):null,h.createElement(f,{marginTop:1,flexDirection:"column"},h.createElement(s,{active:we%2===1,radius:2,size:2,onFocusRequest:Ae},[...g].map(se=>h.createElement(U,{key:se.cwd,workspace:se,decision:pe.get(se)||"undecided",setDecision:X=>Be(se,X)}))))):null)},{versionFile:T},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof le>"u")return 1;T.releases.clear();for(let[me,pe]of le)T.releases.set(me,pe);await T.saveAll()}async executeStandard(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Rt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);return await s.restoreInstallState(),(await Ot.start({configuration:r,stdout:this.context.stdout},async c=>{let f=await q1(s);if(f===null||f.releaseRoots.size===0)return;if(f.root===null)throw new nt("This command can only be run on Git repositories");if(c.reportInfo(0,`Your PR was started right after ${he.pretty(r,f.baseHash.slice(0,7),"yellow")} ${he.pretty(r,f.baseTitle,"magenta")}`),f.changedFiles.size>0){c.reportInfo(0,"You have changed the following files since then:"),c.reportSeparator();for(let S of f.changedFiles)c.reportInfo(null,`${he.pretty(r,fe.fromPortablePath(f.root),"gray")}${fe.sep}${fe.relative(fe.fromPortablePath(f.root),fe.fromPortablePath(S))}`)}let p=!1,h=!1,E=ML(f);if(E.size>0){p||c.reportSeparator();for(let S of E)c.reportError(0,`${G.prettyLocator(r,S.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let C=ob(f);for(let[S,b]of C)h||c.reportSeparator(),c.reportError(0,`${G.prettyLocator(r,S.anchoredLocator)} doesn't have a release strategy attached, but depends on ${G.prettyWorkspace(r,b)} which is planned for release.`),h=!0;(p||h)&&(c.reportSeparator(),c.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)."),c.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};Ge();Yt();var _L=ut(Ai());var J1=class extends ft{constructor(){super(...arguments);this.deferred=ge.Boolean("-d,--deferred",{description:"Prepare the version to be bumped during the next release cycle"});this.immediate=ge.Boolean("-i,--immediate",{description:"Bump the version immediately"});this.strategy=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let c=_L.default.valid(this.strategy),f=this.strategy==="decline",p;if(c)if(a.manifest.version!==null){let E=nz(a.manifest.version,this.strategy);E!==null?p=E:p=this.strategy}else p=this.strategy;else{let E=a.manifest.version;if(!f){if(E===null)throw new nt("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"||!_L.default.valid(E))throw new nt(`Can't bump the version (${E}) if it's not valid semver`)}p=dy(this.strategy)}if(!n){let C=(await sb(s)).get(a);if(typeof C<"u"&&p!=="decline"){let S=ib(a.manifest.version,p);if(_L.default.lt(S,C))throw new nt(`Can't bump the version to one that would be lower than the current deferred one (${C})`)}}let h=await q1(s,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};var rbt={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:[Y1,V1,J1]},nbt=rbt;var oz={};Vt(oz,{WorkspacesFocusCommand:()=>K1,WorkspacesForeachCommand:()=>Z1,default:()=>obt});Ge();Ge();Yt();var K1=class extends ft{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=ge.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=ge.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=ge.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:s,workspace:a}=await Rt.find(r,this.context.cwd),n=await Kr.find(r);await s.restoreInstallState({restoreResolutions:!1});let c;if(this.all)c=new Set(s.workspaces);else if(this.workspaces.length===0){if(!a)throw new ar(s.cwd,this.context.cwd);c=new Set([a])}else c=new Set(this.workspaces.map(f=>s.getWorkspaceByIdent(G.parseIdent(f))));for(let f of c)for(let p of this.production?["dependencies"]:Ut.hardDependencies)for(let h of f.manifest.getForScope(p).values()){let E=s.tryWorkspaceByDescriptor(h);E!==null&&c.add(E)}for(let f of s.workspaces)c.has(f)?this.production&&f.manifest.devDependencies.clear():(f.manifest.installConfig=f.manifest.installConfig||{},f.manifest.installConfig.selfReferences=!1,f.manifest.dependencies.clear(),f.manifest.devDependencies.clear(),f.manifest.peerDependencies.clear(),f.manifest.scripts.clear());return await s.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};Ge();Ge();Ge();Yt();var z1=ut(Go()),fke=ut(Ld());Ul();var Z1=class extends ft{constructor(){super(...arguments);this.from=ge.Array("--from",{description:"An array of glob pattern idents or paths from which to base any recursion"});this.all=ge.Boolean("-A,--all",{description:"Run the command on all workspaces of a project"});this.recursive=ge.Boolean("-R,--recursive",{description:"Run the command on the current workspace and all of its recursive dependencies"});this.worktree=ge.Boolean("-W,--worktree",{description:"Run the command on all workspaces of the current worktree"});this.verbose=ge.Counter("-v,--verbose",{description:"Increase level of logging verbosity up to 2 times"});this.parallel=ge.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=ge.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=ge.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to; or `unlimited`",validator:h_([fo(["unlimited"]),$2(p_(),[d_(),g_(1)])])});this.topological=ge.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=ge.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=ge.Array("--include",[],{description:"An array of glob pattern idents or paths; only matching workspaces will be traversed"});this.exclude=ge.Array("--exclude",[],{description:"An array of glob pattern idents or paths; matching workspaces won't be traversed"});this.publicOnly=ge.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.dryRun=ge.Boolean("-n,--dry-run",{description:"Print the commands that would be run, without actually running them"});this.commandName=ge.String();this.args=ge.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. You can also use the `--no-private` flag to avoid running the command in private workspaces.\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 --no-private 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=[tB("all",qf.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),m_(["all","recursive","since","worktree"],{missingIf:"undefined"})]}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Rt.find(r,this.context.cwd);if(!this.all&&!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),c=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new nt("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let f=Ce=>{this.dryRun&&this.context.stdout.write(`${Ce} -`)},p=()=>{let Ce=this.from.map(g=>z1.default.matcher(g));return s.workspaces.filter(g=>{let we=G.stringifyIdent(g.anchoredLocator),ye=g.relativeCwd;return Ce.some(Ae=>Ae(we)||Ae(ye))})},h=[];if(this.since?(f("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await ka.fetchChangedWorkspaces({ref:this.since,project:s}))):this.from?(f("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(f("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(f("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(f("Option --all is set; selecting all workspaces"),h=[...s.workspaces]),this.dryRun&&!this.all){for(let Ce of h)f(` -- ${Ce.relativeCwd} - ${G.prettyLocator(r,Ce.anchoredLocator)}`);h.length>0&&f("")}let E;if(this.recursive?this.since?(f("Option --recursive --since is set; recursively selecting all dependent workspaces"),E=new Set(h.map(Ce=>[...Ce.getRecursiveWorkspaceDependents()]).flat())):(f("Option --recursive is set; recursively selecting all transitive dependencies"),E=new Set(h.map(Ce=>[...Ce.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(f("Option --worktree is set; recursively selecting all nested workspaces"),E=new Set(h.map(Ce=>[...Ce.getRecursiveWorkspaceChildren()]).flat())):E=null,E!==null&&(h=[...new Set([...h,...E])],this.dryRun))for(let Ce of E)f(` -- ${Ce.relativeCwd} - ${G.prettyLocator(r,Ce.anchoredLocator)}`);let C=[],S=!1;if(c?.includes(":")){for(let Ce of s.workspaces)if(Ce.manifest.scripts.has(c)&&(S=!S,S===!1))break}for(let Ce of h){if(c&&!Ce.manifest.scripts.has(c)&&!S&&!(await In.getWorkspaceAccessibleBinaries(Ce)).has(c)){f(`Excluding ${Ce.relativeCwd} because it doesn't have a "${c}" script`);continue}if(!(c===r.env.npm_lifecycle_event&&Ce.cwd===a.cwd)){if(this.include.length>0&&!z1.default.isMatch(G.stringifyIdent(Ce.anchoredLocator),this.include)&&!z1.default.isMatch(Ce.relativeCwd,this.include)){f(`Excluding ${Ce.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(z1.default.isMatch(G.stringifyIdent(Ce.anchoredLocator),this.exclude)||z1.default.isMatch(Ce.relativeCwd,this.exclude))){f(`Excluding ${Ce.relativeCwd} because it matches the --exclude filter`);continue}if(this.publicOnly&&Ce.manifest.private===!0){f(`Excluding ${Ce.relativeCwd} because it's a private workspace and --no-private was set`);continue}C.push(Ce)}}if(this.dryRun)return 0;let b=this.verbose??(this.context.stdout.isTTY?1/0:0),I=b>0,T=b>1,N=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(fs.availableParallelism()/2):1,U=N===1?!1:this.parallel,W=U?this.interlaced:!0,ee=(0,fke.default)(N),ie=new Map,ue=new Set,le=0,me=null,pe=!1,Be=await Ot.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async Ce=>{let g=async(we,{commandIndex:ye})=>{if(pe)return-1;!U&&T&&ye>1&&Ce.reportSeparator();let Ae=ibt(we,{configuration:r,label:I,commandIndex:ye}),[se,X]=uke(Ce,{prefix:Ae,interlaced:W}),[De,Te]=uke(Ce,{prefix:Ae,interlaced:W});try{T&&Ce.reportInfo(null,`${Ae?`${Ae} `:""}Process started`);let mt=Date.now(),j=await this.cli.run([this.commandName,...this.args],{cwd:we.cwd,stdout:se,stderr:De})||0;se.end(),De.end(),await X,await Te;let rt=Date.now();if(T){let Fe=r.get("enableTimers")?`, completed in ${he.pretty(r,rt-mt,he.Type.DURATION)}`:"";Ce.reportInfo(null,`${Ae?`${Ae} `:""}Process exited (exit code ${j})${Fe}`)}return j===130&&(pe=!0,me=j),j}catch(mt){throw se.end(),De.end(),await X,await Te,mt}};for(let we of C)ie.set(we.anchoredLocator.locatorHash,we);for(;ie.size>0&&!Ce.hasErrors();){let we=[];for(let[X,De]of ie){if(ue.has(De.anchoredDescriptor.descriptorHash))continue;let Te=!0;if(this.topological||this.topologicalDev){let mt=this.topologicalDev?new Map([...De.manifest.dependencies,...De.manifest.devDependencies]):De.manifest.dependencies;for(let j of mt.values()){let rt=s.tryWorkspaceByDescriptor(j);if(Te=rt===null||!ie.has(rt.anchoredLocator.locatorHash),!Te)break}}if(Te&&(ue.add(De.anchoredDescriptor.descriptorHash),we.push(ee(async()=>{let mt=await g(De,{commandIndex:++le});return ie.delete(X),ue.delete(De.anchoredDescriptor.descriptorHash),{workspace:De,exitCode:mt}})),!U))break}if(we.length===0){let X=Array.from(ie.values()).map(De=>G.prettyLocator(r,De.anchoredLocator)).join(", ");Ce.reportError(3,`Dependency cycle detected (${X})`);return}let ye=await Promise.all(we);ye.forEach(({workspace:X,exitCode:De})=>{De!==0&&Ce.reportError(0,`The command failed in workspace ${G.prettyLocator(r,X.anchoredLocator)} with exit code ${De}`)});let se=ye.map(X=>X.exitCode).find(X=>X!==0);(this.topological||this.topologicalDev)&&typeof se<"u"&&Ce.reportError(0,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return me!==null?me:Be.exitCode()}};function uke(t,{prefix:e,interlaced:r}){let s=t.createStreamReporter(e),a=new je.DefaultStream;a.pipe(s,{end:!1}),a.on("finish",()=>{s.end()});let n=new Promise(f=>{s.on("finish",()=>{f(a.active)})});if(r)return[a,n];let c=new je.BufferStream;return c.pipe(a,{end:!1}),c.on("finish",()=>{a.end()}),[c,n]}function ibt(t,{configuration:e,commandIndex:r,label:s}){if(!s)return null;let n=`[${G.stringifyIdent(t.anchoredLocator)}]:`,c=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],f=c[r%c.length];return he.pretty(e,n,f)}var sbt={commands:[K1,Z1]},obt=sbt;var uz={};Vt(uz,{default:()=>ubt});Ge();Ge();var az="catalog:";var lz=t=>t.startsWith(az),abt=t=>t.range.slice(az.length)||null,Ake=t=>t===null?"default catalog":`catalog "${t}"`,lbt=t=>t.scope?`@${t.scope}/${t.name}`:t.name,cz=(t,e,r,s)=>{let a=abt(e),n;if(a===null)n=t.configuration.get("catalog");else try{let E=t.configuration.get("catalogs");E&&(n=E.get(a))}catch{n=void 0}if(!n||n.size===0)throw new jt(82,`${G.prettyDescriptor(t.configuration,e)}: ${Ake(a)} not found or empty`);let c=lbt(e),f=n.get(c);if(!f)throw new jt(82,`${G.prettyDescriptor(t.configuration,e)}: entry not found in ${Ake(a)}`);let p=t.configuration.normalizeDependency(G.makeDescriptor(e,f));return r.bindDescriptor(p,t.topLevelWorkspace.anchoredLocator,s)};var cbt={configuration:{catalog:{description:"The default catalog of packages",type:"MAP",valueDefinition:{description:"The catalog of packages",type:"STRING"}},catalogs:{description:"Named catalogs of packages",type:"MAP",valueDefinition:{description:"A named catalog",type:"MAP",valueDefinition:{description:"Package version in the catalog",type:"STRING"}}}},hooks:{beforeWorkspacePacking:(t,e)=>{let r=t.project,s=r.configuration.makeResolver(),a={project:r,resolver:s,report:new ki};for(let n of Ut.allDependencies){let c=e[n];if(c)for(let[f,p]of Object.entries(c)){if(typeof p!="string"||!lz(p))continue;let h=G.parseIdent(f),E=G.makeDescriptor(h,p),C=cz(r,E,s,a),{protocol:S,source:b,params:I,selector:T}=G.parseRange(G.convertToManifestRange(C.range));S===t.project.configuration.get("defaultProtocol")&&(S=null),c[f]=G.makeRange({protocol:S,source:b,params:I,selector:T})}}},reduceDependency:async(t,e,r,s,{resolver:a,resolveOptions:n})=>lz(t.range)?cz(e,t,a,n):t}},ubt=cbt;var tC=()=>({modules:new Map([["@yarnpkg/cli",Gv],["@yarnpkg/core",jv],["@yarnpkg/fslib",_2],["@yarnpkg/libzip",fv],["@yarnpkg/parsers",J2],["@yarnpkg/shell",mv],["clipanion",oB],["semver",fbt],["typanion",Ea],["@yarnpkg/plugin-essentials",f5],["@yarnpkg/plugin-compat",d5],["@yarnpkg/plugin-constraints",T5],["@yarnpkg/plugin-dlx",F5],["@yarnpkg/plugin-exec",L5],["@yarnpkg/plugin-file",U5],["@yarnpkg/plugin-git",u5],["@yarnpkg/plugin-github",j5],["@yarnpkg/plugin-http",G5],["@yarnpkg/plugin-init",q5],["@yarnpkg/plugin-interactive-tools",HW],["@yarnpkg/plugin-jsr",GW],["@yarnpkg/plugin-link",qW],["@yarnpkg/plugin-nm",PY],["@yarnpkg/plugin-npm",PK],["@yarnpkg/plugin-npm-cli",OK],["@yarnpkg/plugin-pack",IV],["@yarnpkg/plugin-patch",GK],["@yarnpkg/plugin-pnp",gY],["@yarnpkg/plugin-pnpm",YK],["@yarnpkg/plugin-stage",$K],["@yarnpkg/plugin-typescript",ez],["@yarnpkg/plugin-version",sz],["@yarnpkg/plugin-workspace-tools",oz],["@yarnpkg/plugin-catalog",uz]]),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-jsr","@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","@yarnpkg/plugin-catalog"])});function gke({cwd:t,pluginConfiguration:e}){let r=new Ca({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:fn??""});return Object.assign(r,{defaultContext:{...Ca.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function Abt(t){if(je.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,s=">=18.12.0";if(Fr.satisfiesWithPrereleases(r,s))return!0;let a=new nt(`This tool requires a Node version compatible with ${s} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return Ca.defaultContext.stdout.write(t.error(a)),!1}async function dke({selfPath:t,pluginConfiguration:e}){return await ze.find(fe.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function pbt(t,e,{yarnPath:r}){if(!ce.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 s={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,pke.execFileSync)(process.execPath,[fe.fromPortablePath(r),...e],s)}catch(a){return a.status??1}return 0}function hbt(t,e){let r=null,s=e;return e.length>=2&&e[0]==="--cwd"?(r=fe.toPortablePath(e[1]),s=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=fe.toPortablePath(e[0].slice(6)),s=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=fe.toPortablePath(e[e.length-1]),s=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?J.resolve(r):J.cwd(),s}function gbt(t,{configuration:e}){if(!e.get("enableTelemetry")||hke.isCI||!process.stdout.isTTY)return;ze.telemetry=new XI(e,"puba9cdc10ec5790a2cf4969dd413a47270");let s=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())$I.has(a.match(s)?.[1]??"")&&ze.telemetry?.reportPluginName(a);t.binaryVersion&&ze.telemetry.reportVersion(t.binaryVersion)}function mke(t,{configuration:e}){for(let r of e.plugins.values())for(let s of r.commands||[])t.register(s)}async function dbt(t,e,{selfPath:r,pluginConfiguration:s}){if(!Abt(t))return 1;let a=await dke({selfPath:r,pluginConfiguration:s}),n=a.get("yarnPath"),c=a.get("ignorePath");if(n&&!c)return pbt(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let f=hbt(t,e);gbt(t,{configuration:a}),mke(t,{configuration:a});let p=t.process(f,t.defaultContext);return p.help||ze.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function Bde({cwd:t=J.cwd(),pluginConfiguration:e=tC()}={}){let r=gke({cwd:t,pluginConfiguration:e}),s=await dke({pluginConfiguration:e,selfPath:null});return mke(r,{configuration:s}),r}async function YT(t,{cwd:e=J.cwd(),selfPath:r,pluginConfiguration:s}){let a=gke({cwd:e,pluginConfiguration:s});function n(){Ca.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 dbt(a,t,{selfPath:r,pluginConfiguration:s})}catch(c){Ca.defaultContext.stdout.write(a.error(c)),process.exitCode=1}finally{process.off("beforeExit",n),await ce.rmtempPromise()}}YT(process.argv.slice(2),{cwd:J.cwd(),selfPath:fe.toPortablePath(fe.resolve(process.argv[1])),pluginConfiguration:tC()});})(); -/** - @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 deleted file mode 100644 index 1c386b3ce..000000000 --- a/.yarnrc.yml +++ /dev/null @@ -1,9 +0,0 @@ -compressionLevel: mixed - -enableGlobalCache: false - -nodeLinker: node-modules - -npmMinimalAgeGate: '3d' - -yarnPath: .yarn/releases/yarn-4.10.3.cjs diff --git a/AGENTS.md b/AGENTS.md deleted file mode 100644 index c43ec34f5..000000000 --- a/AGENTS.md +++ /dev/null @@ -1,143 +0,0 @@ -# JAVASCRIPT CLIENT - AI AGENT INSTRUCTIONS - -## ⚠️ CRITICAL: CHECK YOUR REPOSITORY FIRST - -Before making ANY changes, verify you're in the correct repository: - -```bash -git remote -v -``` - -- ✅ **CORRECT**: `origin .../algolia/api-clients-automation.git` → You may proceed -- ❌ **WRONG**: `origin .../algolia/algoliasearch-client-javascript.git` → STOP! This is the PUBLIC repository - -**If you're in `algoliasearch-client-javascript`**: Do NOT make changes here. All changes must go through `api-clients-automation`. PRs and commits made directly to the public repo will be discarded on next release. - -## ⚠️ BEFORE ANY EDIT: Check If File Is Generated - -Before editing ANY file, verify it's hand-written by checking `config/generation.config.mjs`: - -```javascript -// In generation.config.mjs - patterns WITHOUT '!' are GENERATED (do not edit) -'clients/algoliasearch-client-javascript/packages/**/package.json', // Generated -'!clients/algoliasearch-client-javascript/packages/client-common/**', // Hand-written ✓ -``` - -**Hand-written (safe to edit):** - -- `packages/client-common/**` - Core transport, types, utilities -- `packages/requester-*/**` - HTTP requesters (browser-xhr, node-http, fetch) -- `packages/logger-console/**` - Logging utilities -- `packages/algoliasearch/__tests__/**` - Tests -- `scripts/**` - Build scripts - -**Generated (DO NOT EDIT):** - -- `packages/*/model/**` - API models -- `packages/*/src/**` (except client-common) - API clients -- `packages/**/package.json` - Package configs - -## Language Conventions - -### Naming - -- **Files**: `camelCase.ts` for source, `camelCase.test.ts` for tests -- **Variables/Functions**: `camelCase` -- **Types/Interfaces**: `PascalCase` -- **Constants**: `UPPER_SNAKE_CASE` or `camelCase` depending on scope - -### Formatting - -- Prettier with project config (`.prettierrc`) -- 120 char line width -- Single quotes, trailing commas -- Run: `yarn cli format javascript clients/algoliasearch-client-javascript` - -### TypeScript Patterns - -- Strict mode enabled -- No `any` - use `unknown` or proper types -- No `@ts-ignore` or `@ts-expect-error` -- Prefer `type` over `interface` for object shapes -- Use `readonly` for immutable properties - -### Dependencies - -- **HTTP**: Custom requesters (not axios/fetch directly) -- **Build**: tsup for bundling -- **Test**: Vitest -- **Monorepo**: Yarn workspaces + Lerna - -## Client Patterns - -### Transporter Architecture - -```typescript -// Core transport in packages/client-common/src/transporter/ -createTransporter({ - hosts, // Host[] - API hosts with failover - hostsCache, // Cache for host state - requester, // Pluggable HTTP implementation - requestsCache, // Request deduplication - responsesCache, // Response caching -}); -``` - -### Retry Strategy - -- Hosts tracked as `up`, `down`, or `timedOut` -- Automatic failover to next host on failure -- Timeout increases with retry count -- Network errors are retryable, 4xx errors are not - -### Cache System - -- `createMemoryCache()` - In-memory, serializable -- `createBrowserLocalStorageCache()` - Browser persistence -- `createNullCache()` - No-op for servers -- `createFallbackableCache()` - Chain caches - -## Common Gotchas - -### Browser vs Node - -- Different requesters for each environment -- Use `requester-browser-xhr` for browsers -- Use `requester-node-http` for Node.js -- Check bundle targets in `tsup.config.ts` - -### Async Patterns - -- All API methods return Promises -- No callback-style APIs -- Use `async/await`, avoid `.then()` chains in new code - -### Type Imports - -```typescript -// Use 'import type' for type-only imports -import type { SearchResponse } from './types'; -``` - -### Environment Detection - -```typescript -// Avoid direct process/window checks -// Use requester abstraction instead -``` - -## Build & Test Commands - -```bash -# From repo root (api-clients-automation) -yarn cli build clients javascript # Build all JS packages -yarn cli cts generate javascript # Generate CTS tests -yarn cli cts run javascript # Run CTS tests -yarn cli playground javascript node search # Interactive playground -yarn cli format javascript clients/algoliasearch-client-javascript - -# From client directory (for package-specific work) -cd clients/algoliasearch-client-javascript -yarn build # Build packages -yarn test # Run tests -``` diff --git a/CHANGELOG.md b/CHANGELOG.md index 68ee14810..88f08c142 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,1502 +1,268 @@ -## [5.56.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.55.2...5.56.0) +## [v4.17.2](https://github.com/algolia/algoliasearch-client-javascript/compare/4.17.1...4.17.2) -- [8a5ab6f7e8](https://github.com/algolia/api-clients-automation/commit/8a5ab6f7e8) feat(javascript): add WithHTTPInfo methods ([#6682](https://github.com/algolia/api-clients-automation/pull/6682)) by [@eric-zaharia](https://github.com/eric-zaharia/) -- [ac68c1a79c](https://github.com/algolia/api-clients-automation/commit/ac68c1a79c) fix(specs): add facetFilters back to recommend fallbackParameters ([#6727](https://github.com/algolia/api-clients-automation/pull/6727)) by [@raed667](https://github.com/raed667/) -- [02821a2f9d](https://github.com/algolia/api-clients-automation/commit/02821a2f9d) chore(deps): dependencies 2026-07-13 ([#6692](https://github.com/algolia/api-clients-automation/pull/6692)) by [@algolia-api-clients-automation-bot[bot]](https://github.com/apps/algolia-api-clients-automation-bot) +* fix(search): fix wait method for updateApiKey request (#1464) ([edc629d](https://github.com/algolia/algoliasearch-client-javascript/commit/edc629d)), closes [#1464](https://github.com/algolia/algoliasearch-client-javascript/issues/1464) +* docs(SearchOptions): fix jsdoc of sortFacetValuesBy (#1463) ([a4309c7](https://github.com/algolia/algoliasearch-client-javascript/commit/a4309c7)), closes [#1463](https://github.com/algolia/algoliasearch-client-javascript/issues/1463) -## [5.55.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.55.1...5.55.2) -- [035c03ecad](https://github.com/algolia/api-clients-automation/commit/035c03ecad) fix(specs): BREAKING CHANGE – remove recommend query params overridden by the API ([#6604](https://github.com/algolia/api-clients-automation/pull/6604)) by [@raed667](https://github.com/raed667/) - - The `ranking`, `facetFilters`, and `enableABTest` parameters have been removed from the Recommend request, and `enableRules` from its fallback parameters, as the Recommend API ignores them. API behavior is unchanged, but code setting these fields must be updated. -- [d1f8a51b63](https://github.com/algolia/api-clients-automation/commit/d1f8a51b63) fix(javascript): chunked push polling offset and batchSize forwarding ([#6598](https://github.com/algolia/api-clients-automation/pull/6598)) by [@eric-zaharia](https://github.com/eric-zaharia/) -- [5031c65633](https://github.com/algolia/api-clients-automation/commit/5031c65633) chore(deps): dependencies 2026-06-15 ([#6508](https://github.com/algolia/api-clients-automation/pull/6508)) by [@algolia-api-clients-automation-bot[bot]](https://github.com/apps/algolia-api-clients-automation-bot) -- [f258a66a9d](https://github.com/algolia/api-clients-automation/commit/f258a66a9d) fix(clients): browseSynonyms pagination (CR-11727) ([#6652](https://github.com/algolia/api-clients-automation/pull/6652)) by [@Fluf22](https://github.com/Fluf22/) -- [915cb4650b](https://github.com/algolia/api-clients-automation/commit/915cb4650b) fix(clients): add warning in replace_all_objects for empty objects ([#6611](https://github.com/algolia/api-clients-automation/pull/6611)) by [@eric-zaharia](https://github.com/eric-zaharia/) -- [3fe90834ec](https://github.com/algolia/api-clients-automation/commit/3fe90834ec) chore(deps): dependencies 2026-06-29 ([#6618](https://github.com/algolia/api-clients-automation/pull/6618)) by [@algolia-api-clients-automation-bot[bot]](https://github.com/apps/algolia-api-clients-automation-bot) -## [5.55.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.55.0...5.55.1) +## [v4.17.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.17.0...4.17.1) -- [a676cd9cef](https://github.com/algolia/api-clients-automation/commit/a676cd9cef) fix(clients): bump replaceAllObjects default maxRetries from 100 to 800 ([#6580](https://github.com/algolia/api-clients-automation/pull/6580)) by [@Fluf22](https://github.com/Fluf22/) -- [a632f9fb75](https://github.com/algolia/api-clients-automation/commit/a632f9fb75) fix(specs): BREAKING CHANGE – allow null records in getObjects response ([#6582](https://github.com/algolia/api-clients-automation/pull/6582)) by [@Fluf22](https://github.com/Fluf22/) - - The `getObjects` operation now returns a list of nullable objects, as the API can send back `null` records. The clients previously only allowed a list of objects, so the response type has been updated to allow `null` values. +* fix(recommend): Align `getRecommendations` type with actual implementation (#1459) ([d18391b](https://github.com/algolia/algoliasearch-client-javascript/commit/d18391b)), closes [#1459](https://github.com/algolia/algoliasearch-client-javascript/issues/1459) -## [5.55.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.54.1...5.55.0) -- [52ebd28f58](https://github.com/algolia/api-clients-automation/commit/52ebd28f58) feat(clients): release Agent Studio package updates ([#6573](https://github.com/algolia/api-clients-automation/pull/6573)) by [@Fluf22](https://github.com/Fluf22/) -## [5.54.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.54.0...5.54.1) +## [v4.17.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.16.0...4.17.0) -- [3a0bad1d01](https://github.com/algolia/api-clients-automation/commit/3a0bad1d01) fix(javascript): use proper null check instead of truthiness for required params ([#6498](https://github.com/algolia/api-clients-automation/pull/6498)) by [@Fluf22](https://github.com/Fluf22/) +* feat: update ab test typing (#1455) ([f53c72c](https://github.com/algolia/algoliasearch-client-javascript/commit/f53c72c)), closes [#1455](https://github.com/algolia/algoliasearch-client-javascript/issues/1455) +* feat(fetch): remove `mode` option to rely on library's default (#1452) ([67293e1](https://github.com/algolia/algoliasearch-client-javascript/commit/67293e1)), closes [#1452](https://github.com/algolia/algoliasearch-client-javascript/issues/1452) +* feat(neural): make eventSources nullable (#1453) ([eacfca2](https://github.com/algolia/algoliasearch-client-javascript/commit/eacfca2)), closes [#1453](https://github.com/algolia/algoliasearch-client-javascript/issues/1453) -## [5.54.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.53.0...5.54.0) -- [e6753bc802](https://github.com/algolia/api-clients-automation/commit/e6753bc802) chore(deps): dependencies 2026-06-01 ([#6476](https://github.com/algolia/api-clients-automation/pull/6476)) by [@algolia-bot](https://github.com/algolia-bot/) -- [7f2ce8cd3a](https://github.com/algolia/api-clients-automation/commit/7f2ce8cd3a) feat(clients): Agent Studio v1 ([#6097](https://github.com/algolia/api-clients-automation/pull/6097)) by [@Fluf22](https://github.com/Fluf22/) -## [5.53.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.52.1...5.53.0) +## [v4.16.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.15.0...4.16.0) -BREAKING CHANGES: this minor version includes breaking changes. See below for more details. +* feat(neuralsearch): adding the semanticSearch settings to client-search (#1450) ([a478ffd](https://github.com/algolia/algoliasearch-client-javascript/commit/a478ffd)), closes [#1450](https://github.com/algolia/algoliasearch-client-javascript/issues/1450) +* Fix for the redirect object in SearchResponse (#1443) ([6b0685c](https://github.com/algolia/algoliasearch-client-javascript/commit/6b0685c)), closes [#1443](https://github.com/algolia/algoliasearch-client-javascript/issues/1443) -- [c95cbc1d2e](https://github.com/algolia/api-clients-automation/commit/c95cbc1d2e) fix(javascript): handle response stream error in `createHttpRequester` ([#6347](https://github.com/algolia/api-clients-automation/pull/6347)) by [@zigzagdev](https://github.com/zigzagdev/) -- [c55851671e](https://github.com/algolia/api-clients-automation/commit/c55851671e) feat(javascript): BREAKING CHANGE – expose maximum number of retries ([#6353](https://github.com/algolia/api-clients-automation/pull/6353)) by [@eric-zaharia](https://github.com/eric-zaharia/) - - We updated the default number of retries to account for customers with huge indices, and made it configurable if you prefer to fail early. The impact is that the retry time will be longer in case of issue, but it shouldn't impact most customers: those who don't have issues. -- [84ebc480a8](https://github.com/algolia/api-clients-automation/commit/84ebc480a8) chore(deps): dependencies 2026-05-15 ([#6400](https://github.com/algolia/api-clients-automation/pull/6400)) by [@Fluf22](https://github.com/Fluf22/) -- [fc36d63e9f](https://github.com/algolia/api-clients-automation/commit/fc36d63e9f) fix(javascript): improve caching performance ([#6431](https://github.com/algolia/api-clients-automation/pull/6431)) by [@eric-zaharia](https://github.com/eric-zaharia/) -- [90da6bf0ae](https://github.com/algolia/api-clients-automation/commit/90da6bf0ae) chore(deps): dependencies 2026-05-18 ([#6429](https://github.com/algolia/api-clients-automation/pull/6429)) by [@Fluf22](https://github.com/Fluf22/) -- [eddd51e349](https://github.com/algolia/api-clients-automation/commit/eddd51e349) fix(specs): document abTest field on listIndices response ([#6443](https://github.com/algolia/api-clients-automation/pull/6443)) by [@eric-zaharia](https://github.com/eric-zaharia/) -- [1d3f2c149b](https://github.com/algolia/api-clients-automation/commit/1d3f2c149b) fix(specs): clean up abTest schema on listIndices response ([#6448](https://github.com/algolia/api-clients-automation/pull/6448)) by [@Fluf22](https://github.com/Fluf22/) -- [35bf16c848](https://github.com/algolia/api-clients-automation/commit/35bf16c848) fix(specs): BREAKING CHANGE – add searchResponsePartial fallback to searchResult oneOf ([#6350](https://github.com/algolia/api-clients-automation/pull/6350)) by [@Fluf22](https://github.com/Fluf22/) - - For those of you who want really clean responses without hits nor facets, we added a third fallback type to the search response. It should not impact the rest of the users. -- [d7aeef2482](https://github.com/algolia/api-clients-automation/commit/d7aeef2482) chore(deps): batch dependency updates ([#6465](https://github.com/algolia/api-clients-automation/pull/6465)) by [@Fluf22](https://github.com/Fluf22/) -## [5.52.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.52.0...5.52.1) -- [363cc2d91b](https://github.com/algolia/api-clients-automation/commit/363cc2d91b) fix(specs): Ingestion API - update destination payload ([#6320](https://github.com/algolia/api-clients-automation/pull/6320)) by [@sbellone](https://github.com/sbellone/) -- [4d2ae79e73](https://github.com/algolia/api-clients-automation/commit/4d2ae79e73) chore(deps): dependencies 2026-04-20 ([#6259](https://github.com/algolia/api-clients-automation/pull/6259)) by [@algolia-bot](https://github.com/algolia-bot/) -- [7178fa2e3b](https://github.com/algolia/api-clients-automation/commit/7178fa2e3b) chore(deps): dependencies 2026-05-04 ([#6322](https://github.com/algolia/api-clients-automation/pull/6322)) by [@algolia-bot](https://github.com/algolia-bot/) +## [v4.15.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.14.3...4.15.0) -## [5.52.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.51.0...5.52.0) +* feat: add mode to settings types (#1439) ([89fd80e](https://github.com/algolia/algoliasearch-client-javascript/commit/89fd80e)), closes [#1439](https://github.com/algolia/algoliasearch-client-javascript/issues/1439) -- [d275af4e18](https://github.com/algolia/api-clients-automation/commit/d275af4e18) feat(specs): add Algolia Index as a native connector in ingestion client ([#6290](https://github.com/algolia/api-clients-automation/pull/6290)) by [@morganleroi](https://github.com/morganleroi/) -- [74e91c1cd3](https://github.com/algolia/api-clients-automation/commit/74e91c1cd3) fix(specs): compostion run payload example for external injected items ([#6291](https://github.com/algolia/api-clients-automation/pull/6291)) by [@gavinwade12](https://github.com/gavinwade12/) -- [7b4c9dfc5d](https://github.com/algolia/api-clients-automation/commit/7b4c9dfc5d) fix(clients): push helper smooth traffic ([#6247](https://github.com/algolia/api-clients-automation/pull/6247)) by [@shortcuts](https://github.com/shortcuts/) -- [a98b7f7cd8](https://github.com/algolia/api-clients-automation/commit/a98b7f7cd8) feat(specs): add feedsOrder to composition run params ([#6314](https://github.com/algolia/api-clients-automation/pull/6314)) by [@gavinwade12](https://github.com/gavinwade12/) +## [v4.14.3](https://github.com/algolia/algoliasearch-client-javascript/compare/4.14.2...4.14.3) -## [5.51.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.50.2...5.51.0) +* fix(recommend): remove unused trendingFacets props (#1433) ([ffbfc05](https://github.com/algolia/algoliasearch-client-javascript/commit/ffbfc05)), closes [#1433](https://github.com/algolia/algoliasearch-client-javascript/issues/1433) +* fix(recommend): update trending facets query props (RECO-1184) (#1434) ([913443f](https://github.com/algolia/algoliasearch-client-javascript/commit/913443f)), closes [#1434](https://github.com/algolia/algoliasearch-client-javascript/issues/1434) +* docs: Fix incorrect property description (#1429) ([ba59b68](https://github.com/algolia/algoliasearch-client-javascript/commit/ba59b68)), closes [#1429](https://github.com/algolia/algoliasearch-client-javascript/issues/1429) -BREAKING CHANGES: this minor version includes breaking changes in the Composition API. See below for more details. +## [v4.14.2](https://github.com/algolia/algoliasearch-client-javascript/compare/4.14.1...4.14.2) -- [00271b6ba0](https://github.com/algolia/api-clients-automation/commit/00271b6ba0) feat(javascript): add transformationOptions and fix ingestion config leak ([#6252](https://github.com/algolia/api-clients-automation/pull/6252)) by [@eric-zaharia](https://github.com/eric-zaharia/) -- [39ea2c5cb3](https://github.com/algolia/api-clients-automation/commit/39ea2c5cb3) refactor(specs): split injection schema ([#6224](https://github.com/algolia/api-clients-automation/pull/6224)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [544091a5f2](https://github.com/algolia/api-clients-automation/commit/544091a5f2) feat(specs): introduce recommend source in Comp API client ([#6227](https://github.com/algolia/api-clients-automation/pull/6227)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [f73d69aae4](https://github.com/algolia/api-clients-automation/commit/f73d69aae4) fix(specs): clarify getIndexingTime ([#6276](https://github.com/algolia/api-clients-automation/pull/6276)) by [@kai687](https://github.com/kai687/) -- [78ffb45894](https://github.com/algolia/api-clients-automation/commit/78ffb45894) fix(javascript): increase default retry max ([#6278](https://github.com/algolia/api-clients-automation/pull/6278)) by [@eric-zaharia](https://github.com/eric-zaharia/) -- [e48d5c4bbf](https://github.com/algolia/api-clients-automation/commit/e48d5c4bbf) feat(specs): query categorization ([#6258](https://github.com/algolia/api-clients-automation/pull/6258)) by [@eric-zaharia](https://github.com/eric-zaharia/) +- fix(types): add `abTestID` to `SearchResponse` (#1419) ([05059f2](https://github.com/algolia/algoliasearch-client-javascript/commit/05059f2)), closes [#1419](https://github.com/algolia/algoliasearch-client-javascript/issues/1419) -## [5.50.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.50.1...5.50.2) +## [v4.14.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.14.0...4.14.1) -- [d86a5438e2](https://github.com/algolia/api-clients-automation/commit/d86a5438e2) chore(deps): dependencies 2026-04-06 ([#6200](https://github.com/algolia/api-clients-automation/pull/6200)) by [@algolia-bot](https://github.com/algolia-bot/) -- [4049f8aaf7](https://github.com/algolia/api-clients-automation/commit/4049f8aaf7) fix(deps): mitigate critical and high security vulnerabilities ([#6250](https://github.com/algolia/api-clients-automation/pull/6250)) by [@Fluf22](https://github.com/Fluf22/) -- [526567a633](https://github.com/algolia/api-clients-automation/commit/526567a633) fix(deps): force axios ^1.15.0 globally in JS client workspace ([#6251](https://github.com/algolia/api-clients-automation/pull/6251)) by [@Fluf22](https://github.com/Fluf22/) +- fix(types): Updating searchoptions with explain attribute (#1415) ([c46932e](https://github.com/algolia/algoliasearch-client-javascript/commit/c46932e)), closes [#1415](https://github.com/algolia/algoliasearch-client-javascript/issues/1415) -## [5.50.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.50.0...5.50.1) +## [v4.14.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.13.1...4.14.0) -- [dc02ad1023](https://github.com/algolia/api-clients-automation/commit/dc02ad1023) chore(deps): dependencies 2026-03-30 ([#6169](https://github.com/algolia/api-clients-automation/pull/6169)) by [@algolia-bot](https://github.com/algolia-bot/) -- [748a90222a](https://github.com/algolia/api-clients-automation/commit/748a90222a) chore(javascript): correct export paths in package.mustache for consistency ([#5740](https://github.com/algolia/api-clients-automation/pull/5740)) by [@Fluf22](https://github.com/Fluf22/) +- chore: mention `next` version in `README` (#1413) ([100d180](https://github.com/algolia/algoliasearch-client-javascript/commit/100d180)), closes [#1413](https://github.com/algolia/algoliasearch-client-javascript/issues/1413) +- feat(fetch-requester): add `@algolia/requester-fetch` (#1411) ([7b62403](https://github.com/algolia/algoliasearch-client-javascript/commit/7b62403)), closes [#1411](https://github.com/algolia/algoliasearch-client-javascript/issues/1411) -## [5.50.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.49.2...5.50.0) +## [v4.13.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.13.0...4.13.1) -- [2d6c9b2727](https://github.com/algolia/api-clients-automation/commit/2d6c9b2727) feat(javascript): Implement gzip compression ([#6052](https://github.com/algolia/api-clients-automation/pull/6052)) by [@MarioAlexandruDan](https://github.com/MarioAlexandruDan/) -- [a196c9cf73](https://github.com/algolia/api-clients-automation/commit/a196c9cf73) feat(clients): response decompression ([#6095](https://github.com/algolia/api-clients-automation/pull/6095)) by [@eric-zaharia](https://github.com/eric-zaharia/) -- [1ad4bcd99b](https://github.com/algolia/api-clients-automation/commit/1ad4bcd99b) fix(javascript): Update Node options to target ES2018 ([#6101](https://github.com/algolia/api-clients-automation/pull/6101)) by [@MarioAlexandruDan](https://github.com/MarioAlexandruDan/) -- [600f157a13](https://github.com/algolia/api-clients-automation/commit/600f157a13) fix(specs): remove query parameter that are not accepted by the Composition API ([#6128](https://github.com/algolia/api-clients-automation/pull/6128)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [90d96d575a](https://github.com/algolia/api-clients-automation/commit/90d96d575a) chore(deps): dependencies 2026-03-16 ([#6102](https://github.com/algolia/api-clients-automation/pull/6102)) by [@algolia-bot](https://github.com/algolia-bot/) -- [6064369533](https://github.com/algolia/api-clients-automation/commit/6064369533) fix(javascript): move gzip compression to node-only builds, remove fflate ([#6154](https://github.com/algolia/api-clients-automation/pull/6154)) by [@Fluf22](https://github.com/Fluf22/) +- 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) -## [5.49.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.49.1...5.49.2) +## [v4.13.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.12.2...4.13.0) -- [505136c9d](https://github.com/algolia/api-clients-automation/commit/505136c9d) fix(specs): add deprecated field `condition` in rule schemas ([#5983](https://github.com/algolia/api-clients-automation/pull/5983)) by [@MarioAlexandruDan](https://github.com/MarioAlexandruDan/) -- [81b565c73](https://github.com/algolia/api-clients-automation/commit/81b565c73) fix(generators): getObject has no generic type ([#6026](https://github.com/algolia/api-clients-automation/pull/6026)) by [@MarioAlexandruDan](https://github.com/MarioAlexandruDan/) -- [756d79f6c](https://github.com/algolia/api-clients-automation/commit/756d79f6c) chore(deps): dependencies 2026-03-02 ([#6028](https://github.com/algolia/api-clients-automation/pull/6028)) by [@algolia-bot](https://github.com/algolia-bot/) -- [21b1b9b70](https://github.com/algolia/api-clients-automation/commit/21b1b9b70) chore(deps): dependencies 2026-03-09 ([#6084](https://github.com/algolia/api-clients-automation/pull/6084)) by [@Fluf22](https://github.com/Fluf22/) +- 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) -## [5.49.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.49.0...5.49.1) +## [v4.12.2](https://github.com/algolia/algoliasearch-client-javascript/compare/4.12.1...4.12.2) -- [969c6b510](https://github.com/algolia/api-clients-automation/commit/969c6b510) chore(deps): dependencies 2026-02-23 ([#5999](https://github.com/algolia/api-clients-automation/pull/5999)) by [@algolia-bot](https://github.com/algolia-bot/) +- 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) -## [5.49.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.48.2...5.49.0) +## [v4.12.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.12.0...4.12.1) -- [6d03afc03](https://github.com/algolia/api-clients-automation/commit/6d03afc03) chore(deps): dependencies 2026-02-16 ([#5965](https://github.com/algolia/api-clients-automation/pull/5965)) by [@algolia-bot](https://github.com/algolia-bot/) -- [93c834fee](https://github.com/algolia/api-clients-automation/commit/93c834fee) feat(specs): add optional feedID to composition result set ([#5991](https://github.com/algolia/api-clients-automation/pull/5991)) by [@gavinwade12](https://github.com/gavinwade12/) -- [9aafd690b](https://github.com/algolia/api-clients-automation/commit/9aafd690b) fix(specs): invalid API format for multi feed in Comp API ([#5993](https://github.com/algolia/api-clients-automation/pull/5993)) by [@ClaraMuller](https://github.com/ClaraMuller/) +- 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) -## [5.48.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.48.1...5.48.2) +## [v4.12.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.11.0...4.12.0) -- [19df12f31](https://github.com/algolia/api-clients-automation/commit/19df12f31) fix(javascript): Added warning in comment ([#5961](https://github.com/algolia/api-clients-automation/pull/5961)) by [@eric-zaharia](https://github.com/eric-zaharia/) +- 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) -## [5.48.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.48.0...5.48.1) +## [v4.11.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.10.5...4.11.0) -- [46be49a3f](https://github.com/algolia/api-clients-automation/commit/46be49a3f) docs(specs): align with style guides ([#5930](https://github.com/algolia/api-clients-automation/pull/5930)) by [@kai687](https://github.com/kai687/) -- [799a10c44](https://github.com/algolia/api-clients-automation/commit/799a10c44) fix(specs): insights-api timestamp documentation ([#5925](https://github.com/algolia/api-clients-automation/pull/5925)) by [@sirockin](https://github.com/sirockin/) -- [4b3dc5c26](https://github.com/algolia/api-clients-automation/commit/4b3dc5c26) fix(specs): BREAKING CHANGE – remove unnecessary required fields ([#5959](https://github.com/algolia/api-clients-automation/pull/5959)) by [@MarioAlexandruDan](https://github.com/MarioAlexandruDan/) - - The `SearchResponse` model now accepts `query` and `params` as optional parameters, as they are not always returned by the API. -- [dfd992583](https://github.com/algolia/api-clients-automation/commit/dfd992583) fix(specs): add missing `redirect` property to rule consequence schema ([#5934](https://github.com/algolia/api-clients-automation/pull/5934)) by [@Fluf22](https://github.com/Fluf22/) -- [b39c0798e](https://github.com/algolia/api-clients-automation/commit/b39c0798e) chore(deps): dependencies 2026-02-09 ([#5935](https://github.com/algolia/api-clients-automation/pull/5935)) by [@algolia-bot](https://github.com/algolia-bot/) +- 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) -## [5.48.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.47.0...5.48.0) +## [v4.10.5](https://github.com/algolia/algoliasearch-client-javascript/compare/4.10.4...4.10.5) -BREAKING CHANGES: this minor version includes multiple breaking changes related to fixes on different APIs. See below for more details. +- 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) -- [b39e3e013](https://github.com/algolia/api-clients-automation/commit/b39e3e013) feat(specs): `conditions` is not required anymore in composition rules ([#5853](https://github.com/algolia/api-clients-automation/pull/5853)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [9ef126ccd](https://github.com/algolia/api-clients-automation/commit/9ef126ccd) docs(SearchParams): Document that filter scores are supported in virtual replicas ([#5716](https://github.com/algolia/api-clients-automation/pull/5716)) by [@NixFrog](https://github.com/NixFrog/) -- [6a3e60802](https://github.com/algolia/api-clients-automation/commit/6a3e60802) fix(specs): BREAKING CHANGE – remove baseRecommendRequest from trendingFacets [CR-10264] ([#5858](https://github.com/algolia/api-clients-automation/pull/5858)) by [@raed667](https://github.com/raed667/) - - The `TrendingFacets` model has been updated to reflect the API response. -- [f9453e693](https://github.com/algolia/api-clients-automation/commit/f9453e693) docs: BREAKING CHANGE – authentication type can't be updated ([#5824](https://github.com/algolia/api-clients-automation/pull/5824)) by [@sbellone](https://github.com/sbellone/) - - The `AuthenticationUpdate` model has been updated to reflect that the `type` field can't be updated. -- [2d1c05654](https://github.com/algolia/api-clients-automation/commit/2d1c05654) chore(deps): dependencies 2026-01-26 ([#5859](https://github.com/algolia/api-clients-automation/pull/5859)) by [@algolia-bot](https://github.com/algolia-bot/) -- [6591e14a6](https://github.com/algolia/api-clients-automation/commit/6591e14a6) feat(clients): Test python timeout ([#5883](https://github.com/algolia/api-clients-automation/pull/5883)) by [@eric-zaharia](https://github.com/eric-zaharia/) -- [52aed5b35](https://github.com/algolia/api-clients-automation/commit/52aed5b35) fix(specs): allow additionalProperties on insights-api events ([#5885](https://github.com/algolia/api-clients-automation/pull/5885)) by [@sirockin](https://github.com/sirockin/) -- [2925f56d1](https://github.com/algolia/api-clients-automation/commit/2925f56d1) fix(specs): BREAKING CHANGE – more accurate composition behavior typing ([#5892](https://github.com/algolia/api-clients-automation/pull/5892)) by [@gavinwade12](https://github.com/gavinwade12/) - - The `CompositionBehavior` model is now a union type for better accuracy. -- [63b0c5464](https://github.com/algolia/api-clients-automation/commit/63b0c5464) feat(specs): BREAKING CHANGE – Ingestion API: new `code` property in oauth authentication ([#5897](https://github.com/algolia/api-clients-automation/pull/5897)) by [@sbellone](https://github.com/sbellone/) - - The `AuthOAuth` and `AuthOAuthPartial` models have been updated to reflect that the `clientId` field is now optional, and the `code` field can be set. -- [d4d385654](https://github.com/algolia/api-clients-automation/commit/d4d385654) chore(deps): dependencies 2026-02-02 ([#5898](https://github.com/algolia/api-clients-automation/pull/5898)) by [@algolia-bot](https://github.com/algolia-bot/) +## [v4.10.4](https://github.com/algolia/algoliasearch-client-javascript/compare/4.10.3...4.10.4) -## [5.47.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.46.4...5.47.0) +- 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) -- [f9ac3a711](https://github.com/algolia/api-clients-automation/commit/f9ac3a711) feat(specs): introduce multifeed composition behavior for beta release ([#5828](https://github.com/algolia/api-clients-automation/pull/5828)) by [@gavinwade12](https://github.com/gavinwade12/) +## [v4.10.3](https://github.com/algolia/algoliasearch-client-javascript/compare/4.10.2...4.10.3) -## [5.46.4](https://github.com/algolia/algoliasearch-client-javascript/compare/5.46.3...5.46.4) +- 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)) -- [f02ab6fa0](https://github.com/algolia/api-clients-automation/commit/f02ab6fa0) chore: agentic config prep ([#5825](https://github.com/algolia/api-clients-automation/pull/5825)) by [@Fluf22](https://github.com/Fluf22/) +## [v4.10.2](https://github.com/algolia/algoliasearch-client-javascript/compare/4.10.0...4.10.2) -## [5.46.3](https://github.com/algolia/algoliasearch-client-javascript/compare/5.46.2...5.46.3) +- 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) -- [cd7a174b4](https://github.com/algolia/api-clients-automation/commit/cd7a174b4) fix(specs): BREAKING CHANGE — remove fields requirement from run response in CompAPI client ([#5809](https://github.com/algolia/api-clients-automation/pull/5809)) by [@ClaraMuller](https://github.com/ClaraMuller/)\ - Some fields from the Composition Run search response were marked as required while they were optional on the API side. This has been fixed, but might impact the client types. -- [b08917039](https://github.com/algolia/api-clients-automation/commit/b08917039) chore(deps): dependencies 2025-12-29 ([#5792](https://github.com/algolia/api-clients-automation/pull/5792)) 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.46.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.46.1...5.46.2) +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. -- [c88b505d6](https://github.com/algolia/api-clients-automation/commit/c88b505d6) chore: migrate lerna config ([#5772](https://github.com/algolia/api-clients-automation/pull/5772)) by [@shortcuts](https://github.com/shortcuts/) -- [005aa6524](https://github.com/algolia/api-clients-automation/commit/005aa6524) chore(deps): dependencies 2025-12-22 ([#5775](https://github.com/algolia/api-clients-automation/pull/5775)) by [@algolia-bot](https://github.com/algolia-bot/) +- 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.46.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.46.0...5.46.1) +## [v4.9.3](https://github.com/algolia/algoliasearch-client-javascript/compare/4.9.2...4.9.3) -- [0ad34c60c](https://github.com/algolia/api-clients-automation/commit/0ad34c60c) chore: setup release workflow for npm trusted publisher ([#5717](https://github.com/algolia/api-clients-automation/pull/5717)) by [@Fluf22](https://github.com/Fluf22/) -- [54606b3b2](https://github.com/algolia/api-clients-automation/commit/54606b3b2) refactor(specs): extract `results` field in a dedicated directory ([#5739](https://github.com/algolia/api-clients-automation/pull/5739)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [3296a5033](https://github.com/algolia/api-clients-automation/commit/3296a5033) chore(deps): dependencies 2025-11-24 ([#5653](https://github.com/algolia/api-clients-automation/pull/5653)) by [@algolia-bot](https://github.com/algolia-bot/) -- [c69128212](https://github.com/algolia/api-clients-automation/commit/c69128212) chore: update instantsearch dependencies ([#5743](https://github.com/algolia/api-clients-automation/pull/5743)) by [@Fluf22](https://github.com/Fluf22/) -- [5dabdc540](https://github.com/algolia/api-clients-automation/commit/5dabdc540) refactor(specs): re-organise response for Composition API ([#5744](https://github.com/algolia/api-clients-automation/pull/5744)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [d08f7d9f2](https://github.com/algolia/api-clients-automation/commit/d08f7d9f2) chore(deps): dependencies 2025-12-15 ([#5745](https://github.com/algolia/api-clients-automation/pull/5745)) by [@algolia-bot](https://github.com/algolia-bot/) -- [3d86676b0](https://github.com/algolia/api-clients-automation/commit/3d86676b0) fix(specs): update list with NLU permissions ([#5769](https://github.com/algolia/api-clients-automation/pull/5769)) by [@MarioAlexandruDan](https://github.com/MarioAlexandruDan/) +- fix(ts): make all keys in facetOrdering optional ([d772f98](https://github.com/algolia/algoliasearch-client-javascript/commit/d772f98)) -## [5.46.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.45.0...5.46.0) +## [v4.9.2](https://github.com/algolia/algoliasearch-client-javascript/compare/4.9.1...4.9.2) -- [5335918a5](https://github.com/algolia/api-clients-automation/commit/5335918a5) chore(scripts): update the jira action ([#5678](https://github.com/algolia/api-clients-automation/pull/5678)) by [@millotp](https://github.com/millotp/) -- [d6bde0f0c](https://github.com/algolia/api-clients-automation/commit/d6bde0f0c) chore(scripts): remove component from jira ticket ([#5680](https://github.com/algolia/api-clients-automation/pull/5680)) by [@millotp](https://github.com/millotp/) -- [bc8460c30](https://github.com/algolia/api-clients-automation/commit/bc8460c30) chore(specs): change oneOf order for docs ([#5676](https://github.com/algolia/api-clients-automation/pull/5676)) by [@shortcuts](https://github.com/shortcuts/) -- [fe6e82c11](https://github.com/algolia/api-clients-automation/commit/fe6e82c11) feat(specs): add sortBy query param and sortingStrategy ([#5686](https://github.com/algolia/api-clients-automation/pull/5686)) by [@ben-kalmus](https://github.com/ben-kalmus/) -- [cccfa9c86](https://github.com/algolia/api-clients-automation/commit/cccfa9c86) feat(specs): add `sortBy` trigger on Composition Rules ([#5707](https://github.com/algolia/api-clients-automation/pull/5707)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [260d8102c](https://github.com/algolia/api-clients-automation/commit/260d8102c) docs(abtests): Added documentation for featureFilters configuration i… ([#5688](https://github.com/algolia/api-clients-automation/pull/5688)) by [@samykettani](https://github.com/samykettani/) -- [4ce8b7dc6](https://github.com/algolia/api-clients-automation/commit/4ce8b7dc6) feat(javascript): allow cache on POST ([#5675](https://github.com/algolia/api-clients-automation/pull/5675)) by [@Haroenv](https://github.com/Haroenv/) +- 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.45.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.44.0...5.45.0) +## [v4.9.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.9.0...4.9.1) -- [5b042c47af](https://github.com/algolia/api-clients-automation/commit/5b042c47af) chore(deps): dependencies 2025-11-17 ([#5624](https://github.com/algolia/api-clients-automation/pull/5624)) by [@algolia-bot](https://github.com/algolia-bot/) -- [6a48ef151a](https://github.com/algolia/api-clients-automation/commit/6a48ef151a) feat(specs): allow `enablePersonalization` query parameter at run time for Composition API ([#5651](https://github.com/algolia/api-clients-automation/pull/5651)) by [@ClaraMuller](https://github.com/ClaraMuller/) +- 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.44.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.43.0...5.44.0) +## [v4.9.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.6...4.9.0) -- [7d189e024](https://github.com/algolia/api-clients-automation/commit/7d189e024) feat(specs): add useImagesObjects property in commercetools source input ([#5586](https://github.com/algolia/api-clients-automation/pull/5586)) by [@sbellone](https://github.com/sbellone/) -- [ee5542a32](https://github.com/algolia/api-clients-automation/commit/ee5542a32) fix(specs): Add title values to key oneOfs ([#5581](https://github.com/algolia/api-clients-automation/pull/5581)) by [@gazconroy](https://github.com/gazconroy/) -- [cdace3169](https://github.com/algolia/api-clients-automation/commit/cdace3169) chore(deps): dependencies 2025-11-10 ([#5585](https://github.com/algolia/api-clients-automation/pull/5585)) by [@algolia-bot](https://github.com/algolia-bot/) -- [354d28b7c](https://github.com/algolia/api-clients-automation/commit/354d28b7c) fix(specs): update run reason in observability ([#5623](https://github.com/algolia/api-clients-automation/pull/5623)) by [@millotp](https://github.com/millotp/) -- [ae9ac597f](https://github.com/algolia/api-clients-automation/commit/ae9ac597f) fix(specs): add tags and scope to rules ([#5625](https://github.com/algolia/api-clients-automation/pull/5625)) by [@millotp](https://github.com/millotp/) +- 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.43.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.42.0...5.43.0) +## [v4.8.6](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.5...4.8.6) -- [ecfea56dc](https://github.com/algolia/api-clients-automation/commit/ecfea56dc) feat(clients): remove schedule capabilities ([#5552](https://github.com/algolia/api-clients-automation/pull/5552)) by [@cdhawke](https://github.com/cdhawke/) -- [391059ed9](https://github.com/algolia/api-clients-automation/commit/391059ed9) chore(deps): dependencies 2025-11-03 ([#5553](https://github.com/algolia/api-clients-automation/pull/5553)) by [@algolia-bot](https://github.com/algolia-bot/) -- [ff4b8f02c](https://github.com/algolia/api-clients-automation/commit/ff4b8f02c) feat(specs): add fallbackParameters to Frequently bought together [RECO-2443] ([#5579](https://github.com/algolia/api-clients-automation/pull/5579)) by [@raed667](https://github.com/raed667/) +- 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.42.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.41.0...5.42.0) +## [v4.8.5](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.4...4.8.5) -- [1eee2a5f7](https://github.com/algolia/api-clients-automation/commit/1eee2a5f7) fix(specs): add ACL to missing endpoints ([#5529](https://github.com/algolia/api-clients-automation/pull/5529)) by [@millotp](https://github.com/millotp/) -- [564d615ca](https://github.com/algolia/api-clients-automation/commit/564d615ca) chore(deps): dependencies 2025-10-27 ([#5530](https://github.com/algolia/api-clients-automation/pull/5530)) by [@algolia-bot](https://github.com/algolia-bot/) -- [38ae444d7](https://github.com/algolia/api-clients-automation/commit/38ae444d7) feat(specs): add specific documentation for `facets` query parameter in Composition API ([#5477](https://github.com/algolia/api-clients-automation/pull/5477)) by [@ClaraMuller](https://github.com/ClaraMuller/) +- 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.41.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.40.1...5.41.0) +## [v4.8.4](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.3...4.8.4) -- [7f9de7cd9](https://github.com/algolia/api-clients-automation/commit/7f9de7cd9) fix(specs): ingestion small fix + added source input descriptions ([#5515](https://github.com/algolia/api-clients-automation/pull/5515)) by [@sbellone](https://github.com/sbellone/) -- [7287faaa7](https://github.com/algolia/api-clients-automation/commit/7287faaa7) feat(specs): add `facets` query parameter available at run time ([#5486](https://github.com/algolia/api-clients-automation/pull/5486)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [b4794d6c2](https://github.com/algolia/api-clients-automation/commit/b4794d6c2) chore(deps): dependencies 2025-10-20 ([#5487](https://github.com/algolia/api-clients-automation/pull/5487)) by [@algolia-bot](https://github.com/algolia-bot/) +- 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.40.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.40.0...5.40.1) +## [v4.8.3](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.2...4.8.3) -- [9a92b3269](https://github.com/algolia/api-clients-automation/commit/9a92b3269) chore(deps): dependencies 2025-10-13 ([#5453](https://github.com/algolia/api-clients-automation/pull/5453)) by [@algolia-bot](https://github.com/algolia-bot/) -- [ac940e40c](https://github.com/algolia/api-clients-automation/commit/ac940e40c) fix(clients): forward requestOptions to searchForHits ([#5473](https://github.com/algolia/api-clients-automation/pull/5473)) by [@millotp](https://github.com/millotp/) -- [02b6a90ae](https://github.com/algolia/api-clients-automation/commit/02b6a90ae) fix(clients): upgrade linter ([#5476](https://github.com/algolia/api-clients-automation/pull/5476)) by [@millotp](https://github.com/millotp/) -- [3fc252bec](https://github.com/algolia/api-clients-automation/commit/3fc252bec) chore: remove dead links ([#5472](https://github.com/algolia/api-clients-automation/pull/5472)) by [@millotp](https://github.com/millotp/) -- [9eebe5113](https://github.com/algolia/api-clients-automation/commit/9eebe5113) docs: replace links for the new doc ([#5478](https://github.com/algolia/api-clients-automation/pull/5478)) by [@millotp](https://github.com/millotp/) +- 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.40.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.39.0...5.40.0) +## [v4.8.2](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.1...4.8.2) -- [7de94353f](https://github.com/algolia/api-clients-automation/commit/7de94353f) feat(specs): add compositions deduplication setting ([#5418](https://github.com/algolia/api-clients-automation/pull/5418)) by [@ben-kalmus](https://github.com/ben-kalmus/) -- [8bee10f1a](https://github.com/algolia/api-clients-automation/commit/8bee10f1a) fix(clients): add a default idleConnTimeout ([#5442](https://github.com/algolia/api-clients-automation/pull/5442)) by [@millotp](https://github.com/millotp/) -- [01261eceb](https://github.com/algolia/api-clients-automation/commit/01261eceb) chore(deps): dependencies 2025-09-29 ([#5393](https://github.com/algolia/api-clients-automation/pull/5393)) by [@algolia-bot](https://github.com/algolia-bot/) +- 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.39.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.38.0...5.39.0) +## [v4.8.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.0...4.8.1) -- [ad51f60561](https://github.com/algolia/api-clients-automation/commit/ad51f60561) feat(specs): add partialNoCreate action to ingestion specs ([#5389](https://github.com/algolia/api-clients-automation/pull/5389)) 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.38.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.37.0...5.38.0) +## [v4.8.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.7.0...4.8.0) -- [ca25c44e2](https://github.com/algolia/api-clients-automation/commit/ca25c44e2) chore(deps): dependencies 2025-09-08 ([#5310](https://github.com/algolia/api-clients-automation/pull/5310)) by [@algolia-bot](https://github.com/algolia-bot/) -- [67a3abdc3](https://github.com/algolia/api-clients-automation/commit/67a3abdc3) test(javascript): update compositions testcases for metadata and external injected items ([#5331](https://github.com/algolia/api-clients-automation/pull/5331)) by [@ben-kalmus](https://github.com/ben-kalmus/) -- [cfbd9aa3c](https://github.com/algolia/api-clients-automation/commit/cfbd9aa3c) fix(specs): normalize spelling of summaries ([#5340](https://github.com/algolia/api-clients-automation/pull/5340)) by [@kai687](https://github.com/kai687/) -- [353f4a08f](https://github.com/algolia/api-clients-automation/commit/353f4a08f) feat(specs): allow filtering transformations type ([#5363](https://github.com/algolia/api-clients-automation/pull/5363)) by [@shortcuts](https://github.com/shortcuts/) -- [6631c7f11](https://github.com/algolia/api-clients-automation/commit/6631c7f11) feat(specs): deprecate Predict real-time endpoints ([#5364](https://github.com/algolia/api-clients-automation/pull/5364)) by [@raed667](https://github.com/raed667/) -- [323e06d6f](https://github.com/algolia/api-clients-automation/commit/323e06d6f) chore(deps): dependencies 2025-09-15 ([#5341](https://github.com/algolia/api-clients-automation/pull/5341)) by [@algolia-bot](https://github.com/algolia-bot/) -- [9884be690](https://github.com/algolia/api-clients-automation/commit/9884be690) feat(specs): merge `composition` & `composition-full` ([#5333](https://github.com/algolia/api-clients-automation/pull/5333)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [bdc670bfa](https://github.com/algolia/api-clients-automation/commit/bdc670bfa) chore(deps): dependencies 2025-09-22 ([#5369](https://github.com/algolia/api-clients-automation/pull/5369)) by [@algolia-bot](https://github.com/algolia-bot/) +- 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.37.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.36.0...5.37.0) +## [v4.7.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.6.0...4.7.0) -- [8f4abf3a1](https://github.com/algolia/api-clients-automation/commit/8f4abf3a1) fix(specs): Cross-reference filerPromotes to relevant guide ([#5279](https://github.com/algolia/api-clients-automation/pull/5279)) by [@gazconroy](https://github.com/gazconroy/) -- [1f4a3a9f7](https://github.com/algolia/api-clients-automation/commit/1f4a3a9f7) feat(specs): add put task endpoint to ingestion api ([#5281](https://github.com/algolia/api-clients-automation/pull/5281)) by [@shortcuts](https://github.com/shortcuts/) -- [08e9d1888](https://github.com/algolia/api-clients-automation/commit/08e9d1888) fix(specs): add getVersion parameter to getSettings ([#5254](https://github.com/algolia/api-clients-automation/pull/5254)) by [@millotp](https://github.com/millotp/) -- [aa340dc23](https://github.com/algolia/api-clients-automation/commit/aa340dc23) feat(specs): add put and delete API for compositions and rules ([#5282](https://github.com/algolia/api-clients-automation/pull/5282)) by [@ben-kalmus](https://github.com/ben-kalmus/) -- [716aa852f](https://github.com/algolia/api-clients-automation/commit/716aa852f) chore(deps): dependencies 2025-09-01 ([#5285](https://github.com/algolia/api-clients-automation/pull/5285)) by [@algolia-bot](https://github.com/algolia-bot/) -- [f4eee1c4a](https://github.com/algolia/api-clients-automation/commit/f4eee1c4a) chore(website): exclude schema from generated variables file ([#5306](https://github.com/algolia/api-clients-automation/pull/5306)) by [@Fluf22](https://github.com/Fluf22/) -- [2fa0389f8](https://github.com/algolia/api-clients-automation/commit/2fa0389f8) fix(clients): link to support/help center on unreachable hosts ([#5305](https://github.com/algolia/api-clients-automation/pull/5305)) 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.36.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.35.0...5.36.0) +## [v4.6.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.5.1...4.6.0) -- [40f3bebfde](https://github.com/algolia/api-clients-automation/commit/40f3bebfde) fix(clients): prefix tags with v ([#5186](https://github.com/algolia/api-clients-automation/pull/5186)) by [@millotp](https://github.com/millotp/) -- [5cbd251539](https://github.com/algolia/api-clients-automation/commit/5cbd251539) chore(deps): dependencies 2025-08-04 ([#5187](https://github.com/algolia/api-clients-automation/pull/5187)) by [@algolia-bot](https://github.com/algolia-bot/) -- [48672036c1](https://github.com/algolia/api-clients-automation/commit/48672036c1) refactor(specs): mutualise code between Search API & Comp API for search query parameters ([#5125](https://github.com/algolia/api-clients-automation/pull/5125)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [ca6f3ca016](https://github.com/algolia/api-clients-automation/commit/ca6f3ca016) fix(specs): define batch actions ([#5242](https://github.com/algolia/api-clients-automation/pull/5242)) by [@kai687](https://github.com/kai687/) -- [99f8174c7d](https://github.com/algolia/api-clients-automation/commit/99f8174c7d) feat(specs): add fields for metadata in composition injectedItems ([#5241](https://github.com/algolia/api-clients-automation/pull/5241)) by [@gavinwade12](https://github.com/gavinwade12/) -- [e57faa4d4f](https://github.com/algolia/api-clients-automation/commit/e57faa4d4f) chore(deps): dependencies 2025-08-11 ([#5225](https://github.com/algolia/api-clients-automation/pull/5225)) by [@algolia-bot](https://github.com/algolia-bot/) -- [ff178d8118](https://github.com/algolia/api-clients-automation/commit/ff178d8118) feat(specs): abtests stopped at ([#5275](https://github.com/algolia/api-clients-automation/pull/5275)) by [@stevenMevans](https://github.com/stevenMevans/) +- 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.35.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.34.1...5.35.0) +## [v4.5.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.5.0...4.5.1) -- [050aacef17](https://github.com/algolia/api-clients-automation/commit/050aacef17) chore(deps): dependencies 2025-07-28 ([#5161](https://github.com/algolia/api-clients-automation/pull/5161)) by [@algolia-bot](https://github.com/algolia-bot/) -- [256482c023](https://github.com/algolia/api-clients-automation/commit/256482c023) fix(clients): add batchSize to accountCopyIndex ([#5181](https://github.com/algolia/api-clients-automation/pull/5181)) by [@millotp](https://github.com/millotp/) -- [66bc4eee9e](https://github.com/algolia/api-clients-automation/commit/66bc4eee9e) feat(clients): add new abtesting-v3 package to clients + stabilize alpha js package ([#5157](https://github.com/algolia/api-clients-automation/pull/5157)) by [@leonardogavaudan](https://github.com/leonardogavaudan/) +### Fixed -## [5.34.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.34.0...5.34.1) +- avoid bundle-size increase by using a slightly older version of babel -- [84a1f4e422](https://github.com/algolia/api-clients-automation/commit/84a1f4e422) refactor(specs): add interface to manipulate query parameter between composition API & Search API ([#5123](https://github.com/algolia/api-clients-automation/pull/5123)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [995f185c07](https://github.com/algolia/api-clients-automation/commit/995f185c07) chore(deps): dependencies 2025-07-21 ([#5129](https://github.com/algolia/api-clients-automation/pull/5129)) by [@algolia-bot](https://github.com/algolia-bot/) -- [d1596a814e](https://github.com/algolia/api-clients-automation/commit/d1596a814e) fix(specs): Add customSearchParameters to Variant schema, and add direction query param for GET abtests ([#5130](https://github.com/algolia/api-clients-automation/pull/5130)) by [@leonardogavaudan](https://github.com/leonardogavaudan/) -- [f25e156dde](https://github.com/algolia/api-clients-automation/commit/f25e156dde) fix(specs): value/price clarifications in the Insights API ([#5154](https://github.com/algolia/api-clients-automation/pull/5154)) by [@kai687](https://github.com/kai687/) -- [3160f87f7b](https://github.com/algolia/api-clients-automation/commit/3160f87f7b) fix(clients): reduce chances of Push rate limiting ([#5153](https://github.com/algolia/api-clients-automation/pull/5153)) by [@shortcuts](https://github.com/shortcuts/) +## [v4.5.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.4.0...4.5.0) -## [5.34.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.33.0...5.34.0) +### Added -- [d05999769a](https://github.com/algolia/api-clients-automation/commit/d05999769a) fix(specs): abtests metadata mean ([#5121](https://github.com/algolia/api-clients-automation/pull/5121)) by [@cdhawke](https://github.com/cdhawke/) -- [278a9e6832](https://github.com/algolia/api-clients-automation/commit/278a9e6832) fix(specs): cleanup for composition API clients ([#5119](https://github.com/algolia/api-clients-automation/pull/5119)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [e7dfb35f92](https://github.com/algolia/api-clients-automation/commit/e7dfb35f92) refactor(specs): group files for composition api ([#5122](https://github.com/algolia/api-clients-automation/pull/5122)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [2ee13af721](https://github.com/algolia/api-clients-automation/commit/2ee13af721) feat(specs): add lastUpdatedAt to personalization real-time user ([#5126](https://github.com/algolia/api-clients-automation/pull/5126)) by [@raed667](https://github.com/raed667/) +- 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.33.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.32.0...5.33.0) +### Fixed -- [a7a3c5fc95](https://github.com/algolia/api-clients-automation/commit/a7a3c5fc95) feat(specs): document runMetadata parameter ([#5087](https://github.com/algolia/api-clients-automation/pull/5087)) by [@DevinCodes](https://github.com/DevinCodes/) -- [c23e62ed53](https://github.com/algolia/api-clients-automation/commit/c23e62ed53) chore(deps): dependencies 2025-07-14 ([#5091](https://github.com/algolia/api-clients-automation/pull/5091)) by [@algolia-bot](https://github.com/algolia-bot/) -- [fe3312f9e5](https://github.com/algolia/api-clients-automation/commit/fe3312f9e5) fix(specs): abtest v3 naming conflict with Metric type ([#5090](https://github.com/algolia/api-clients-automation/pull/5090)) by [@cdhawke](https://github.com/cdhawke/) +- 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.32.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.31.0...5.32.0) +## [v4.4.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.3.1...4.4.0) -- [6a90357d7d](https://github.com/algolia/api-clients-automation/commit/6a90357d7d) feat(templates): use headers in js advanced perso client ([#5083](https://github.com/algolia/api-clients-automation/pull/5083)) by [@bengreenbank](https://github.com/bengreenbank/) +### Added -## [5.31.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.30.0...5.31.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)) -- [4c9416a9fe](https://github.com/algolia/api-clients-automation/commit/4c9416a9fe) fix(specs): update sourceRun docs ([#5057](https://github.com/algolia/api-clients-automation/pull/5057)) by [@DevinCodes](https://github.com/DevinCodes/) -- [754efceb80](https://github.com/algolia/api-clients-automation/commit/754efceb80) fix(specs): allow one sided rule validity ([#5060](https://github.com/algolia/api-clients-automation/pull/5060)) by [@millotp](https://github.com/millotp/) -- [2ba91d1df9](https://github.com/algolia/api-clients-automation/commit/2ba91d1df9) chore(deps): dependencies 2025-07-07 ([#5063](https://github.com/algolia/api-clients-automation/pull/5063)) by [@algolia-bot](https://github.com/algolia-bot/) -- [fd5dcdf800](https://github.com/algolia/api-clients-automation/commit/fd5dcdf800) feat(javascript): generate abtesting v3 alpha client ([#4783](https://github.com/algolia/api-clients-automation/pull/4783)) by [@shortcuts](https://github.com/shortcuts/) +## [v4.3.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.3.0...4.3.1) -## [5.30.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.29.0...5.30.0) +### Added -- [2ca05ef173](https://github.com/algolia/api-clients-automation/commit/2ca05ef173) chore(deps): dependencies 2025-06-23 ([#5016](https://github.com/algolia/api-clients-automation/pull/5016)) by [@algolia-bot](https://github.com/algolia-bot/) -- [d1e9835e53](https://github.com/algolia/api-clients-automation/commit/d1e9835e53) chore(deps): dependencies 2025-06-30 ([#5031](https://github.com/algolia/api-clients-automation/pull/5031)) by [@algolia-bot](https://github.com/algolia-bot/) -- [791a0c045d](https://github.com/algolia/api-clients-automation/commit/791a0c045d) feat(specs): abtesting winsorizedAmount ([#5053](https://github.com/algolia/api-clients-automation/pull/5053)) by [@cdhawke](https://github.com/cdhawke/) +- 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.29.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.28.0...5.29.0) +## [v4.3.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.2.0...4.3.0) -- [928de4a7d5](https://github.com/algolia/api-clients-automation/commit/928de4a7d5) fix(specs): fix type in realtime_user ([#5012](https://github.com/algolia/api-clients-automation/pull/5012)) by [@raed667](https://github.com/raed667/) -- [a2ebbf496c](https://github.com/algolia/api-clients-automation/commit/a2ebbf496c) feat(clients): add `replaceAllObjectsWithTransformation` ([#5008](https://github.com/algolia/api-clients-automation/pull/5008)) by [@shortcuts](https://github.com/shortcuts/) -- [5e3869931b](https://github.com/algolia/api-clients-automation/commit/5e3869931b) chore(spec): fix comment of custom path ([#5014](https://github.com/algolia/api-clients-automation/pull/5014)) by [@millotp](https://github.com/millotp/) -- [9dec2bb122](https://github.com/algolia/api-clients-automation/commit/9dec2bb122) fix(clients): allow chunked requests on WithTransformation methods ([#5011](https://github.com/algolia/api-clients-automation/pull/5011)) by [@shortcuts](https://github.com/shortcuts/) +### Added -## [5.28.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.27.0...5.28.0) +- `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)) -- [e0689b5b76](https://github.com/algolia/api-clients-automation/commit/e0689b5b76) feat(javascript): add `exactOptionalPropertyTypes` to tsconfig ([#4935](https://github.com/algolia/api-clients-automation/pull/4935)) by [@shortcuts](https://github.com/shortcuts/) -- [dc68c76106](https://github.com/algolia/api-clients-automation/commit/dc68c76106) chore(deps): dependencies 2025-06-09 ([#4943](https://github.com/algolia/api-clients-automation/pull/4943)) by [@algolia-bot](https://github.com/algolia-bot/) -- [6031284e24](https://github.com/algolia/api-clients-automation/commit/6031284e24) feat(specs): update try transformation specs for no-code ([#4974](https://github.com/algolia/api-clients-automation/pull/4974)) by [@mehmetaligok](https://github.com/mehmetaligok/) -- [0ea1d0ca98](https://github.com/algolia/api-clients-automation/commit/0ea1d0ca98) feat(clients): add real-time personalization to advanced-personalization [PRED-3870] ([#4976](https://github.com/algolia/api-clients-automation/pull/4976)) by [@raed667](https://github.com/raed667/) -- [60ade79465](https://github.com/algolia/api-clients-automation/commit/60ade79465) chore(deps): dependencies 2025-06-16 ([#4977](https://github.com/algolia/api-clients-automation/pull/4977)) by [@algolia-bot](https://github.com/algolia-bot/) -- [2561c945f7](https://github.com/algolia/api-clients-automation/commit/2561c945f7) fix(clients): processingTimeMS should be optional ([#5004](https://github.com/algolia/api-clients-automation/pull/5004)) by [@Fluf22](https://github.com/Fluf22/) -- [973cc0c07e](https://github.com/algolia/api-clients-automation/commit/973cc0c07e) feat(specs): add new ingestion property for push ([#5007](https://github.com/algolia/api-clients-automation/pull/5007)) by [@shortcuts](https://github.com/shortcuts/) +### Fixed -## [5.27.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.26.0...5.27.0) +- 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)) -- [835daccb48](https://github.com/algolia/api-clients-automation/commit/835daccb48) feat(specs): add with transformation helpers ([#4931](https://github.com/algolia/api-clients-automation/pull/4931)) by [@shortcuts](https://github.com/shortcuts/) +## [v4.2.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.1.0...4.2.0) -## [5.26.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.25.0...5.26.0) +### Added -- [9db03b532b](https://github.com/algolia/api-clients-automation/commit/9db03b532b) fix(specs): typo ([#4854](https://github.com/algolia/api-clients-automation/pull/4854)) by [@kai687](https://github.com/kai687/) -- [db02a51d50](https://github.com/algolia/api-clients-automation/commit/db02a51d50) chore(deps): dependencies 2025-05-19 ([#4853](https://github.com/algolia/api-clients-automation/pull/4853)) by [@algolia-bot](https://github.com/algolia-bot/) -- [90b49b1e1b](https://github.com/algolia/api-clients-automation/commit/90b49b1e1b) feat(specs): add global push endpoint ([#4855](https://github.com/algolia/api-clients-automation/pull/4855)) by [@shortcuts](https://github.com/shortcuts/) -- [8cb1e50d92](https://github.com/algolia/api-clients-automation/commit/8cb1e50d92) feat(javascript): add bridge to transformation on algoliasearch ([#4852](https://github.com/algolia/api-clients-automation/pull/4852)) by [@shortcuts](https://github.com/shortcuts/) -- [cf416e6b91](https://github.com/algolia/api-clients-automation/commit/cf416e6b91) fix(specs): updated watchResponse ([#4879](https://github.com/algolia/api-clients-automation/pull/4879)) by [@shortcuts](https://github.com/shortcuts/) -- [e46e762c0c](https://github.com/algolia/api-clients-automation/commit/e46e762c0c) chore(deps): dependencies 2025-05-26 ([#4880](https://github.com/algolia/api-clients-automation/pull/4880)) by [@algolia-bot](https://github.com/algolia-bot/) -- [06ad06e4a8](https://github.com/algolia/api-clients-automation/commit/06ad06e4a8) feat(specs): update transformation specs for no-code ([#4901](https://github.com/algolia/api-clients-automation/pull/4901)) by [@mehmetaligok](https://github.com/mehmetaligok/) -- [820156b1d1](https://github.com/algolia/api-clients-automation/commit/820156b1d1) chore(deps): dependencies 2025-06-02 ([#4899](https://github.com/algolia/api-clients-automation/pull/4899)) by [@algolia-bot](https://github.com/algolia-bot/) -- [aa5c34ca65](https://github.com/algolia/api-clients-automation/commit/aa5c34ca65) feat(clients): add generic parameter ([#4922](https://github.com/algolia/api-clients-automation/pull/4922)) by [@millotp](https://github.com/millotp/) -- [4ec0e13e28](https://github.com/algolia/api-clients-automation/commit/4ec0e13e28) fix(specs): more indexing actions to push ([#4930](https://github.com/algolia/api-clients-automation/pull/4930)) by [@shortcuts](https://github.com/shortcuts/) -- [1951e4d127](https://github.com/algolia/api-clients-automation/commit/1951e4d127) fix(specs): wrong ACL for getSettings ([#4933](https://github.com/algolia/api-clients-automation/pull/4933)) by [@kai687](https://github.com/kai687/) +- 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.25.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.24.0...5.25.0) +### Fixed -- [e5387adf09](https://github.com/algolia/api-clients-automation/commit/e5387adf09) chore(deps): dependencies 2025-05-05 ([#4804](https://github.com/algolia/api-clients-automation/pull/4804)) by [@algolia-bot](https://github.com/algolia-bot/) -- [d26cbaa311](https://github.com/algolia/api-clients-automation/commit/d26cbaa311) feat(specs): enrich response for list composition endpoint ([#4819](https://github.com/algolia/api-clients-automation/pull/4819)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [95f3208e92](https://github.com/algolia/api-clients-automation/commit/95f3208e92) feat(specs): make response fields required for composition list endpoint ([#4821](https://github.com/algolia/api-clients-automation/pull/4821)) by [@ClaraMuller](https://github.com/ClaraMuller/) -- [bebb56e0b9](https://github.com/algolia/api-clients-automation/commit/bebb56e0b9) fix(specs): add x-acl to insights endpoints ([#4822](https://github.com/algolia/api-clients-automation/pull/4822)) by [@kai687](https://github.com/kai687/) -- [d29371295f](https://github.com/algolia/api-clients-automation/commit/d29371295f) chore(deps): dependencies 2025-05-12 ([#4823](https://github.com/algolia/api-clients-automation/pull/4823)) by [@algolia-bot](https://github.com/algolia-bot/) -- [7e226c4559](https://github.com/algolia/api-clients-automation/commit/7e226c4559) feat(scripts): add push to mcp-node on release ([#4784](https://github.com/algolia/api-clients-automation/pull/4784)) by [@shortcuts](https://github.com/shortcuts/) +- Type `Log` ([#1139](https://github.com/algolia/algoliasearch-client-javascript/pull/1139)) -## [5.24.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.23.4...5.24.0) +## [v4.1.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.0.3...4.1.0) -- [efec6baf1c](https://github.com/algolia/api-clients-automation/commit/efec6baf1c) chore(deps): dependencies 2025-04-21 ([#4762](https://github.com/algolia/api-clients-automation/pull/4762)) by [@algolia-bot](https://github.com/algolia-bot/) -- [b61b6feb7a](https://github.com/algolia/api-clients-automation/commit/b61b6feb7a) feat(javascript): prepare composition for stable release ([#4782](https://github.com/algolia/api-clients-automation/pull/4782)) by [@shortcuts](https://github.com/shortcuts/) -- [53ac749807](https://github.com/algolia/api-clients-automation/commit/53ac749807) chore(deps): dependencies 2025-04-28 ([#4785](https://github.com/algolia/api-clients-automation/pull/4785)) by [@algolia-bot](https://github.com/algolia-bot/) -- [065093aeef](https://github.com/algolia/api-clients-automation/commit/065093aeef) feat(javascript): add `accountCopyIndex` helper ([#4798](https://github.com/algolia/api-clients-automation/pull/4798)) by [@shortcuts](https://github.com/shortcuts/) +### Added -## [5.23.4](https://github.com/algolia/algoliasearch-client-javascript/compare/5.23.3...5.23.4) +- 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)) -- [369c14232](https://github.com/algolia/api-clients-automation/commit/369c14232) fix(specs): condition cant be numeric filter ([#4726](https://github.com/algolia/api-clients-automation/pull/4726)) by [@kai687](https://github.com/kai687/) -- [1911d224b](https://github.com/algolia/api-clients-automation/commit/1911d224b) fix(specs): event.status can be null ([#4727](https://github.com/algolia/api-clients-automation/pull/4727)) by [@millotp](https://github.com/millotp/) -- [a18b555b4](https://github.com/algolia/api-clients-automation/commit/a18b555b4) fix(specs): add missing recordType collection ([#4728](https://github.com/algolia/api-clients-automation/pull/4728)) by [@millotp](https://github.com/millotp/) -- [881efa617](https://github.com/algolia/api-clients-automation/commit/881efa617) chore(deps): dependencies 2025-04-14 ([#4729](https://github.com/algolia/api-clients-automation/pull/4729)) by [@algolia-bot](https://github.com/algolia-bot/) -- [4570f18b8](https://github.com/algolia/api-clients-automation/commit/4570f18b8) fix(clients): correctly deserialize SearchResult ([#4756](https://github.com/algolia/api-clients-automation/pull/4756)) by [@millotp](https://github.com/millotp/) +### Fixed -## [5.23.3](https://github.com/algolia/algoliasearch-client-javascript/compare/5.23.2...5.23.3) +- 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)) -- [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.0.3](https://github.com/algolia/algoliasearch-client-javascript/compare/4.0.2...4.0.3) -## [5.23.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.23.1...5.23.2) +### Fixed -- [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/) +- `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.23.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.23.0...5.23.1) +## [v4.0.2](https://github.com/algolia/algoliasearch-client-javascript/compare/4.0.1...4.0.2) -- [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/) +### Fixed -## [5.23.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.22.0...5.23.0) +- DOMException being thrown while instantiating browser local storage cache driver ([#999](https://github.com/algolia/algoliasearch-client-javascript/pull/999)) -- [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.0.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.0.0...4.0.1) -## [5.22.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.21.0...5.22.0) +### Fixed -- [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/) +- Missing `repository` entry on `package.json` ([#989](https://github.com/algolia/algoliasearch-client-javascript/pull/989)) -## [5.21.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.20.4...5.21.0) +## [v4.0.0](https://github.com/algolia/algoliasearch-client-javascript/compare/3.35.1...4.0.0) -- [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/) - -## [5.20.4](https://github.com/algolia/algoliasearch-client-javascript/compare/5.20.3...5.20.4) - -- [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/) - -## [5.20.3](https://github.com/algolia/algoliasearch-client-javascript/compare/5.20.2...5.20.3) - -- [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/) - -## [5.20.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.20.1...5.20.2) - -- [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/) - -## [5.20.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.20.0...5.20.1) - -- [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/) - -## [5.20.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.19.0...5.20.0) - -- [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/) - -## [5.19.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.18.0...5.19.0) - -- [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/) - -## [5.18.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.17.1...5.18.0) - -- [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/) - -## [5.17.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.17.0...5.17.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/) - -## [5.17.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.16.0...5.17.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/) - -## [5.16.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.15.0...5.16.0) - -- [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/) - -## [5.15.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.14.2...5.15.0) - -- [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/) - -## [5.14.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.14.0...5.14.2) - -- [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/) - -## [5.14.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.13.0...5.14.0) - -- [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/) - -## [5.13.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.12.0...5.13.0) - -- [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/) - -## [5.12.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.11.0...5.12.0) - -- [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/) - -## [5.11.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.10.2...5.11.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/) - -## [5.10.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.10.1...5.10.2) - -- [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/) - -## [5.10.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.10.0...5.10.1) - -- [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/) - -## [5.10.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.9.1...5.10.0) - -- [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/) - -## [5.9.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.9.0...5.9.1) - -- [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/) - -## [5.9.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.8.1...5.9.0) - -- [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/) - -## [5.8.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.8.0...5.8.1) - -- [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/) - -## [5.8.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.7.0...5.8.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/) - -## [5.7.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.6.1...5.7.0) - -- [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/) - -## [5.6.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.6.0...5.6.1) - -- [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/) - -## [5.6.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.5.3...5.6.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/) - -## [5.5.3](https://github.com/algolia/algoliasearch-client-javascript/compare/5.5.2...5.5.3) - -- [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/) - -## [5.5.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.5.1...5.5.2) - -- [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/) - -## [5.5.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.5.0...5.5.1) - -- [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/) - -## [5.5.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.4.3...5.5.0) - -- [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/) - -## [5.4.3](https://github.com/algolia/algoliasearch-client-javascript/compare/5.4.2...5.4.3) - -- [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/) - -## [5.4.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.4.1...5.4.2) - -- [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/) - -## [5.4.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.4.0...5.4.1) - -- [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/) - -## [5.4.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.3.2...5.4.0) - -- [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/) - -## [5.3.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.3.1...5.3.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/) - -## [5.3.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.3.0...5.3.1) - -- [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/) - -## [5.3.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.2.5...5.3.0) - -- [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/) - -## [5.2.5](https://github.com/algolia/algoliasearch-client-javascript/compare/5.2.4...5.2.5) - -- [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/) - -## [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/) +- Major version: [Upgrade Guide](https://www.algolia.com/doc/api-client/getting-started/upgrade-guides/javascript/) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..3682b3e9d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,108 @@ +# 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 new file mode 100644 index 000000000..0991735ca --- /dev/null +++ b/DOCKER_README.MD @@ -0,0 +1,51 @@ +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 new file mode 100644 index 000000000..0d14a024c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +# 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 deleted file mode 100644 index fddf416f9..000000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 new file mode 100644 index 000000000..a67ad2e5a --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +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 dbb8a656a..ff49a822a 100644 --- a/README.md +++ b/README.md @@ -6,77 +6,90 @@

The perfect starting point to integrate Algolia within your JavaScript project

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

- Documentation • + DocumentationInstantSearchCommunity ForumStack OverflowReport a bug • - 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 and ESM compatible**, you can use it with any module loader +- **UMD compatible**, you can use it with any module loader - Built with TypeScript -## 💡 Getting Started +## ⏭ Next -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. +The [`next` branch](https://github.com/algolia/algoliasearch-client-javascript/tree/next) hosts the code of the new major version (`v5`). This version is generated from the [`API Clients Automation` monorepo](https://github.com/algolia/api-clients-automation/) which is where you can follow the development and make contributions. -### With a package manager +## 💡 Getting Started + +First, install Algolia JavaScript API Client via the [npm](https://www.npmjs.com/get-npm) package manager: ```bash -yarn add algoliasearch@5.56.0 -# or -npm install algoliasearch@5.56.0 -# or -pnpm add algoliasearch@5.56.0 +npm install algoliasearch ``` -### Without a package manager - -Add the following JavaScript snippet to the of your website: +Then, create objects on your index: -```html -// for the full client - - -// for the lite client - +```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); + }); ``` -### Usage - -You can now import the Algolia API client in your project and play with it. +Finally, let's actually search using the `search` method: ```js -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'); +index + .search('Fo') + .then(({ hits }) => { + console.log(hits); + }) + .catch(err => { + console.log(err); + }); ``` -For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/sdk/methods/search/)**. +For full documentation, visit the **[online documentation](https://www.algolia.com/doc/api-client/getting-started/install/javascript/)**. ## ❓ Troubleshooting -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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) +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. ## 📄 License -The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). +Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE.md). diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..8a77066fc --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,3 @@ +## 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 new file mode 100644 index 000000000..c16de62d3 --- /dev/null +++ b/api-extractor.json @@ -0,0 +1,44 @@ +{ + "$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 deleted file mode 100644 index 637653a65..000000000 --- a/base.tsup.config.ts +++ /dev/null @@ -1,69 +0,0 @@ -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: false, - 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', - target: string = 'node14', -): Options { - return { - ...getBaseConfig(cwd), - platform: 'node', - target, - 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 new file mode 100644 index 000000000..e4c600722 --- /dev/null +++ b/config/jest.js @@ -0,0 +1,10 @@ +/* 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 new file mode 100644 index 000000000..28dc71770 --- /dev/null +++ b/conventional-changelog.config.js @@ -0,0 +1,10 @@ +/* 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 new file mode 100644 index 000000000..65b56b01a --- /dev/null +++ b/global.d.ts @@ -0,0 +1,19 @@ +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 new file mode 100644 index 000000000..c5765208e --- /dev/null +++ b/jest.config.js @@ -0,0 +1,100 @@ +/* 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/requester-fetch/*', + '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 1fc4fb491..2de21f1de 100644 --- a/lerna.json +++ b/lerna.json @@ -1,10 +1,5 @@ { - "$schema": "node_modules/lerna/schemas/lerna-schema.json", - "packages": ["packages/*"], - "version": "independent", - "command": { - "run": { - "npmClient": "yarn" - } - } + "npmClient": "yarn", + "useWorkspaces": true, + "version": "4.17.2" } diff --git a/nx.json b/nx.json deleted file mode 100644 index 17d28f2c5..000000000 --- a/nx.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "targetDefaults": {} -} diff --git a/package.json b/package.json index 0cae4c7c3..8375048f4 100644 --- a/package.json +++ b/package.json @@ -1,94 +1,112 @@ { - "name": "algoliasearch-client-javascript", + "version": "4.17.2", "private": true, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript#readme", - "type": "module", + "license": "MIT", "workspaces": [ "packages/*" ], "scripts": { - "build": "lerna run build --scope '@algolia/requester-testing' --scope '@algolia/logger-console' --scope 'algoliasearch' --scope '@algolia/composition' --scope '@algolia/advanced-personalization' --scope '@algolia/agent-studio' --include-dependencies", - "clean": "lerna run clean", - "release:publish": "lerna publish from-package --yes", - "release:publish:old": "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" + "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" }, - "devDependencies": { - "@types/node": "24.13.3", - "bundlewatch": "0.4.2", - "execa": "10.0.1", - "lerna": "9.0.7", - "rollup": "4.62.4", - "typescript": "5.9.3" - }, - "bundlewatch": { - "files": [ - { - "path": "packages/algoliasearch/dist/algoliasearch.umd.js", - "maxSize": "21.25KB" - }, - { - "path": "packages/algoliasearch/dist/lite/builds/browser.umd.js", - "maxSize": "6KB" - }, - { - "path": "packages/abtesting/dist/builds/browser.umd.js", - "maxSize": "6.5KB" - }, - { - "path": "packages/client-abtesting/dist/builds/browser.umd.js", - "maxSize": "6.25KB" - }, - { - "path": "packages/client-analytics/dist/builds/browser.umd.js", - "maxSize": "7KB" - }, - { - "path": "packages/composition/dist/builds/browser.umd.js", - "maxSize": "7KB" - }, - { - "path": "packages/client-insights/dist/builds/browser.umd.js", - "maxSize": "6KB" - }, - { - "path": "packages/client-personalization/dist/builds/browser.umd.js", - "maxSize": "6KB" - }, - { - "path": "packages/client-query-suggestions/dist/builds/browser.umd.js", - "maxSize": "6KB" - }, - { - "path": "packages/client-search/dist/builds/browser.umd.js", - "maxSize": "11KB" - }, - { - "path": "packages/ingestion/dist/builds/browser.umd.js", - "maxSize": "10KB" - }, - { - "path": "packages/monitoring/dist/builds/browser.umd.js", - "maxSize": "6KB" - }, - { - "path": "packages/recommend/dist/builds/browser.umd.js", - "maxSize": "6.25KB" - }, - { - "path": "packages/agent-studio/dist/builds/browser.umd.js", - "maxSize": "8KB" - } - ] + "husky": { + "hooks": { + "pre-commit": "yarn pre-commit" + } }, - "resolutions": { - "axios": "^1.19.0", - "follow-redirects": "^1.16.0" + "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", + "cross-fetch": "3.1.5", + "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" }, "engines": { - "node": ">= 14.0.0", - "yarn": "^4.0.0" - } + "node": ">= 8.0.0", + "yarn": ">= 1.6.0" + }, + "bundlesize": [ + { + "path": "packages/algoliasearch/dist/algoliasearch.umd.js", + "maxSize": "8.2KB" + }, + { + "path": "packages/algoliasearch/dist/algoliasearch-lite.umd.js", + "maxSize": "4.6KB" + }, + { + "path": "packages/recommend/dist/recommend.umd.js", + "maxSize": "4.3KB" + } + ] } diff --git a/packages/abtesting/LICENSE b/packages/abtesting/LICENSE deleted file mode 100644 index fddf416f9..000000000 --- a/packages/abtesting/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/abtesting/README.md b/packages/abtesting/README.md deleted file mode 100644 index e3c9c8c23..000000000 --- a/packages/abtesting/README.md +++ /dev/null @@ -1,76 +0,0 @@ -

- - 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 • - 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/abtesting` if you already have `algoliasearch` installed. - -To get started, you first need to install @algolia/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/abtesting@1.22.0 -# or -npm install @algolia/abtesting@1.22.0 -# or -pnpm add @algolia/abtesting@1.22.0 -``` - -### 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 { abtestingV3Client } from '@algolia/abtesting'; - -const client = abtestingV3Client('YOUR_APP_ID', 'YOUR_API_KEY'); -``` - -For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/sdk/methods/abtesting-v3/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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/abtesting/builds/browser.ts b/packages/abtesting/builds/browser.ts deleted file mode 100644 index 016b04ee7..000000000 --- a/packages/abtesting/builds/browser.ts +++ /dev/null @@ -1,66 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -import type { ClientOptions } from '@algolia/client-common'; - -import { apiClientVersion, createAbtestingV3Client } from '../src/abtestingV3Client'; - -import type { Region } from '../src/abtestingV3Client'; -import { REGIONS } from '../src/abtestingV3Client'; - -export type { Region, RegionOptions } from '../src/abtestingV3Client'; - -export { apiClientVersion } from '../src/abtestingV3Client'; - -export * from '../model'; - -export function abtestingV3Client( - appId: string, - apiKey: string, - region?: Region | undefined, - options?: ClientOptions | undefined, -): AbtestingV3Client { - 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(', ')}`); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - return createAbtestingV3Client({ - 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()], - }), - ...browserOptions, - }); -} - -export type AbtestingV3Client = ReturnType; diff --git a/packages/abtesting/builds/fetch.ts b/packages/abtesting/builds/fetch.ts deleted file mode 100644 index 684cde0ce..000000000 --- a/packages/abtesting/builds/fetch.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 AbtestingV3Client = ReturnType; - -import { gzipSync } from 'node:zlib'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createFetchRequester } from '@algolia/requester-fetch'; - -import type { ClientOptions } from '@algolia/client-common'; - -import { createAbtestingV3Client } from '../src/abtestingV3Client'; - -import type { Region } from '../src/abtestingV3Client'; -import { REGIONS } from '../src/abtestingV3Client'; - -export type { Region, RegionOptions } from '../src/abtestingV3Client'; - -export { apiClientVersion } from '../src/abtestingV3Client'; - -export * from '../model'; - -export function abtestingV3Client( - appId: string, - apiKey: string, - region?: Region | undefined, - options?: ClientOptions | undefined, -): AbtestingV3Client { - 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 { - ...createAbtestingV3Client({ - appId, - apiKey, - region, - timeouts: { - connect: 2000, - read: 5000, - write: 30000, - }, - logger: createNullLogger(), - requester: createFetchRequester(), - algoliaAgents: [{ segment: 'Fetch' }], - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/abtesting/builds/node.ts b/packages/abtesting/builds/node.ts deleted file mode 100644 index 75e05e723..000000000 --- a/packages/abtesting/builds/node.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 AbtestingV3Client = ReturnType; - -import { gzipSync } from 'node:zlib'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -import type { ClientOptions } from '@algolia/client-common'; - -import { createAbtestingV3Client } from '../src/abtestingV3Client'; - -import type { Region } from '../src/abtestingV3Client'; -import { REGIONS } from '../src/abtestingV3Client'; - -export type { Region, RegionOptions } from '../src/abtestingV3Client'; - -export { apiClientVersion } from '../src/abtestingV3Client'; - -export * from '../model'; - -export function abtestingV3Client( - appId: string, - apiKey: string, - region?: Region | undefined, - options?: ClientOptions | undefined, -): AbtestingV3Client { - 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 { - ...createAbtestingV3Client({ - 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/abtesting/builds/worker.ts b/packages/abtesting/builds/worker.ts deleted file mode 100644 index ecbb5920f..000000000 --- a/packages/abtesting/builds/worker.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Code generated by 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 AbtestingV3Client = ReturnType; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createFetchRequester } from '@algolia/requester-fetch'; - -import type { ClientOptions } from '@algolia/client-common'; - -import { createAbtestingV3Client } from '../src/abtestingV3Client'; - -import type { Region } from '../src/abtestingV3Client'; -import { REGIONS } from '../src/abtestingV3Client'; - -export type { Region, RegionOptions } from '../src/abtestingV3Client'; - -export { apiClientVersion } from '../src/abtestingV3Client'; - -export * from '../model'; - -export function abtestingV3Client( - appId: string, - apiKey: string, - region?: Region | undefined, - options?: ClientOptions | undefined, -): AbtestingV3Client { - 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(', ')}`); - } - - const { compression: _compression, ...workerOptions } = options || {}; - - return { - ...createAbtestingV3Client({ - appId, - apiKey, - region, - timeouts: { - connect: 2000, - read: 5000, - write: 30000, - }, - logger: createNullLogger(), - requester: createFetchRequester(), - algoliaAgents: [{ segment: 'Worker' }], - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - ...workerOptions, - }), - }; -} diff --git a/packages/abtesting/index.d.ts b/packages/abtesting/index.d.ts deleted file mode 100644 index e81a1cd3e..000000000 --- a/packages/abtesting/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/node'; diff --git a/packages/abtesting/index.js b/packages/abtesting/index.js deleted file mode 100644 index 21e26aad3..000000000 --- a/packages/abtesting/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/abtesting/model/aBTest.ts b/packages/abtesting/model/aBTest.ts deleted file mode 100644 index 9288c280f..000000000 --- a/packages/abtesting/model/aBTest.ts +++ /dev/null @@ -1,54 +0,0 @@ -// Code generated by OpenAPI Generator (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 { Decision } from './decision'; -import type { Status } from './status'; -import type { Variant } from './variant'; - -export type ABTest = { - /** - * Unique A/B test identifier. - */ - abTestID: number; - - /** - * 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; - - /** - * Date and time when the A/B test was stopped, in RFC 3339 format. - */ - stoppedAt?: string | null | undefined; - - /** - * A/B test name. - */ - name: string; - - status: Status; - - /** - * A/B test variants. The first variant is your _control_ index, typically your production index. All of the additional variants are indexes with changed settings that you want to test against the control. - */ - variants: Array; - - configuration?: ABTestConfiguration | undefined; - - /** - * Unique migrated A/B test identifier. - */ - migratedAbTestID?: number | undefined; - - decision?: Decision | undefined; -}; diff --git a/packages/abtesting/model/aBTestConfiguration.ts b/packages/abtesting/model/aBTestConfiguration.ts deleted file mode 100644 index 0090bb30d..000000000 --- a/packages/abtesting/model/aBTestConfiguration.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ErrorCorrectionType } from './errorCorrectionType'; -import type { MetricsFilter } from './metricsFilter'; -import type { MinimumDetectableEffect } from './minimumDetectableEffect'; - -/** - * A/B test configuration. - */ -export type ABTestConfiguration = { - minimumDetectableEffect?: MinimumDetectableEffect | undefined; - - /** - * List of metric filters applied to the test population. - */ - filters?: Array | undefined; - - errorCorrection?: ErrorCorrectionType | undefined; -}; diff --git a/packages/abtesting/model/aBTestResponse.ts b/packages/abtesting/model/aBTestResponse.ts deleted file mode 100644 index 024215fb7..000000000 --- a/packages/abtesting/model/aBTestResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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](https://www.algolia.com/doc/rest-api/search/get-task) and this task ID. - */ - taskID: number; -}; diff --git a/packages/abtesting/model/abTestsVariant.ts b/packages/abtesting/model/abTestsVariant.ts deleted file mode 100644 index a3d765141..000000000 --- a/packages/abtesting/model/abTestsVariant.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/abtesting/model/abTestsVariantSearchParams.ts b/packages/abtesting/model/abTestsVariantSearchParams.ts deleted file mode 100644 index 4cb0237d7..000000000 --- a/packages/abtesting/model/abTestsVariantSearchParams.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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/abtesting/model/addABTestsRequest.ts b/packages/abtesting/model/addABTestsRequest.ts deleted file mode 100644 index bbcce7763..000000000 --- a/packages/abtesting/model/addABTestsRequest.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Code generated by OpenAPI Generator (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 { AddABTestsVariant } from './addABTestsVariant'; -import type { CreateMetric } from './createMetric'; - -export type AddABTestsRequest = { - /** - * A/B test name. - */ - name: string; - - /** - * A/B test variants. - */ - variants: Array; - - /** - * A/B test metrics involved in the test. Only these metrics will be considered when calculating results. - */ - metrics: Array; - - configuration?: ABTestConfiguration | undefined; - - /** - * End date and time of the A/B test, in RFC 3339 format. - */ - endAt: string; -}; diff --git a/packages/abtesting/model/addABTestsVariant.ts b/packages/abtesting/model/addABTestsVariant.ts deleted file mode 100644 index 0b460fe51..000000000 --- a/packages/abtesting/model/addABTestsVariant.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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/abtesting/model/clientMethodProps.ts b/packages/abtesting/model/clientMethodProps.ts deleted file mode 100644 index 7ddd9e414..000000000 --- a/packages/abtesting/model/clientMethodProps.ts +++ /dev/null @@ -1,146 +0,0 @@ -// Code generated by OpenAPI Generator (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 { MetricName } from '../model/metricName'; - -/** - * Properties for the `customDelete` method. - */ -export type CustomDeleteProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customGet` method. - */ -export type CustomGetProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customPost` method. - */ -export type CustomPostProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `customPut` method. - */ -export type CustomPutProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * 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 `getTimeseries` method. - */ -export type GetTimeseriesProps = { - /** - * Unique A/B test identifier. - */ - id: number; - /** - * Start date of the period to analyze, in `YYYY-MM-DD` format. - */ - startDate?: string | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * List of metrics to retrieve. If not specified, all metrics are returned. - */ - metric?: Array | undefined; -}; - -/** - * Properties for the `listABTests` method. - */ -export type ListABTestsProps = { - /** - * Position of the first item to return. - */ - offset?: number | undefined; - /** - * Number of items to return. - */ - limit?: number | undefined; - /** - * Index name prefix. Only A/B tests for indices starting with this string are included in the response. - */ - indexPrefix?: string | undefined; - /** - * Index name suffix. Only A/B tests for indices ending with this string are included in the response. - */ - indexSuffix?: string | undefined; - /** - * Sort order for A/B tests by start date. Use \'asc\' for ascending or \'desc\' for descending. Active A/B tests are always listed first. - */ - direction?: Direction | undefined; -}; - -/** - * Properties for the `stopABTest` method. - */ -export type StopABTestProps = { - /** - * Unique A/B test identifier. - */ - id: number; -}; diff --git a/packages/abtesting/model/createMetric.ts b/packages/abtesting/model/createMetric.ts deleted file mode 100644 index e34cacf31..000000000 --- a/packages/abtesting/model/createMetric.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Defines a metric to be retrieved during an A/B test. - */ -export type CreateMetric = { - /** - * Name of the metric. - */ - name: string; - - /** - * Dimension of the metric, for example, in case of a revenue metric it could be USD, EUR... - */ - dimension?: string | undefined; -}; diff --git a/packages/abtesting/model/customSearchParams.ts b/packages/abtesting/model/customSearchParams.ts deleted file mode 100644 index b113a4943..000000000 --- a/packages/abtesting/model/customSearchParams.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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/abtesting/model/decision.ts b/packages/abtesting/model/decision.ts deleted file mode 100644 index 0f205752d..000000000 --- a/packages/abtesting/model/decision.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Outcome of the A/B test once a winner has been declared. Only present when a winning variant has been declared, so its presence indicates the test has been decided. - */ -export type Decision = { - /** - * Identifier of the declared winning variant. The control variant is 1. - */ - winnerVariantId: number; - - /** - * Date and time when the winning variant was declared, in RFC 3339 format. - */ - declaredAt: string; -}; diff --git a/packages/abtesting/model/direction.ts b/packages/abtesting/model/direction.ts deleted file mode 100644 index 3e2238369..000000000 --- a/packages/abtesting/model/direction.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Sort order for A/B tests by start date. Use \'asc\' for ascending or \'desc\' for descending. Active A/B tests are always listed first. - */ -export type Direction = 'asc' | 'desc'; diff --git a/packages/abtesting/model/effectMetric.ts b/packages/abtesting/model/effectMetric.ts deleted file mode 100644 index cb19f12e2..000000000 --- a/packages/abtesting/model/effectMetric.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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' | 'noResultsRate'; diff --git a/packages/abtesting/model/emptySearchFilter.ts b/packages/abtesting/model/emptySearchFilter.ts deleted file mode 100644 index 0db0ac505..000000000 --- a/packages/abtesting/model/emptySearchFilter.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Number of tracked searches removed from the A/B test. - */ - trackedSearchesCount?: number | undefined; -}; diff --git a/packages/abtesting/model/errorBase.ts b/packages/abtesting/model/errorBase.ts deleted file mode 100644 index f31be6046..000000000 --- a/packages/abtesting/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/abtesting/model/errorCorrectionType.ts b/packages/abtesting/model/errorCorrectionType.ts deleted file mode 100644 index bc5071f5b..000000000 --- a/packages/abtesting/model/errorCorrectionType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Multiple-testing correction method applied when evaluating metric significance. - */ -export type ErrorCorrectionType = 'bonferroni' | 'benjamini-hochberg'; diff --git a/packages/abtesting/model/estimateABTestRequest.ts b/packages/abtesting/model/estimateABTestRequest.ts deleted file mode 100644 index 1c5e6c3db..000000000 --- a/packages/abtesting/model/estimateABTestRequest.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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/abtesting/model/estimateABTestResponse.ts b/packages/abtesting/model/estimateABTestResponse.ts deleted file mode 100644 index 07438fffa..000000000 --- a/packages/abtesting/model/estimateABTestResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/abtesting/model/estimateConfiguration.ts b/packages/abtesting/model/estimateConfiguration.ts deleted file mode 100644 index 1480955c1..000000000 --- a/packages/abtesting/model/estimateConfiguration.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { MetricsFilter } from './metricsFilter'; -import type { MinimumDetectableEffect } from './minimumDetectableEffect'; - -/** - * A/B test configuration for estimating the sample size and duration using minimum detectable effect. - */ -export type EstimateConfiguration = { - /** - * List of metric filters applied to the test population. - */ - filters?: Array | undefined; - - minimumDetectableEffect: MinimumDetectableEffect; -}; diff --git a/packages/abtesting/model/filterEffects.ts b/packages/abtesting/model/filterEffects.ts deleted file mode 100644 index 6e3cfb300..000000000 --- a/packages/abtesting/model/filterEffects.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - emptySearch?: EmptySearchFilter | undefined; -}; diff --git a/packages/abtesting/model/index.ts b/packages/abtesting/model/index.ts deleted file mode 100644 index adb79f98c..000000000 --- a/packages/abtesting/model/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -// Code generated by 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 './createMetric'; -export * from './customSearchParams'; -export * from './decision'; -export * from './direction'; -export * from './effectMetric'; -export * from './emptySearchFilter'; -export * from './errorBase'; -export * from './errorCorrectionType'; -export * from './estimateABTestRequest'; -export * from './estimateABTestResponse'; -export * from './estimateConfiguration'; -export * from './filterEffects'; -export * from './listABTestsResponse'; -export * from './metricDate'; -export * from './metricMetadata'; -export * from './metricName'; -export * from './metricResult'; -export * from './metricsFilter'; -export * from './minimumDetectableEffect'; -export * from './outliersFilter'; -export * from './status'; -export * from './timeseries'; -export * from './timeseriesVariant'; -export * from './variant'; -export * from './variantMetadata'; diff --git a/packages/abtesting/model/listABTestsResponse.ts b/packages/abtesting/model/listABTestsResponse.ts deleted file mode 100644 index c46bbe753..000000000 --- a/packages/abtesting/model/listABTestsResponse.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by OpenAPI Generator (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 = { - /** - * A/B tests. - */ - abtests: Array | null; - - /** - * Number of A/B tests. - */ - count: number; - - /** - * Number of retrievable A/B tests. - */ - total: number; -}; diff --git a/packages/abtesting/model/metricDate.ts b/packages/abtesting/model/metricDate.ts deleted file mode 100644 index 84e6a131e..000000000 --- a/packages/abtesting/model/metricDate.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { MetricResult } from './metricResult'; - -export type MetricDate = { - /** - * Date where the metric was updated, in RFC 3339 format. - */ - date?: string | undefined; - - /** - * All ABTest metrics that were defined during test creation. - */ - metrics?: Array | undefined; -}; diff --git a/packages/abtesting/model/metricMetadata.ts b/packages/abtesting/model/metricMetadata.ts deleted file mode 100644 index a3dd7d5ab..000000000 --- a/packages/abtesting/model/metricMetadata.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 specific metadata. - */ -export type MetricMetadata = { - /** - * Only present in case the metric is \'revenue\'. It is the amount exceeding the 95th percentile of global revenue transactions involved in the AB Test. This amount is not considered when calculating statistical significance. It is tied to a per revenue-currency pair contrary to other global filter effects (such as outliers and empty search count). - */ - winsorizedValue?: number | undefined; - - /** - * Mean value for this metric. - */ - mean?: number | undefined; -}; diff --git a/packages/abtesting/model/metricName.ts b/packages/abtesting/model/metricName.ts deleted file mode 100644 index eae621958..000000000 --- a/packages/abtesting/model/metricName.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 MetricName = - | 'search_count' - | 'tracked_search_count' - | 'user_count' - | 'tracked_user_count' - | 'no_result_count' - | 'add_to_cart_count' - | 'purchase_count' - | 'clicked_search_count' - | 'converted_search_count' - | 'click_through_rate' - | 'conversion_rate' - | 'add_to_cart_rate' - | 'purchase_rate' - | 'average_click_position' - | 'revenue'; diff --git a/packages/abtesting/model/metricResult.ts b/packages/abtesting/model/metricResult.ts deleted file mode 100644 index 60dc7e28b..000000000 --- a/packages/abtesting/model/metricResult.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { MetricMetadata } from './metricMetadata'; - -export type MetricResult = { - name: string; - - /** - * Date and time when the metric was last updated, in RFC 3339 format. - */ - updatedAt: string; - - value: number; - - /** - * The upper bound of the 95% confidence interval for the metric value. The confidence interval is calculated using either the relative ratio or relative difference between the metric values for the control and the variant. Relative ratio is used for metrics that are ratios (e.g., click-through rate, conversion rate), while relative difference is used for continuous metrics (e.g., revenue). - */ - valueCIHigh?: number | undefined; - - /** - * The lower bound of the 95% confidence interval for the metric value. The confidence interval is calculated using either the relative ratio or relative difference between the metric values for the control and the variant. Relative ratio is used for metrics that are ratios (e.g., click-through rate, conversion rate), while relative difference is used for continuous metrics (e.g., revenue). - */ - valueCILow?: number | undefined; - - /** - * PValue for the first variant (control) will always be 0. For the other variants, pValue is calculated for the current variant based on the control. - */ - pValue: number; - - /** - * Dimension defined during test creation. - */ - dimension?: string | undefined; - - metadata?: MetricMetadata | undefined; - - /** - * The value that was computed during error correction. It is used to determine significance of the metric pValue. The critical value is calculated using Bonferroni or Benjamini-Hochberg corrections, based on the given configuration during the A/B test creation. - */ - criticalValue?: number | undefined; - - /** - * Whether the pValue is significant or not based on the critical value and the error correction algorithm used. - */ - significant?: boolean | undefined; -}; diff --git a/packages/abtesting/model/metricsFilter.ts b/packages/abtesting/model/metricsFilter.ts deleted file mode 100644 index eb601851b..000000000 --- a/packages/abtesting/model/metricsFilter.ts +++ /dev/null @@ -1,26 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Boolean filter applied to the A/B test population. Each filter targets a boolean metric and decides whether to include (true) or exclude (false) matching records. - */ -export type MetricsFilter = { - /** - * Metric domain (for example `abtesting`, `personalization`). - */ - domain: string; - - /** - * Public metric name. - */ - name: string; - - /** - * Whether the experiment should record the effects of this filter. - */ - trackEffects?: boolean | undefined; - - /** - * If true, keep items that match the filter; if false, exclude them. - */ - includes?: boolean | undefined; -}; diff --git a/packages/abtesting/model/minimumDetectableEffect.ts b/packages/abtesting/model/minimumDetectableEffect.ts deleted file mode 100644 index ecd87dcc1..000000000 --- a/packages/abtesting/model/minimumDetectableEffect.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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/abtesting/model/outliersFilter.ts b/packages/abtesting/model/outliersFilter.ts deleted file mode 100644 index 025977712..000000000 --- a/packages/abtesting/model/outliersFilter.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Number of tracked searches removed from the A/B test. - */ - trackedSearchesCount?: number | undefined; -}; diff --git a/packages/abtesting/model/status.ts b/packages/abtesting/model/status.ts deleted file mode 100644 index 3cccd8799..000000000 --- a/packages/abtesting/model/status.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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/abtesting/model/timeseries.ts b/packages/abtesting/model/timeseries.ts deleted file mode 100644 index 9f1abdb44..000000000 --- a/packages/abtesting/model/timeseries.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { TimeseriesVariant } from './timeseriesVariant'; - -export type Timeseries = { - /** - * Unique A/B test identifier. - */ - abTestID: number; - - /** - * A/B test timeseries variants. The first variant is your _control_ index, typically your production index. All of the additional variants are indexes with changed settings that you want to test against the control. - */ - variants: Array; -}; diff --git a/packages/abtesting/model/timeseriesVariant.ts b/packages/abtesting/model/timeseriesVariant.ts deleted file mode 100644 index 2bbbf1d5e..000000000 --- a/packages/abtesting/model/timeseriesVariant.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { MetricDate } from './metricDate'; - -export type TimeseriesVariant = { - dates?: Array | undefined; -}; diff --git a/packages/abtesting/model/variant.ts b/packages/abtesting/model/variant.ts deleted file mode 100644 index 961a9fdf4..000000000 --- a/packages/abtesting/model/variant.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { MetricResult } from './metricResult'; -import type { VariantMetadata } from './variantMetadata'; - -export type Variant = { - /** - * 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 `minimumDetectableEffect` setting for this number to be included in the response. - */ - estimatedSampleSize?: number | undefined; - - /** - * Index name of the A/B test variant (case-sensitive). - */ - index: string; - - /** - * Percentage of search requests each variant receives. - */ - trafficPercentage: number; - - /** - * All ABTest metrics that were defined during test creation. - */ - metrics: Array; - - metadata?: VariantMetadata | undefined; - - /** - * Search parameters applied to this variant when the same index is used for multiple variants. Only present if custom search parameters were provided during test creation. - */ - customSearchParameters?: Record | undefined; -}; diff --git a/packages/abtesting/model/variantMetadata.ts b/packages/abtesting/model/variantMetadata.ts deleted file mode 100644 index 1f68b3731..000000000 --- a/packages/abtesting/model/variantMetadata.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { FilterEffects } from './filterEffects'; - -/** - * Variant specific metadata. - */ -export type VariantMetadata = { - filterEffects?: FilterEffects | undefined; -}; diff --git a/packages/abtesting/package.json b/packages/abtesting/package.json deleted file mode 100644 index fc8806a42..000000000 --- a/packages/abtesting/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "version": "1.22.0", - "repository": { - "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" - }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/packages/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/abtesting", - "description": "JavaScript client for abtesting", - "exports": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/builds/browser.js" - }, - "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", - "./dist/builds/*.js": "./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.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "26.1.2", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" - } -} diff --git a/packages/abtesting/rollup.config.js b/packages/abtesting/rollup.config.js deleted file mode 100644 index 95b2d7e50..000000000 --- a/packages/abtesting/rollup.config.js +++ /dev/null @@ -1,17 +0,0 @@ -export default [ - { - input: 'dist/builds/browser.min.js', - external: ['dom'], - cache: false, - output: { - esModule: false, - file: 'dist/builds/browser.umd.js', - name: '@algolia/abtesting', - format: 'umd', - sourcemap: false, - globals: { - ['abtestingV3Client']: 'abtestingV3Client', - }, - }, - }, -]; diff --git a/packages/abtesting/src/abtestingV3Client.ts b/packages/abtesting/src/abtestingV3Client.ts deleted file mode 100644 index 946ae5dee..000000000 --- a/packages/abtesting/src/abtestingV3Client.ts +++ /dev/null @@ -1,856 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - CreateClientOptions, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, -} from '@algolia/client-common'; -import { createAuth, createTransporter, getAlgoliaAgent, validateRequired } 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 { Timeseries } from '../model/timeseries'; - -import type { - CustomDeleteProps, - CustomGetProps, - CustomPostProps, - CustomPutProps, - DeleteABTestProps, - GetABTestProps, - GetTimeseriesProps, - ListABTestsProps, - StopABTestProps, -} from '../model/clientMethodProps'; - -export const apiClientVersion = '1.22.0'; - -export const REGIONS = ['de', 'us'] as const; -export type Region = (typeof REGIONS)[number]; -export type RegionOptions = { region?: Region | undefined }; - -function getDefaultHosts(region?: Region | undefined): Host[] { - const url = !region ? 'analytics.algolia.com' : 'analytics.{region}.algolia.com'.replace('{region}', region); - - return [{ url, accept: 'readWrite', protocol: 'https' }]; -} - -export function createAbtestingV3Client({ - 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: 'AbtestingV3', - 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 | undefined): 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 { - validateRequired('addABTestsRequest', 'addABTests', addABTestsRequest); - - validateRequired('addABTestsRequest.name', 'addABTests', addABTestsRequest.name); - validateRequired('addABTestsRequest.variants', 'addABTests', addABTestsRequest.variants); - validateRequired('addABTestsRequest.metrics', 'addABTests', addABTestsRequest.metrics); - validateRequired('addABTestsRequest.endAt', 'addABTests', addABTestsRequest.endAt); - - const requestPath = '/3/abtests'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: addABTestsRequest, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Creates a new A/B test. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see addABTests for the plain version. - */ - addABTestsWithHTTPInfo( - addABTestsRequest: AddABTestsRequest, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('addABTestsRequest', 'addABTestsWithHTTPInfo', addABTestsRequest); - - validateRequired('addABTestsRequest.name', 'addABTestsWithHTTPInfo', addABTestsRequest.name); - validateRequired('addABTestsRequest.variants', 'addABTestsWithHTTPInfo', addABTestsRequest.variants); - validateRequired('addABTestsRequest.metrics', 'addABTestsWithHTTPInfo', addABTestsRequest.metrics); - validateRequired('addABTestsRequest.endAt', 'addABTestsWithHTTPInfo', addABTestsRequest.endAt); - - const requestPath = '/3/abtests'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: addABTestsRequest, - }; - - return transporter.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customDelete', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customDelete - The customDelete object. - * @param customDelete.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customDelete for the plain version. - */ - customDeleteWithHTTPInfo( - { path, parameters }: CustomDeleteProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customDeleteWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customGet', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customGet - The customGet object. - * @param customGet.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customGet for the plain version. - */ - customGetWithHTTPInfo( - { path, parameters }: CustomGetProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customGetWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPut', path); - - 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); - }, - /** - * This method lets you send requests to the Algolia REST API. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPut - The customPut object. - * @param customPut.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPut for the plain version. - */ - customPutWithHTTPInfo( - { path, parameters, body }: CustomPutProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPutWithHTTPInfo', path); - - 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.requestWithHttpInfo(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 { - validateRequired('id', 'deleteABTest', id); - - const requestPath = '/3/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); - }, - /** - * Deletes an A/B test by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteABTest for the plain version. - */ - deleteABTestWithHTTPInfo( - { id }: DeleteABTestProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('id', 'deleteABTestWithHTTPInfo', id); - - const requestPath = '/3/abtests/{id}'.replace('{id}', encodeURIComponent(id)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('estimateABTestRequest', 'estimateABTest', estimateABTestRequest); - - validateRequired('estimateABTestRequest.configuration', 'estimateABTest', estimateABTestRequest.configuration); - validateRequired('estimateABTestRequest.variants', 'estimateABTest', estimateABTestRequest.variants); - - const requestPath = '/3/abtests/estimate'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: estimateABTestRequest, - }; - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see estimateABTest for the plain version. - */ - estimateABTestWithHTTPInfo( - estimateABTestRequest: EstimateABTestRequest, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('estimateABTestRequest', 'estimateABTestWithHTTPInfo', estimateABTestRequest); - - validateRequired( - 'estimateABTestRequest.configuration', - 'estimateABTestWithHTTPInfo', - estimateABTestRequest.configuration, - ); - validateRequired('estimateABTestRequest.variants', 'estimateABTestWithHTTPInfo', estimateABTestRequest.variants); - - const requestPath = '/3/abtests/estimate'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: estimateABTestRequest, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('id', 'getABTest', id); - - const requestPath = '/3/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); - }, - /** - * Retrieves the details for an A/B test by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getABTest for the plain version. - */ - getABTestWithHTTPInfo( - { id }: GetABTestProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('id', 'getABTestWithHTTPInfo', id); - - const requestPath = '/3/abtests/{id}'.replace('{id}', encodeURIComponent(id)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves timeseries for an A/B test by its ID. - * - * Required API Key ACLs: - * - analytics - * @param getTimeseries - The getTimeseries object. - * @param getTimeseries.id - Unique A/B test identifier. - * @param getTimeseries.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. - * @param getTimeseries.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. - * @param getTimeseries.metric - List of metrics to retrieve. If not specified, all metrics are returned. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - getTimeseries( - { id, startDate, endDate, metric }: GetTimeseriesProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('id', 'getTimeseries', id); - - const requestPath = '/3/abtests/{id}/timeseries'.replace('{id}', encodeURIComponent(id)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (startDate !== undefined) { - queryParameters['startDate'] = startDate.toString(); - } - - if (endDate !== undefined) { - queryParameters['endDate'] = endDate.toString(); - } - - if (metric !== undefined) { - queryParameters['metric'] = metric.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Retrieves timeseries for an A/B test by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - analytics - * @param getTimeseries - The getTimeseries object. - * @param getTimeseries.id - Unique A/B test identifier. - * @param getTimeseries.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. - * @param getTimeseries.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. - * @param getTimeseries.metric - List of metrics to retrieve. If not specified, all metrics are returned. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getTimeseries for the plain version. - */ - getTimeseriesWithHTTPInfo( - { id, startDate, endDate, metric }: GetTimeseriesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('id', 'getTimeseriesWithHTTPInfo', id); - - const requestPath = '/3/abtests/{id}/timeseries'.replace('{id}', encodeURIComponent(id)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (startDate !== undefined) { - queryParameters['startDate'] = startDate.toString(); - } - - if (endDate !== undefined) { - queryParameters['endDate'] = endDate.toString(); - } - - if (metric !== undefined) { - queryParameters['metric'] = metric.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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 listABTests.direction - Sort order for A/B tests by start date. Use \'asc\' for ascending or \'desc\' for descending. Active A/B tests are always listed first. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - listABTests( - { offset, limit, indexPrefix, indexSuffix, direction }: ListABTestsProps = {}, - requestOptions: RequestOptions | undefined = undefined, - ): Promise { - const requestPath = '/3/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(); - } - - if (direction !== undefined) { - queryParameters['direction'] = direction.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Lists all A/B tests you configured for this application. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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 listABTests.direction - Sort order for A/B tests by start date. Use \'asc\' for ascending or \'desc\' for descending. Active A/B tests are always listed first. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see listABTests for the plain version. - */ - listABTestsWithHTTPInfo( - { offset, limit, indexPrefix, indexSuffix, direction }: ListABTestsProps = {}, - requestOptions: RequestOptions | undefined = undefined, - ): Promise> { - const requestPath = '/3/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(); - } - - if (direction !== undefined) { - queryParameters['direction'] = direction.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('id', 'stopABTest', id); - - const requestPath = '/3/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); - }, - /** - * Stops an A/B test by its ID. You can\'t restart stopped A/B tests. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see stopABTest for the plain version. - */ - stopABTestWithHTTPInfo( - { id }: StopABTestProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('id', 'stopABTestWithHTTPInfo', id); - - const requestPath = '/3/abtests/{id}/stop'.replace('{id}', encodeURIComponent(id)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/abtesting/tsconfig.json b/packages/abtesting/tsconfig.json deleted file mode 100644 index 444e8bb64..000000000 --- a/packages/abtesting/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src", "model", "builds"], - "exclude": ["dist", "node_modules"] -} diff --git a/packages/abtesting/tsup.config.ts b/packages/abtesting/tsup.config.ts deleted file mode 100644 index 09e5d4bd1..000000000 --- a/packages/abtesting/tsup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -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', - target: 'es2018', - 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: 'abtestingV3Client', -}; - -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/advanced-personalization/LICENSE b/packages/advanced-personalization/LICENSE deleted file mode 100644 index fddf416f9..000000000 --- a/packages/advanced-personalization/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/advanced-personalization/README.md b/packages/advanced-personalization/README.md deleted file mode 100644 index 4eb331f6a..000000000 --- a/packages/advanced-personalization/README.md +++ /dev/null @@ -1,76 +0,0 @@ -

- - 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 • - 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/advanced-personalization` if you already have `algoliasearch` installed. - -To get started, you first need to install @algolia/advanced-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/advanced-personalization@0.0.1-alpha.45 -# or -npm install @algolia/advanced-personalization@0.0.1-alpha.45 -# or -pnpm add @algolia/advanced-personalization@0.0.1-alpha.45 -``` - -### 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 { advancedPersonalizationClient } from '@algolia/advanced-personalization'; - -const client = advancedPersonalizationClient('YOUR_APP_ID', 'YOUR_API_KEY'); -``` - -For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/sdk/methods/advanced-personalization/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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/advanced-personalization/builds/browser.ts b/packages/advanced-personalization/builds/browser.ts deleted file mode 100644 index bcbd7ec69..000000000 --- a/packages/advanced-personalization/builds/browser.ts +++ /dev/null @@ -1,66 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -import type { ClientOptions } from '@algolia/client-common'; - -import { apiClientVersion, createAdvancedPersonalizationClient } from '../src/advancedPersonalizationClient'; - -import type { Region } from '../src/advancedPersonalizationClient'; -import { REGIONS } from '../src/advancedPersonalizationClient'; - -export type { Region, RegionOptions } from '../src/advancedPersonalizationClient'; - -export { apiClientVersion } from '../src/advancedPersonalizationClient'; - -export * from '../model'; - -export function advancedPersonalizationClient( - appId: string, - apiKey: string, - region: Region, - options?: ClientOptions | undefined, -): AdvancedPersonalizationClient { - 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(', ')}`); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - return createAdvancedPersonalizationClient({ - appId, - apiKey, - region, - 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()], - }), - ...browserOptions, - }); -} - -export type AdvancedPersonalizationClient = ReturnType; diff --git a/packages/advanced-personalization/builds/fetch.ts b/packages/advanced-personalization/builds/fetch.ts deleted file mode 100644 index 56653cfa5..000000000 --- a/packages/advanced-personalization/builds/fetch.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 AdvancedPersonalizationClient = ReturnType; - -import { gzipSync } from 'node:zlib'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createFetchRequester } from '@algolia/requester-fetch'; - -import type { ClientOptions } from '@algolia/client-common'; - -import { createAdvancedPersonalizationClient } from '../src/advancedPersonalizationClient'; - -import type { Region } from '../src/advancedPersonalizationClient'; -import { REGIONS } from '../src/advancedPersonalizationClient'; - -export type { Region, RegionOptions } from '../src/advancedPersonalizationClient'; - -export { apiClientVersion } from '../src/advancedPersonalizationClient'; - -export * from '../model'; - -export function advancedPersonalizationClient( - appId: string, - apiKey: string, - region: Region, - options?: ClientOptions | undefined, -): AdvancedPersonalizationClient { - 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 { - ...createAdvancedPersonalizationClient({ - appId, - apiKey, - region, - timeouts: { - connect: 2000, - read: 5000, - write: 30000, - }, - logger: createNullLogger(), - requester: createFetchRequester(), - algoliaAgents: [{ segment: 'Fetch' }], - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/advanced-personalization/builds/node.ts b/packages/advanced-personalization/builds/node.ts deleted file mode 100644 index 0032cc925..000000000 --- a/packages/advanced-personalization/builds/node.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 AdvancedPersonalizationClient = ReturnType; - -import { gzipSync } from 'node:zlib'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -import type { ClientOptions } from '@algolia/client-common'; - -import { createAdvancedPersonalizationClient } from '../src/advancedPersonalizationClient'; - -import type { Region } from '../src/advancedPersonalizationClient'; -import { REGIONS } from '../src/advancedPersonalizationClient'; - -export type { Region, RegionOptions } from '../src/advancedPersonalizationClient'; - -export { apiClientVersion } from '../src/advancedPersonalizationClient'; - -export * from '../model'; - -export function advancedPersonalizationClient( - appId: string, - apiKey: string, - region: Region, - options?: ClientOptions | undefined, -): AdvancedPersonalizationClient { - 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 { - ...createAdvancedPersonalizationClient({ - 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/advanced-personalization/builds/worker.ts b/packages/advanced-personalization/builds/worker.ts deleted file mode 100644 index 9c3865fb1..000000000 --- a/packages/advanced-personalization/builds/worker.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Code generated by 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 AdvancedPersonalizationClient = ReturnType; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createFetchRequester } from '@algolia/requester-fetch'; - -import type { ClientOptions } from '@algolia/client-common'; - -import { createAdvancedPersonalizationClient } from '../src/advancedPersonalizationClient'; - -import type { Region } from '../src/advancedPersonalizationClient'; -import { REGIONS } from '../src/advancedPersonalizationClient'; - -export type { Region, RegionOptions } from '../src/advancedPersonalizationClient'; - -export { apiClientVersion } from '../src/advancedPersonalizationClient'; - -export * from '../model'; - -export function advancedPersonalizationClient( - appId: string, - apiKey: string, - region: Region, - options?: ClientOptions | undefined, -): AdvancedPersonalizationClient { - 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(', ')}`); - } - - const { compression: _compression, ...workerOptions } = options || {}; - - return { - ...createAdvancedPersonalizationClient({ - appId, - apiKey, - region, - timeouts: { - connect: 2000, - read: 5000, - write: 30000, - }, - logger: createNullLogger(), - requester: createFetchRequester(), - algoliaAgents: [{ segment: 'Worker' }], - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - ...workerOptions, - }), - }; -} diff --git a/packages/advanced-personalization/index.d.ts b/packages/advanced-personalization/index.d.ts deleted file mode 100644 index e81a1cd3e..000000000 --- a/packages/advanced-personalization/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/node'; diff --git a/packages/advanced-personalization/index.js b/packages/advanced-personalization/index.js deleted file mode 100644 index 21e26aad3..000000000 --- a/packages/advanced-personalization/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/advanced-personalization/model/acceptedResponse.ts b/packages/advanced-personalization/model/acceptedResponse.ts deleted file mode 100644 index c2caa60af..000000000 --- a/packages/advanced-personalization/model/acceptedResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 AcceptedResponse = { - /** - * Status code. - */ - status: number; - - /** - * Response message. - */ - message: string; -}; diff --git a/packages/advanced-personalization/model/affinity.ts b/packages/advanced-personalization/model/affinity.ts deleted file mode 100644 index 93b21d265..000000000 --- a/packages/advanced-personalization/model/affinity.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 Affinity = { - name: string; - - indices: Array; - - value: string; - - score: number; - - lastUpdatedAt: string; -}; diff --git a/packages/advanced-personalization/model/badRequest.ts b/packages/advanced-personalization/model/badRequest.ts deleted file mode 100644 index 87a99ed9c..000000000 --- a/packages/advanced-personalization/model/badRequest.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 status code for a bad request error. - */ -export type BadRequest = 400; diff --git a/packages/advanced-personalization/model/badUserID.ts b/packages/advanced-personalization/model/badUserID.ts deleted file mode 100644 index 8273c8eb7..000000000 --- a/packages/advanced-personalization/model/badUserID.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Details about the response, such as error messages. - */ -export type BadUserID = 'Invalid userID format'; diff --git a/packages/advanced-personalization/model/clientMethodProps.ts b/packages/advanced-personalization/model/clientMethodProps.ts deleted file mode 100644 index 72c4fd7f5..000000000 --- a/packages/advanced-personalization/model/clientMethodProps.ts +++ /dev/null @@ -1,139 +0,0 @@ -// Code generated by 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 `computeRealtimeUser` method. - */ -export type ComputeRealtimeUserProps = { - /** - * Unique identifier representing a user for which to fetch the personalization profile. - */ - userToken: string; -}; - -/** - * Properties for the `customDelete` method. - */ -export type CustomDeleteProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customGet` method. - */ -export type CustomGetProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customPost` method. - */ -export type CustomPostProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `customPut` method. - */ -export type CustomPutProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `deleteUser` method. - */ -export type DeleteUserProps = { - /** - * ID of the user. - */ - userID: string; -}; - -/** - * Properties for the `getRealtimeUser` method. - */ -export type GetRealtimeUserProps = { - /** - * Unique identifier representing a user for which to fetch the personalization profile. - */ - userToken: string; -}; - -/** - * Properties for the `getUser` method. - */ -export type GetUserProps = { - /** - * ID of the user. - */ - userID: string; -}; - -/** - * Properties for the `getUsers` method. - */ -export type GetUsersProps = { - /** - * Filter users by start date and time, in RFC 3339 format. Only users that were updated after the passed date will be returned. - */ - startDate?: string | undefined; - /** - * Filter users by end date and time, in RFC 3339 format. Only users that were updated before the passed date will be returned. - */ - endDate?: string | undefined; - /** - * Filter users by matching indices. If multiple indices are passed, returned users will match all indices. - */ - indices?: Array | undefined; - /** - * Filter users by affinity name and value. If multiple values are passed, returned users will match all values. - */ - affinity?: Array | undefined; - /** - * Limit the number of users in the response. The value of this parameter ranges from 1 to 1000. - */ - limit?: number | undefined; - /** - * Reference for the next page, when navigating forward using pagination. Can\'t be used in the same request as `previousPageToken`. - */ - nextPageToken?: string | undefined; - /** - * Reference for the previous page, when navigating backward using pagination. Can\'t be used in the same request as `nextPageToken`. - */ - previousPageToken?: string | undefined; -}; diff --git a/packages/advanced-personalization/model/configurationObject.ts b/packages/advanced-personalization/model/configurationObject.ts deleted file mode 100644 index a5b3c915f..000000000 --- a/packages/advanced-personalization/model/configurationObject.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ConfigurationObject1 } from './configurationObject1'; -import type { ConfigurationStatus } from './configurationStatus'; -import type { Features } from './features'; -import type { PersonalizationReRanking } from './personalizationReRanking'; -import type { ProfileType } from './profileType'; - -export type ConfigurationObject = { - indices: Array; - - personalizationReRanking?: PersonalizationReRanking | undefined; - - profileType: ProfileType; - - status: ConfigurationStatus; - - features: Features; -}; diff --git a/packages/advanced-personalization/model/configurationObject1.ts b/packages/advanced-personalization/model/configurationObject1.ts deleted file mode 100644 index 709599839..000000000 --- a/packages/advanced-personalization/model/configurationObject1.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { Issue } from './issue'; -import type { Source1 } from './source1'; - -export type ConfigurationObject1 = { - index: string; - - affinities: Array; - - source: Source1; - - errors: Array; - - warnings: Array; - - lastUpdatedAt: string; -}; diff --git a/packages/advanced-personalization/model/configurationParameters.ts b/packages/advanced-personalization/model/configurationParameters.ts deleted file mode 100644 index 3ccd21623..000000000 --- a/packages/advanced-personalization/model/configurationParameters.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ConfigurationParametersObject } from './configurationParametersObject'; -import type { Features } from './features'; -import type { PersonalizationReRanking } from './personalizationReRanking'; -import type { ProfileType } from './profileType'; - -export type ConfigurationParameters = { - indices: Array; - - personalizationReRanking: PersonalizationReRanking; - - profileType: ProfileType; - - features: Features; -}; diff --git a/packages/advanced-personalization/model/configurationParametersObject.ts b/packages/advanced-personalization/model/configurationParametersObject.ts deleted file mode 100644 index d4247f557..000000000 --- a/packages/advanced-personalization/model/configurationParametersObject.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { Source } from './source'; - -export type ConfigurationParametersObject = { - index?: string | undefined; - - affinities?: Array | undefined; - - source?: Source | undefined; -}; diff --git a/packages/advanced-personalization/model/configurationStatus.ts b/packages/advanced-personalization/model/configurationStatus.ts deleted file mode 100644 index 40d0c29fb..000000000 --- a/packages/advanced-personalization/model/configurationStatus.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ErrorCodes } from './errorCodes'; -import type { Status } from './status'; - -export type ConfigurationStatus = { - type?: Status | undefined; - - errors?: Array | undefined; - - lastUpdatedAt?: string | undefined; -}; diff --git a/packages/advanced-personalization/model/conflictResponse.ts b/packages/advanced-personalization/model/conflictResponse.ts deleted file mode 100644 index 43baee998..000000000 --- a/packages/advanced-personalization/model/conflictResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 ConflictResponse = { - /** - * Status code. - */ - status: number; - - /** - * Response message. - */ - message: string; -}; diff --git a/packages/advanced-personalization/model/deleteUserResponse.ts b/packages/advanced-personalization/model/deleteUserResponse.ts deleted file mode 100644 index c938fe244..000000000 --- a/packages/advanced-personalization/model/deleteUserResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 DeleteUserResponse = { - message?: string | undefined; - - status?: number | undefined; - - userID?: string | undefined; - - deletedUntil?: string | undefined; - - deletedAt?: string | undefined; -}; diff --git a/packages/advanced-personalization/model/errorBase.ts b/packages/advanced-personalization/model/errorBase.ts deleted file mode 100644 index f31be6046..000000000 --- a/packages/advanced-personalization/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/advanced-personalization/model/errorCodes.ts b/packages/advanced-personalization/model/errorCodes.ts deleted file mode 100644 index 185b42689..000000000 --- a/packages/advanced-personalization/model/errorCodes.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by 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 ErrorCodes = - | 'blocked' - | 'deleted' - | 'no_perso_access' - | 'all_attr_value_filtered' - | 'missing_index' - | 'no_events_last_30_days' - | 'pending_pipelines' - | 'invalid_config' - | 'all_facets_invalid'; diff --git a/packages/advanced-personalization/model/errorMessagesBadRequest.ts b/packages/advanced-personalization/model/errorMessagesBadRequest.ts deleted file mode 100644 index 6efad1aa8..000000000 --- a/packages/advanced-personalization/model/errorMessagesBadRequest.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Details about the response, such as error messages. - */ -export type ErrorMessagesBadRequest = 'Invalid request body'; diff --git a/packages/advanced-personalization/model/errorMessagesInternalServerError.ts b/packages/advanced-personalization/model/errorMessagesInternalServerError.ts deleted file mode 100644 index 40ea88501..000000000 --- a/packages/advanced-personalization/model/errorMessagesInternalServerError.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Details about the response, such as error messages. - */ -export type ErrorMessagesInternalServerError = 'Internal Server Error'; diff --git a/packages/advanced-personalization/model/errorMessagesUnauthorized.ts b/packages/advanced-personalization/model/errorMessagesUnauthorized.ts deleted file mode 100644 index 8a4574f66..000000000 --- a/packages/advanced-personalization/model/errorMessagesUnauthorized.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Details about the response, such as error messages. - */ -export type ErrorMessagesUnauthorized = 'Unauthorized'; diff --git a/packages/advanced-personalization/model/errorResponsesBadRequest.ts b/packages/advanced-personalization/model/errorResponsesBadRequest.ts deleted file mode 100644 index 105c38c27..000000000 --- a/packages/advanced-personalization/model/errorResponsesBadRequest.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { BadRequest } from './badRequest'; -import type { ErrorMessagesBadRequest } from './errorMessagesBadRequest'; - -export type ErrorResponsesBadRequest = { - status?: BadRequest | undefined; - - message?: ErrorMessagesBadRequest | undefined; -}; diff --git a/packages/advanced-personalization/model/errorResponsesBadUserID.ts b/packages/advanced-personalization/model/errorResponsesBadUserID.ts deleted file mode 100644 index c17f9aeb6..000000000 --- a/packages/advanced-personalization/model/errorResponsesBadUserID.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { BadRequest } from './badRequest'; -import type { BadUserID } from './badUserID'; - -export type ErrorResponsesBadUserID = { - status?: BadRequest | undefined; - - message?: BadUserID | undefined; -}; diff --git a/packages/advanced-personalization/model/errorResponsesFeatureNotEnabled.ts b/packages/advanced-personalization/model/errorResponsesFeatureNotEnabled.ts deleted file mode 100644 index ffaed3915..000000000 --- a/packages/advanced-personalization/model/errorResponsesFeatureNotEnabled.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { FeatureNotEnabled } from './featureNotEnabled'; -import type { PaymentRequired } from './paymentRequired'; - -export type ErrorResponsesFeatureNotEnabled = { - status?: PaymentRequired | undefined; - - message?: FeatureNotEnabled | undefined; -}; diff --git a/packages/advanced-personalization/model/errorResponsesGenericNotFound.ts b/packages/advanced-personalization/model/errorResponsesGenericNotFound.ts deleted file mode 100644 index d6c8527f4..000000000 --- a/packages/advanced-personalization/model/errorResponsesGenericNotFound.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { GenericNotFound } from './genericNotFound'; -import type { NotFound } from './notFound'; - -export type ErrorResponsesGenericNotFound = { - status?: NotFound | undefined; - - message?: GenericNotFound | undefined; -}; diff --git a/packages/advanced-personalization/model/errorResponsesGenericUnprocessableEntity.ts b/packages/advanced-personalization/model/errorResponsesGenericUnprocessableEntity.ts deleted file mode 100644 index a420048c7..000000000 --- a/packages/advanced-personalization/model/errorResponsesGenericUnprocessableEntity.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { GenericUnprocessableEntity } from './genericUnprocessableEntity'; -import type { UnprocessableEntity } from './unprocessableEntity'; - -export type ErrorResponsesGenericUnprocessableEntity = { - status?: UnprocessableEntity | undefined; - - message?: GenericUnprocessableEntity | undefined; -}; diff --git a/packages/advanced-personalization/model/errorResponsesInternalServerError.ts b/packages/advanced-personalization/model/errorResponsesInternalServerError.ts deleted file mode 100644 index e81c11a91..000000000 --- a/packages/advanced-personalization/model/errorResponsesInternalServerError.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ErrorMessagesInternalServerError } from './errorMessagesInternalServerError'; -import type { InternalServerError } from './internalServerError'; - -export type ErrorResponsesInternalServerError = { - status?: InternalServerError | undefined; - - message?: ErrorMessagesInternalServerError | undefined; -}; diff --git a/packages/advanced-personalization/model/errorResponsesInvalidUserID.ts b/packages/advanced-personalization/model/errorResponsesInvalidUserID.ts deleted file mode 100644 index 42aaae0a9..000000000 --- a/packages/advanced-personalization/model/errorResponsesInvalidUserID.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { InvalidUserID } from './invalidUserID'; -import type { UnprocessableEntity } from './unprocessableEntity'; - -export type ErrorResponsesInvalidUserID = { - status?: UnprocessableEntity | undefined; - - message?: InvalidUserID | undefined; -}; diff --git a/packages/advanced-personalization/model/errorResponsesUnauthorized.ts b/packages/advanced-personalization/model/errorResponsesUnauthorized.ts deleted file mode 100644 index 9d17ca618..000000000 --- a/packages/advanced-personalization/model/errorResponsesUnauthorized.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ErrorMessagesUnauthorized } from './errorMessagesUnauthorized'; -import type { Unauthorized } from './unauthorized'; - -export type ErrorResponsesUnauthorized = { - status?: Unauthorized | undefined; - - message?: ErrorMessagesUnauthorized | undefined; -}; diff --git a/packages/advanced-personalization/model/event.ts b/packages/advanced-personalization/model/event.ts deleted file mode 100644 index b3915aa4f..000000000 --- a/packages/advanced-personalization/model/event.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (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'; -import type { Subtype } from './subtype'; - -export type Event = { - type: EventType; - - subtype?: Subtype | undefined; - - name: string; -}; diff --git a/packages/advanced-personalization/model/eventType.ts b/packages/advanced-personalization/model/eventType.ts deleted file mode 100644 index e68b7db8d..000000000 --- a/packages/advanced-personalization/model/eventType.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 = 'view' | 'click' | 'conversion'; diff --git a/packages/advanced-personalization/model/events.ts b/packages/advanced-personalization/model/events.ts deleted file mode 100644 index 89ad2b491..000000000 --- a/packages/advanced-personalization/model/events.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 Events = { - viewDetails: Array; - - viewListing: Array; - - addToCart: Array; - - purchase: Array; -}; diff --git a/packages/advanced-personalization/model/featureNotEnabled.ts b/packages/advanced-personalization/model/featureNotEnabled.ts deleted file mode 100644 index bad5c1769..000000000 --- a/packages/advanced-personalization/model/featureNotEnabled.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Details about the response, such as error messages. - */ -export type FeatureNotEnabled = - | 'Predictive profiles are not allowed for this app. Please contact support to upgrade your plan: https://support.algolia.com/' - | 'Realtime Personalization is not allowed for this app. Please contact support to upgrade your plan: https://support.algolia.com/'; diff --git a/packages/advanced-personalization/model/features.ts b/packages/advanced-personalization/model/features.ts deleted file mode 100644 index c6119e5cd..000000000 --- a/packages/advanced-personalization/model/features.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { Realtime } from './realtime'; - -export type Features = { - realtime?: Realtime | undefined; -}; diff --git a/packages/advanced-personalization/model/genericNotFound.ts b/packages/advanced-personalization/model/genericNotFound.ts deleted file mode 100644 index 52d29facf..000000000 --- a/packages/advanced-personalization/model/genericNotFound.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Details about the response, such as error messages. - */ -export type GenericNotFound = 'Not Found'; diff --git a/packages/advanced-personalization/model/genericUnprocessableEntity.ts b/packages/advanced-personalization/model/genericUnprocessableEntity.ts deleted file mode 100644 index 3faae844d..000000000 --- a/packages/advanced-personalization/model/genericUnprocessableEntity.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Details about the response, such as error messages. - */ -export type GenericUnprocessableEntity = 'Unprocessable Entity'; diff --git a/packages/advanced-personalization/model/getUsersResponse.ts b/packages/advanced-personalization/model/getUsersResponse.ts deleted file mode 100644 index faef2dbc2..000000000 --- a/packages/advanced-personalization/model/getUsersResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { User } from './user'; - -export type GetUsersResponse = { - users: Array; - - previousPageToken?: string | undefined; - - nextPageToken?: string | undefined; -}; diff --git a/packages/advanced-personalization/model/index.ts b/packages/advanced-personalization/model/index.ts deleted file mode 100644 index 5669e7593..000000000 --- a/packages/advanced-personalization/model/index.ts +++ /dev/null @@ -1,58 +0,0 @@ -// Code generated by 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 './acceptedResponse'; -export * from './affinity'; -export * from './badRequest'; -export * from './badUserID'; -export * from './clientMethodProps'; -export * from './configurationObject'; -export * from './configurationObject1'; -export * from './configurationParameters'; -export * from './configurationParametersObject'; -export * from './configurationStatus'; -export * from './conflictResponse'; -export * from './deleteUserResponse'; -export * from './errorBase'; -export * from './errorCodes'; -export * from './errorMessagesBadRequest'; -export * from './errorMessagesInternalServerError'; -export * from './errorMessagesUnauthorized'; -export * from './errorResponsesBadRequest'; -export * from './errorResponsesBadUserID'; -export * from './errorResponsesFeatureNotEnabled'; -export * from './errorResponsesGenericNotFound'; -export * from './errorResponsesGenericUnprocessableEntity'; -export * from './errorResponsesInternalServerError'; -export * from './errorResponsesInvalidUserID'; -export * from './errorResponsesUnauthorized'; -export * from './event'; -export * from './events'; -export * from './eventType'; -export * from './featureNotEnabled'; -export * from './features'; -export * from './genericNotFound'; -export * from './genericUnprocessableEntity'; -export * from './getUsersResponse'; -export * from './internalServerError'; -export * from './invalidUserID'; -export * from './issue'; -export * from './notFound'; -export * from './paymentRequired'; -export * from './personalizationReRanking'; -export * from './profileType'; -export * from './putConfigResponse'; -export * from './realtime'; -export * from './realtimeUser'; -export * from './searchFilter'; -export * from './searchFilters'; -export * from './source'; -export * from './source1'; -export * from './sourceType'; -export * from './status'; -export * from './strategy'; -export * from './subtype'; -export * from './tooManyRequestsResponse'; -export * from './unauthorized'; -export * from './unprocessableEntity'; -export * from './user'; -export * from './userType'; diff --git a/packages/advanced-personalization/model/internalServerError.ts b/packages/advanced-personalization/model/internalServerError.ts deleted file mode 100644 index 6b6b816b5..000000000 --- a/packages/advanced-personalization/model/internalServerError.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 status code for an internal server error. - */ -export type InternalServerError = 500; diff --git a/packages/advanced-personalization/model/invalidUserID.ts b/packages/advanced-personalization/model/invalidUserID.ts deleted file mode 100644 index 3ea6938a5..000000000 --- a/packages/advanced-personalization/model/invalidUserID.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Details about the response, such as error messages. - */ -export type InvalidUserID = - | 'UserID must contain only alphanumeric' - | 'equal' - | 'plus' - | 'slash' - | 'hyphen' - | 'or underscore characters' - | 'and be between 1 and 129 characters long'; diff --git a/packages/advanced-personalization/model/issue.ts b/packages/advanced-personalization/model/issue.ts deleted file mode 100644 index fb3d537e4..000000000 --- a/packages/advanced-personalization/model/issue.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * An issue is either an \'error\' or a \'warning\' that is generated by the validator. - */ -export type Issue = { - code: string; - - index: string; - - message: string; -}; diff --git a/packages/advanced-personalization/model/notFound.ts b/packages/advanced-personalization/model/notFound.ts deleted file mode 100644 index b40990acd..000000000 --- a/packages/advanced-personalization/model/notFound.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 status code for a not found error. - */ -export type NotFound = 404; diff --git a/packages/advanced-personalization/model/paymentRequired.ts b/packages/advanced-personalization/model/paymentRequired.ts deleted file mode 100644 index 447ee3e6c..000000000 --- a/packages/advanced-personalization/model/paymentRequired.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 status code for a payment required error. - */ -export type PaymentRequired = 402; diff --git a/packages/advanced-personalization/model/personalizationReRanking.ts b/packages/advanced-personalization/model/personalizationReRanking.ts deleted file mode 100644 index 2d4dddd79..000000000 --- a/packages/advanced-personalization/model/personalizationReRanking.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 impact that personalization has on the re-ranking of search results. - */ -export type PersonalizationReRanking = 'none' | 'low' | 'medium' | 'high' | 'maximum'; diff --git a/packages/advanced-personalization/model/profileType.ts b/packages/advanced-personalization/model/profileType.ts deleted file mode 100644 index d3f196779..000000000 --- a/packages/advanced-personalization/model/profileType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 type of user profiles to generate. Basic profiles are based on past behaviors, ensuring search results align with previous interests. - */ -export type ProfileType = 'basic'; diff --git a/packages/advanced-personalization/model/putConfigResponse.ts b/packages/advanced-personalization/model/putConfigResponse.ts deleted file mode 100644 index 563b5d45a..000000000 --- a/packages/advanced-personalization/model/putConfigResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { Issue } from './issue'; - -export type PutConfigResponse = { - status: number; - - errors: Array; - - warnings: Array; - - message: string; -}; diff --git a/packages/advanced-personalization/model/realtime.ts b/packages/advanced-personalization/model/realtime.ts deleted file mode 100644 index 523c0dee9..000000000 --- a/packages/advanced-personalization/model/realtime.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 Realtime = { - /** - * Whether the realtime personalization feature is enabled. - */ - enabled?: boolean | undefined; -}; diff --git a/packages/advanced-personalization/model/realtimeUser.ts b/packages/advanced-personalization/model/realtimeUser.ts deleted file mode 100644 index 05a2143f7..000000000 --- a/packages/advanced-personalization/model/realtimeUser.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { SearchFilters } from './searchFilters'; - -export type RealtimeUser = { - /** - * Version of the response format. - */ - version: string; - - /** - * User ID of the user. - */ - userID: string; - - /** - * Date and time when the profile was last computed, in RFC 3339 format. - */ - lastUpdatedAt: string; - - /** - * Index personalization filters by index name. - */ - search: { [key: string]: SearchFilters }; -}; diff --git a/packages/advanced-personalization/model/searchFilter.ts b/packages/advanced-personalization/model/searchFilter.ts deleted file mode 100644 index 653ee90ff..000000000 --- a/packages/advanced-personalization/model/searchFilter.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by 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 SearchFilter = { - session?: Array | undefined; -}; diff --git a/packages/advanced-personalization/model/searchFilters.ts b/packages/advanced-personalization/model/searchFilters.ts deleted file mode 100644 index 243174c6c..000000000 --- a/packages/advanced-personalization/model/searchFilters.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { SearchFilter } from './searchFilter'; -import type { Strategy } from './strategy'; - -export type SearchFilters = { - indices?: Array | undefined; - - strategy?: Strategy | undefined; - - filters?: SearchFilter | undefined; -}; diff --git a/packages/advanced-personalization/model/source.ts b/packages/advanced-personalization/model/source.ts deleted file mode 100644 index d4d206ba4..000000000 --- a/packages/advanced-personalization/model/source.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { Events } from './events'; -import type { SourceType } from './sourceType'; - -export type Source = { - type: SourceType; - - events?: Events | undefined; -}; diff --git a/packages/advanced-personalization/model/source1.ts b/packages/advanced-personalization/model/source1.ts deleted file mode 100644 index ee963e286..000000000 --- a/packages/advanced-personalization/model/source1.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { Events } from './events'; -import type { SourceType } from './sourceType'; - -export type Source1 = { - type?: SourceType | undefined; - - events?: Events | undefined; -}; diff --git a/packages/advanced-personalization/model/sourceType.ts b/packages/advanced-personalization/model/sourceType.ts deleted file mode 100644 index f8db3baee..000000000 --- a/packages/advanced-personalization/model/sourceType.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 = 'insights'; diff --git a/packages/advanced-personalization/model/status.ts b/packages/advanced-personalization/model/status.ts deleted file mode 100644 index 879c5e7cd..000000000 --- a/packages/advanced-personalization/model/status.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 Status = 'pending' | 'active' | 'paused'; diff --git a/packages/advanced-personalization/model/strategy.ts b/packages/advanced-personalization/model/strategy.ts deleted file mode 100644 index 1a47c2fd1..000000000 --- a/packages/advanced-personalization/model/strategy.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 Strategy = 'session' | 'historical' | 'hybrid'; diff --git a/packages/advanced-personalization/model/subtype.ts b/packages/advanced-personalization/model/subtype.ts deleted file mode 100644 index 5626da7cd..000000000 --- a/packages/advanced-personalization/model/subtype.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 Subtype = 'addToCart' | 'purchase'; diff --git a/packages/advanced-personalization/model/tooManyRequestsResponse.ts b/packages/advanced-personalization/model/tooManyRequestsResponse.ts deleted file mode 100644 index e2ae18e04..000000000 --- a/packages/advanced-personalization/model/tooManyRequestsResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 TooManyRequestsResponse = { - /** - * Status code. - */ - status: number; - - /** - * Response message. - */ - message: string; -}; diff --git a/packages/advanced-personalization/model/unauthorized.ts b/packages/advanced-personalization/model/unauthorized.ts deleted file mode 100644 index 3291f9346..000000000 --- a/packages/advanced-personalization/model/unauthorized.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 status code for an authorization error. - */ -export type Unauthorized = 401; diff --git a/packages/advanced-personalization/model/unprocessableEntity.ts b/packages/advanced-personalization/model/unprocessableEntity.ts deleted file mode 100644 index ebba43f8f..000000000 --- a/packages/advanced-personalization/model/unprocessableEntity.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 status code for an unprocessable entity error. - */ -export type UnprocessableEntity = 422; diff --git a/packages/advanced-personalization/model/user.ts b/packages/advanced-personalization/model/user.ts deleted file mode 100644 index 9ace5854b..000000000 --- a/packages/advanced-personalization/model/user.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { Affinity } from './affinity'; -import type { UserType } from './userType'; - -export type User = { - userID: string; - - type: UserType; - - affinities: Array; - - lastUpdatedAt: string; -}; diff --git a/packages/advanced-personalization/model/userType.ts b/packages/advanced-personalization/model/userType.ts deleted file mode 100644 index 6d4009c43..000000000 --- a/packages/advanced-personalization/model/userType.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 UserType = 'basic' | 'predictive' | 'realtime'; diff --git a/packages/advanced-personalization/package.json b/packages/advanced-personalization/package.json deleted file mode 100644 index b5cae7855..000000000 --- a/packages/advanced-personalization/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "version": "0.0.1-alpha.45", - "repository": { - "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" - }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/packages/advanced-personalization#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/advanced-personalization", - "description": "JavaScript client for advanced-personalization", - "exports": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/builds/browser.js" - }, - "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", - "./dist/builds/*.js": "./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.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "26.1.2", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" - } -} diff --git a/packages/advanced-personalization/rollup.config.js b/packages/advanced-personalization/rollup.config.js deleted file mode 100644 index 3c185e14c..000000000 --- a/packages/advanced-personalization/rollup.config.js +++ /dev/null @@ -1,17 +0,0 @@ -export default [ - { - input: 'dist/builds/browser.min.js', - external: ['dom'], - cache: false, - output: { - esModule: false, - file: 'dist/builds/browser.umd.js', - name: '@algolia/advanced-personalization', - format: 'umd', - sourcemap: false, - globals: { - ['advancedPersonalizationClient']: 'advancedPersonalizationClient', - }, - }, - }, -]; diff --git a/packages/advanced-personalization/src/advancedPersonalizationClient.ts b/packages/advanced-personalization/src/advancedPersonalizationClient.ts deleted file mode 100644 index e38531b57..000000000 --- a/packages/advanced-personalization/src/advancedPersonalizationClient.ts +++ /dev/null @@ -1,861 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - CreateClientOptions, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, -} from '@algolia/client-common'; -import { createAuth, createTransporter, getAlgoliaAgent, validateRequired } from '@algolia/client-common'; - -import type { AcceptedResponse } from '../model/acceptedResponse'; -import type { ConfigurationObject } from '../model/configurationObject'; -import type { ConfigurationParameters } from '../model/configurationParameters'; -import type { DeleteUserResponse } from '../model/deleteUserResponse'; -import type { GetUsersResponse } from '../model/getUsersResponse'; -import type { PutConfigResponse } from '../model/putConfigResponse'; -import type { RealtimeUser } from '../model/realtimeUser'; -import type { User } from '../model/user'; - -import type { - ComputeRealtimeUserProps, - CustomDeleteProps, - CustomGetProps, - CustomPostProps, - CustomPutProps, - DeleteUserProps, - GetRealtimeUserProps, - GetUserProps, - GetUsersProps, -} from '../model/clientMethodProps'; - -export const apiClientVersion = '0.0.1-alpha.45'; - -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 = 'ai-personalization.{region}.algolia.com'.replace('{region}', region); - - return [{ url, accept: 'readWrite', protocol: 'https' }]; -} - -export function createAdvancedPersonalizationClient({ - 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: 'AdvancedPersonalization', - 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 | undefined): 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; - } - }, - - /** - * Sends a request to compute the real-time user\'s personalization profile. - * - * Required API Key ACLs: - * - recommendation - * - * @deprecated - * @param computeRealtimeUser - The computeRealtimeUser object. - * @param computeRealtimeUser.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. - */ - computeRealtimeUser( - { userToken }: ComputeRealtimeUserProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('userToken', 'computeRealtimeUser', userToken); - - const requestPath = '/2/realtime/users/{userToken}/compute'.replace('{userToken}', encodeURIComponent(userToken)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Sends a request to compute the real-time user\'s personalization profile. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - recommendation - * - * @deprecated - * @param computeRealtimeUser - The computeRealtimeUser object. - * @param computeRealtimeUser.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. - * @see computeRealtimeUser for the plain version. - */ - computeRealtimeUserWithHTTPInfo( - { userToken }: ComputeRealtimeUserProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('userToken', 'computeRealtimeUserWithHTTPInfo', userToken); - - const requestPath = '/2/realtime/users/{userToken}/compute'.replace('{userToken}', encodeURIComponent(userToken)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customDelete', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customDelete - The customDelete object. - * @param customDelete.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customDelete for the plain version. - */ - customDeleteWithHTTPInfo( - { path, parameters }: CustomDeleteProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customDeleteWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customGet', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customGet - The customGet object. - * @param customGet.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customGet for the plain version. - */ - customGetWithHTTPInfo( - { path, parameters }: CustomGetProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customGetWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPut', path); - - 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); - }, - /** - * This method lets you send requests to the Algolia REST API. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPut - The customPut object. - * @param customPut.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPut for the plain version. - */ - customPutWithHTTPInfo( - { path, parameters, body }: CustomPutProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPutWithHTTPInfo', path); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Deletes a user profile. - * - * Required API Key ACLs: - * - search - * - browse - * - recommendation - * @param deleteUser - The deleteUser object. - * @param deleteUser.userID - ID of the user. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - deleteUser({ userID }: DeleteUserProps, requestOptions?: RequestOptions): Promise { - validateRequired('userID', 'deleteUser', userID); - - const requestPath = '/2/users/{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); - }, - /** - * Deletes a user profile. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - search - * - browse - * - recommendation - * @param deleteUser - The deleteUser object. - * @param deleteUser.userID - ID of the user. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see deleteUser for the plain version. - */ - deleteUserWithHTTPInfo( - { userID }: DeleteUserProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('userID', 'deleteUserWithHTTPInfo', userID); - - const requestPath = '/2/users/{userID}'.replace('{userID}', encodeURIComponent(userID)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves a list of configuration objects for each index. - * - * Required API Key ACLs: - * - search - * - browse - * - recommendation - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - getConfig(requestOptions?: RequestOptions | undefined): Promise { - const requestPath = '/2/config'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Retrieves a list of configuration objects for each index. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - search - * - browse - * - recommendation - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getConfig for the plain version. - */ - getConfigWithHTTPInfo( - requestOptions?: RequestOptions | undefined, - ): Promise> { - const requestPath = '/2/config'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves the real-time user\'s personalization profiles containing search filters. - * - * Required API Key ACLs: - * - recommendation - * @param getRealtimeUser - The getRealtimeUser object. - * @param getRealtimeUser.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. - */ - getRealtimeUser({ userToken }: GetRealtimeUserProps, requestOptions?: RequestOptions): Promise { - validateRequired('userToken', 'getRealtimeUser', userToken); - - const requestPath = '/2/realtime/users/{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); - }, - /** - * Retrieves the real-time user\'s personalization profiles containing search filters. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - recommendation - * @param getRealtimeUser - The getRealtimeUser object. - * @param getRealtimeUser.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. - * @see getRealtimeUser for the plain version. - */ - getRealtimeUserWithHTTPInfo( - { userToken }: GetRealtimeUserProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('userToken', 'getRealtimeUserWithHTTPInfo', userToken); - - const requestPath = '/2/realtime/users/{userToken}'.replace('{userToken}', encodeURIComponent(userToken)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves a user profile. - * - * Required API Key ACLs: - * - search - * - browse - * - recommendation - * @param getUser - The getUser object. - * @param getUser.userID - ID of the user. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - getUser({ userID }: GetUserProps, requestOptions?: RequestOptions): Promise { - validateRequired('userID', 'getUser', userID); - - const requestPath = '/2/users/{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); - }, - /** - * Retrieves a user profile. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - search - * - browse - * - recommendation - * @param getUser - The getUser object. - * @param getUser.userID - ID of the user. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getUser for the plain version. - */ - getUserWithHTTPInfo({ userID }: GetUserProps, requestOptions?: RequestOptions): Promise> { - validateRequired('userID', 'getUserWithHTTPInfo', userID); - - const requestPath = '/2/users/{userID}'.replace('{userID}', encodeURIComponent(userID)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves a list of user profiles in [lexicographical order](https://www.educative.io/answers/what-is-a-lexicographic-order). - * - * Required API Key ACLs: - * - search - * - browse - * - recommendation - * @param getUsers - The getUsers object. - * @param getUsers.startDate - Filter users by start date and time, in RFC 3339 format. Only users that were updated after the passed date will be returned. - * @param getUsers.endDate - Filter users by end date and time, in RFC 3339 format. Only users that were updated before the passed date will be returned. - * @param getUsers.indices - Filter users by matching indices. If multiple indices are passed, returned users will match all indices. - * @param getUsers.affinity - Filter users by affinity name and value. If multiple values are passed, returned users will match all values. - * @param getUsers.limit - Limit the number of users in the response. The value of this parameter ranges from 1 to 1000. - * @param getUsers.nextPageToken - Reference for the next page, when navigating forward using pagination. Can\'t be used in the same request as `previousPageToken`. - * @param getUsers.previousPageToken - Reference for the previous page, when navigating backward using pagination. Can\'t be used in the same request as `nextPageToken`. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - getUsers( - { startDate, endDate, indices, affinity, limit, nextPageToken, previousPageToken }: GetUsersProps = {}, - requestOptions: RequestOptions | undefined = undefined, - ): Promise { - const requestPath = '/2/users'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (startDate !== undefined) { - queryParameters['startDate'] = startDate.toString(); - } - - if (endDate !== undefined) { - queryParameters['endDate'] = endDate.toString(); - } - - if (indices !== undefined) { - queryParameters['indices'] = indices.toString(); - } - - if (affinity !== undefined) { - queryParameters['affinity'] = affinity.toString(); - } - - if (limit !== undefined) { - queryParameters['limit'] = limit.toString(); - } - - if (nextPageToken !== undefined) { - queryParameters['nextPageToken'] = nextPageToken.toString(); - } - - if (previousPageToken !== undefined) { - queryParameters['previousPageToken'] = previousPageToken.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Retrieves a list of user profiles in [lexicographical order](https://www.educative.io/answers/what-is-a-lexicographic-order). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - search - * - browse - * - recommendation - * @param getUsers - The getUsers object. - * @param getUsers.startDate - Filter users by start date and time, in RFC 3339 format. Only users that were updated after the passed date will be returned. - * @param getUsers.endDate - Filter users by end date and time, in RFC 3339 format. Only users that were updated before the passed date will be returned. - * @param getUsers.indices - Filter users by matching indices. If multiple indices are passed, returned users will match all indices. - * @param getUsers.affinity - Filter users by affinity name and value. If multiple values are passed, returned users will match all values. - * @param getUsers.limit - Limit the number of users in the response. The value of this parameter ranges from 1 to 1000. - * @param getUsers.nextPageToken - Reference for the next page, when navigating forward using pagination. Can\'t be used in the same request as `previousPageToken`. - * @param getUsers.previousPageToken - Reference for the previous page, when navigating backward using pagination. Can\'t be used in the same request as `nextPageToken`. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getUsers for the plain version. - */ - getUsersWithHTTPInfo( - { startDate, endDate, indices, affinity, limit, nextPageToken, previousPageToken }: GetUsersProps = {}, - requestOptions: RequestOptions | undefined = undefined, - ): Promise> { - const requestPath = '/2/users'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (startDate !== undefined) { - queryParameters['startDate'] = startDate.toString(); - } - - if (endDate !== undefined) { - queryParameters['endDate'] = endDate.toString(); - } - - if (indices !== undefined) { - queryParameters['indices'] = indices.toString(); - } - - if (affinity !== undefined) { - queryParameters['affinity'] = affinity.toString(); - } - - if (limit !== undefined) { - queryParameters['limit'] = limit.toString(); - } - - if (nextPageToken !== undefined) { - queryParameters['nextPageToken'] = nextPageToken.toString(); - } - - if (previousPageToken !== undefined) { - queryParameters['previousPageToken'] = previousPageToken.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Updates the configuration. The configuration is a list of configuration objects for each index. To configure Advanced Personalization for an index, create a new configuration object for the index. - * - * Required API Key ACLs: - * - search - * - browse - * - recommendation - * @param configurationParameters - The configurationParameters object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - putConfig( - configurationParameters: ConfigurationParameters, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('configurationParameters', 'putConfig', configurationParameters); - - validateRequired('configurationParameters.indices', 'putConfig', configurationParameters.indices); - validateRequired( - 'configurationParameters.personalizationReRanking', - 'putConfig', - configurationParameters.personalizationReRanking, - ); - validateRequired('configurationParameters.profileType', 'putConfig', configurationParameters.profileType); - validateRequired('configurationParameters.features', 'putConfig', configurationParameters.features); - - const requestPath = '/2/config'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PUT', - path: requestPath, - queryParameters, - headers, - data: configurationParameters, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Updates the configuration. The configuration is a list of configuration objects for each index. To configure Advanced Personalization for an index, create a new configuration object for the index. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - search - * - browse - * - recommendation - * @param configurationParameters - The configurationParameters object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see putConfig for the plain version. - */ - putConfigWithHTTPInfo( - configurationParameters: ConfigurationParameters, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('configurationParameters', 'putConfigWithHTTPInfo', configurationParameters); - - validateRequired('configurationParameters.indices', 'putConfigWithHTTPInfo', configurationParameters.indices); - validateRequired( - 'configurationParameters.personalizationReRanking', - 'putConfigWithHTTPInfo', - configurationParameters.personalizationReRanking, - ); - validateRequired( - 'configurationParameters.profileType', - 'putConfigWithHTTPInfo', - configurationParameters.profileType, - ); - validateRequired('configurationParameters.features', 'putConfigWithHTTPInfo', configurationParameters.features); - - const requestPath = '/2/config'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PUT', - path: requestPath, - queryParameters, - headers, - data: configurationParameters, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/advanced-personalization/tsconfig.json b/packages/advanced-personalization/tsconfig.json deleted file mode 100644 index 444e8bb64..000000000 --- a/packages/advanced-personalization/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src", "model", "builds"], - "exclude": ["dist", "node_modules"] -} diff --git a/packages/advanced-personalization/tsup.config.ts b/packages/advanced-personalization/tsup.config.ts deleted file mode 100644 index 80946bcae..000000000 --- a/packages/advanced-personalization/tsup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -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', - target: 'es2018', - 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: 'advancedPersonalizationClient', -}; - -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/agent-studio/LICENSE b/packages/agent-studio/LICENSE deleted file mode 100644 index fddf416f9..000000000 --- a/packages/agent-studio/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/agent-studio/README.md b/packages/agent-studio/README.md deleted file mode 100644 index d392f3bd1..000000000 --- a/packages/agent-studio/README.md +++ /dev/null @@ -1,76 +0,0 @@ -

- - 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 • - 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/agent-studio` if you already have `algoliasearch` installed. - -To get started, you first need to install @algolia/agent-studio (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/agent-studio@1.1.0 -# or -npm install @algolia/agent-studio@1.1.0 -# or -pnpm add @algolia/agent-studio@1.1.0 -``` - -### 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 { agentStudioClient } from '@algolia/agent-studio'; - -const client = agentStudioClient('YOUR_APP_ID', 'YOUR_API_KEY'); -``` - -For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/sdk/methods/agent-studio/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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/agent-studio/__tests__/agentStudio.node.test.ts b/packages/agent-studio/__tests__/agentStudio.node.test.ts deleted file mode 100644 index f38b7154e..000000000 --- a/packages/agent-studio/__tests__/agentStudio.node.test.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { createHmac } from 'node:crypto'; - -import { expect, test } from 'vitest'; - -import { agentStudioClient } from '../builds/node'; - -test('forgeSecuredUserToken with default expiry', () => { - const client = agentStudioClient('APP_ID', 'API_KEY'); - - const token = client.forgeSecuredUserToken({ - secretKey: 'my-secret-key', - secretKeyId: 'my-key-id', - userId: 'user-123', - }); - - const parts = token.split('.'); - expect(parts).toHaveLength(3); - - const header = JSON.parse(Buffer.from(parts[0], 'base64url').toString()); - expect(header.alg).toBe('HS256'); - expect(header.typ).toBe('JWT'); - expect(header.kid).toBe('my-key-id'); - - const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString()); - expect(payload.sub).toBe('user-123'); - const expectedExp = Math.floor(Date.now() / 1000) + 24 * 3600; - expect(Math.abs(payload.exp - expectedExp)).toBeLessThan(5); - - const expectedSig = createHmac('sha256', 'my-secret-key').update(`${parts[0]}.${parts[1]}`).digest('base64url'); - expect(parts[2]).toBe(expectedSig); -}); - -test('forgeSecuredUserToken with custom expiry', () => { - const client = agentStudioClient('APP_ID', 'API_KEY'); - - const token = client.forgeSecuredUserToken({ - secretKey: 'my-secret-key', - secretKeyId: 'my-key-id', - userId: 'user-456', - expiresIn: 3600, - }); - - const parts = token.split('.'); - const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString()); - const expectedExp = Math.floor(Date.now() / 1000) + 3600; - expect(Math.abs(payload.exp - expectedExp)).toBeLessThan(5); -}); diff --git a/packages/agent-studio/builds/browser.ts b/packages/agent-studio/builds/browser.ts deleted file mode 100644 index 897c50893..000000000 --- a/packages/agent-studio/builds/browser.ts +++ /dev/null @@ -1,55 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -import type { ClientOptions } from '@algolia/client-common'; - -import { apiClientVersion, createAgentStudioClient } from '../src/agentStudioClient'; - -export { apiClientVersion } from '../src/agentStudioClient'; - -export * from '../model'; - -export function agentStudioClient( - appId: string, - apiKey: string, - options?: ClientOptions | undefined, -): AgentStudioClient { - if (!appId || typeof appId !== 'string') { - throw new Error('`appId` is missing.'); - } - - if (!apiKey || typeof apiKey !== 'string') { - throw new Error('`apiKey` is missing.'); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - return createAgentStudioClient({ - appId, - apiKey, - 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()], - }), - ...browserOptions, - }); -} - -export type AgentStudioClient = ReturnType; diff --git a/packages/agent-studio/builds/fetch.ts b/packages/agent-studio/builds/fetch.ts deleted file mode 100644 index 64c8c904b..000000000 --- a/packages/agent-studio/builds/fetch.ts +++ /dev/null @@ -1,72 +0,0 @@ -// Code generated by 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 AgentStudioClient = ReturnType & AgentStudioNodeHelpers; - -import { gzipSync } from 'node:zlib'; - -import { createHmac } from 'node:crypto'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createFetchRequester } from '@algolia/requester-fetch'; - -import type { ClientOptions } from '@algolia/client-common'; - -import { createAgentStudioClient } from '../src/agentStudioClient'; - -export { apiClientVersion } from '../src/agentStudioClient'; - -export * from '../model'; - -import type { AgentStudioNodeHelpers } from '../model'; - -export function agentStudioClient( - appId: string, - apiKey: string, - options?: ClientOptions | undefined, -): AgentStudioClient { - if (!appId || typeof appId !== 'string') { - throw new Error('`appId` is missing.'); - } - - if (!apiKey || typeof apiKey !== 'string') { - throw new Error('`apiKey` is missing.'); - } - - return { - ...createAgentStudioClient({ - appId, - apiKey, - timeouts: { - connect: 25000, - read: 25000, - write: 25000, - }, - logger: createNullLogger(), - requester: createFetchRequester(), - algoliaAgents: [{ segment: 'Fetch' }], - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - forgeSecuredUserToken({ - secretKey, - secretKeyId, - userId, - expiresIn = 24 * 3600, // 24 hours - }: { - secretKey: string; - secretKeyId: string; - userId: string; - expiresIn?: number; - }): string { - const header = Buffer.from(JSON.stringify({ alg: 'HS256', typ: 'JWT', kid: secretKeyId })).toString('base64url'); - const payload = Buffer.from( - JSON.stringify({ sub: userId, exp: Math.floor(Date.now() / 1000) + expiresIn }), - ).toString('base64url'); - const signature = createHmac('sha256', secretKey).update(`${header}.${payload}`).digest('base64url'); - return `${header}.${payload}.${signature}`; - }, - }; -} diff --git a/packages/agent-studio/builds/node.ts b/packages/agent-studio/builds/node.ts deleted file mode 100644 index d32e518bb..000000000 --- a/packages/agent-studio/builds/node.ts +++ /dev/null @@ -1,72 +0,0 @@ -// Code generated by 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 AgentStudioClient = ReturnType & AgentStudioNodeHelpers; - -import { gzipSync } from 'node:zlib'; - -import { createHmac } from 'node:crypto'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -import type { ClientOptions } from '@algolia/client-common'; - -import { createAgentStudioClient } from '../src/agentStudioClient'; - -export { apiClientVersion } from '../src/agentStudioClient'; - -export * from '../model'; - -import type { AgentStudioNodeHelpers } from '../model'; - -export function agentStudioClient( - appId: string, - apiKey: string, - options?: ClientOptions | undefined, -): AgentStudioClient { - if (!appId || typeof appId !== 'string') { - throw new Error('`appId` is missing.'); - } - - if (!apiKey || typeof apiKey !== 'string') { - throw new Error('`apiKey` is missing.'); - } - - return { - ...createAgentStudioClient({ - appId, - apiKey, - 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - forgeSecuredUserToken({ - secretKey, - secretKeyId, - userId, - expiresIn = 24 * 3600, // 24 hours - }: { - secretKey: string; - secretKeyId: string; - userId: string; - expiresIn?: number; - }): string { - const header = Buffer.from(JSON.stringify({ alg: 'HS256', typ: 'JWT', kid: secretKeyId })).toString('base64url'); - const payload = Buffer.from( - JSON.stringify({ sub: userId, exp: Math.floor(Date.now() / 1000) + expiresIn }), - ).toString('base64url'); - const signature = createHmac('sha256', secretKey).update(`${header}.${payload}`).digest('base64url'); - return `${header}.${payload}.${signature}`; - }, - }; -} diff --git a/packages/agent-studio/builds/worker.ts b/packages/agent-studio/builds/worker.ts deleted file mode 100644 index 29b0572ba..000000000 --- a/packages/agent-studio/builds/worker.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Code generated by 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 AgentStudioClient = ReturnType; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createFetchRequester } from '@algolia/requester-fetch'; - -import type { ClientOptions } from '@algolia/client-common'; - -import { createAgentStudioClient } from '../src/agentStudioClient'; - -export { apiClientVersion } from '../src/agentStudioClient'; - -export * from '../model'; - -export function agentStudioClient( - appId: string, - apiKey: string, - options?: ClientOptions | undefined, -): AgentStudioClient { - if (!appId || typeof appId !== 'string') { - throw new Error('`appId` is missing.'); - } - - if (!apiKey || typeof apiKey !== 'string') { - throw new Error('`apiKey` is missing.'); - } - - const { compression: _compression, ...workerOptions } = options || {}; - - return { - ...createAgentStudioClient({ - appId, - apiKey, - timeouts: { - connect: 25000, - read: 25000, - write: 25000, - }, - logger: createNullLogger(), - requester: createFetchRequester(), - algoliaAgents: [{ segment: 'Worker' }], - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - ...workerOptions, - }), - }; -} diff --git a/packages/agent-studio/index.d.ts b/packages/agent-studio/index.d.ts deleted file mode 100644 index e81a1cd3e..000000000 --- a/packages/agent-studio/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/node'; diff --git a/packages/agent-studio/index.js b/packages/agent-studio/index.js deleted file mode 100644 index 21e26aad3..000000000 --- a/packages/agent-studio/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/agent-studio/model/advancedSyntaxFeatures.ts b/packages/agent-studio/model/advancedSyntaxFeatures.ts deleted file mode 100644 index e606d6380..000000000 --- a/packages/agent-studio/model/advancedSyntaxFeatures.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * AdvancedSyntaxFeatures. - */ -export type AdvancedSyntaxFeatures = 'exactPhrase' | 'excludeWords'; diff --git a/packages/agent-studio/model/agentCompletionAlgoliaParams.ts b/packages/agent-studio/model/agentCompletionAlgoliaParams.ts deleted file mode 100644 index ca15cbd63..000000000 --- a/packages/agent-studio/model/agentCompletionAlgoliaParams.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { SearchParametersOverrides } from './searchParametersOverrides'; - -export type AgentCompletionAlgoliaParams = { - mcpServers?: { [key: string]: { [key: string]: { [key: string]: string } } } | undefined; - - searchParameters?: { [key: string]: SearchParametersOverrides } | null | undefined; -}; diff --git a/packages/agent-studio/model/agentCompletionRequest.ts b/packages/agent-studio/model/agentCompletionRequest.ts deleted file mode 100644 index fe7ab0be1..000000000 --- a/packages/agent-studio/model/agentCompletionRequest.ts +++ /dev/null @@ -1,26 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AgentCompletionAlgoliaParams } from './agentCompletionAlgoliaParams'; -import type { AgentTestConfiguration } from './agentTestConfiguration'; -import type { MessagesUnion } from './messagesUnion'; - -/** - * Request model for creating a completion for an assistant. - */ -export type AgentCompletionRequest = { - configuration?: AgentTestConfiguration | undefined; - - messages?: MessagesUnion | null | undefined; - - /** - * Optional conversation id. - */ - id?: string | undefined; - - algolia?: AgentCompletionAlgoliaParams | undefined; - - /** - * Approval decisions for pending tool calls keyed by toolCallId. - */ - toolApprovals?: Record | undefined; -}; diff --git a/packages/agent-studio/model/agentConfigCreate.ts b/packages/agent-studio/model/agentConfigCreate.ts deleted file mode 100644 index 15e6e46c9..000000000 --- a/packages/agent-studio/model/agentConfigCreate.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ToolConfigInput } from './toolConfigInput'; - -export type AgentConfigCreate = { - name: string; - - description?: string | undefined; - - providerId?: string | undefined; - - model?: string | undefined; - - /** - * The agent prompt: defines the agent\'s role, tone, and goals. Guides how it answers using the provided context. Corresponds to the \'Agent prompt\' field in the dashboard. - */ - instructions: string; - - /** - * The system prompt: defines system-level rules and constraints. Guides how the agent uses tools, features, and generates context. Prepended before `instructions` in the final prompt sent to the LLM. Typically injected by an agent template — modify with caution, as changes may affect behavior, tool usage, or response accuracy. Corresponds to the \'System prompt\' field in the dashboard. - */ - systemPrompt?: string | undefined; - - templateType?: string | undefined; - - config?: { [key: string]: any } | undefined; - - tools?: Array | undefined; -}; diff --git a/packages/agent-studio/model/agentConfigUpdate.ts b/packages/agent-studio/model/agentConfigUpdate.ts deleted file mode 100644 index 6f16015ee..000000000 --- a/packages/agent-studio/model/agentConfigUpdate.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ToolConfigInput } from './toolConfigInput'; - -export type AgentConfigUpdate = { - name?: string | null | undefined; - - description?: string | null | undefined; - - providerId?: string | null | undefined; - - model?: string | null | undefined; - - /** - * The agent prompt: defines the agent\'s role, tone, and goals. Guides how it answers using the provided context. Corresponds to the \'Agent prompt\' field in the dashboard. - */ - instructions?: string | null | undefined; - - /** - * The system prompt: defines system-level rules and constraints. Guides how the agent uses tools, features, and generates context. Prepended before `instructions` in the final prompt sent to the LLM. Typically injected by an agent template — modify with caution, as changes may affect behavior, tool usage, or response accuracy. Corresponds to the \'System prompt\' field in the dashboard. - */ - systemPrompt?: string | null | undefined; - - config?: { [key: string]: any } | null | undefined; - - tools?: Array | null | undefined; - - templateType?: string | null | undefined; -}; diff --git a/packages/agent-studio/model/agentStatus.ts b/packages/agent-studio/model/agentStatus.ts deleted file mode 100644 index 7e93da891..000000000 --- a/packages/agent-studio/model/agentStatus.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 AgentStatus = 'draft' | 'published'; diff --git a/packages/agent-studio/model/agentTestConfiguration.ts b/packages/agent-studio/model/agentTestConfiguration.ts deleted file mode 100644 index 360c7af6f..000000000 --- a/packages/agent-studio/model/agentTestConfiguration.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ToolConfigInput } from './toolConfigInput'; - -/** - * Dynamic configuration for testing agents. - */ -export type AgentTestConfiguration = { - id?: string | undefined; - - providerId?: string | undefined; - - model?: string | undefined; - - instructions: string; - - systemPrompt?: string | undefined; - - config: { [key: string]: any }; - - tools: Array; -}; diff --git a/packages/agent-studio/model/agentWithVersionResponse.ts b/packages/agent-studio/model/agentWithVersionResponse.ts deleted file mode 100644 index 0fb12a2c8..000000000 --- a/packages/agent-studio/model/agentWithVersionResponse.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AgentStatus } from './agentStatus'; -import type { ToolConfigInput } from './toolConfigInput'; - -export type AgentWithVersionResponse = { - id: string; - - name: string; - - description: string | null; - - status: AgentStatus; - - providerId: string | null; - - model?: string | null | undefined; - - instructions: string; - - systemPrompt?: string | null | undefined; - - config: { [key: string]: any }; - - tools?: Array | undefined; - - templateType?: string | null | undefined; - - createdAt: string; - - updatedAt: string | null; - - lastUsedAt: string | null; -}; diff --git a/packages/agent-studio/model/algoliaDisplayResultsToolConfig.ts b/packages/agent-studio/model/algoliaDisplayResultsToolConfig.ts deleted file mode 100644 index 70f45e952..000000000 --- a/packages/agent-studio/model/algoliaDisplayResultsToolConfig.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 the algolia_display_results tool. - */ -export type AlgoliaDisplayResultsToolConfig = { - name?: string | undefined; - - type: string; - - minGroups?: number | undefined; - - maxGroups?: number | undefined; - - minResultsPerGroup?: number | undefined; - - maxResultsPerGroup?: number | undefined; -}; diff --git a/packages/agent-studio/model/algoliaRecommendToolConfigInput.ts b/packages/agent-studio/model/algoliaRecommendToolConfigInput.ts deleted file mode 100644 index e5e2af85d..000000000 --- a/packages/agent-studio/model/algoliaRecommendToolConfigInput.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AlgoliaRecommendToolIndexConfig } from './algoliaRecommendToolIndexConfig'; - -/** - * Configuration for the Algolia Recommend tool. Allows specifying recommend models and related parameters. - */ -export type AlgoliaRecommendToolConfigInput = { - name: string; - - type: string; - - allowedConfigs?: Array | undefined; - - predefinedRecommendParameters?: { [key: string]: any } | undefined; -}; diff --git a/packages/agent-studio/model/algoliaRecommendToolIndexConfig.ts b/packages/agent-studio/model/algoliaRecommendToolIndexConfig.ts deleted file mode 100644 index 70b679c50..000000000 --- a/packages/agent-studio/model/algoliaRecommendToolIndexConfig.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by 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 AlgoliaRecommendToolIndexConfig = { - index: string; - - modelName: string; - - description?: string | undefined; -}; diff --git a/packages/agent-studio/model/algoliaSearchToolConfig.ts b/packages/agent-studio/model/algoliaSearchToolConfig.ts deleted file mode 100644 index cce206b13..000000000 --- a/packages/agent-studio/model/algoliaSearchToolConfig.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AlgoliaSearchToolIndexConfig } from './algoliaSearchToolIndexConfig'; - -export type AlgoliaSearchToolConfig = { - name: string; - - type: string; - - indices: Array; -}; diff --git a/packages/agent-studio/model/algoliaSearchToolIndexConfig.ts b/packages/agent-studio/model/algoliaSearchToolIndexConfig.ts deleted file mode 100644 index adca47bc3..000000000 --- a/packages/agent-studio/model/algoliaSearchToolIndexConfig.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { IndexSearchParameters } from './indexSearchParameters'; -import type { SearchParameters } from './searchParameters'; - -export type AlgoliaSearchToolIndexConfig = { - index: string; - - description: string; - - enhancedDescription?: string | undefined; - - searchParameters?: SearchParameters | null | undefined; - - searchControls?: IndexSearchParameters | null | undefined; -}; diff --git a/packages/agent-studio/model/allowedDomainBulkDelete.ts b/packages/agent-studio/model/allowedDomainBulkDelete.ts deleted file mode 100644 index caecb8ccb..000000000 --- a/packages/agent-studio/model/allowedDomainBulkDelete.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 bulk delete by IDs. - */ -export type AllowedDomainBulkDelete = { - /** - * IDs of allowed domain records to delete. - */ - domainIds: Array; -}; diff --git a/packages/agent-studio/model/allowedDomainBulkInsert.ts b/packages/agent-studio/model/allowedDomainBulkInsert.ts deleted file mode 100644 index ba36d4ba9..000000000 --- a/packages/agent-studio/model/allowedDomainBulkInsert.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 bulk insert. - */ -export type AllowedDomainBulkInsert = { - /** - * List of domain patterns to add. - */ - domains: Array; -}; diff --git a/packages/agent-studio/model/allowedDomainCreate.ts b/packages/agent-studio/model/allowedDomainCreate.ts deleted file mode 100644 index 8aed46333..000000000 --- a/packages/agent-studio/model/allowedDomainCreate.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 to add a single allowed domain. - */ -export type AllowedDomainCreate = { - /** - * Domain or pattern, e.g. https://app.example.com or *.example.com. - */ - domain: string; -}; diff --git a/packages/agent-studio/model/allowedDomainListResponse.ts b/packages/agent-studio/model/allowedDomainListResponse.ts deleted file mode 100644 index 9d1542a07..000000000 --- a/packages/agent-studio/model/allowedDomainListResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AllowedDomainResponse } from './allowedDomainResponse'; - -/** - * List of allowed domains for an application. - */ -export type AllowedDomainListResponse = { - domains: Array; -}; diff --git a/packages/agent-studio/model/allowedDomainResponse.ts b/packages/agent-studio/model/allowedDomainResponse.ts deleted file mode 100644 index 701805338..000000000 --- a/packages/agent-studio/model/allowedDomainResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Single allowed domain in API responses. - */ -export type AllowedDomainResponse = { - id: string; - - appId: string; - - agentId: string; - - domain: string; - - createdAt: string; - - updatedAt: string; -}; diff --git a/packages/agent-studio/model/alternativesAsExact.ts b/packages/agent-studio/model/alternativesAsExact.ts deleted file mode 100644 index 52738a65d..000000000 --- a/packages/agent-studio/model/alternativesAsExact.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * AlternativesAsExact. - */ -export type AlternativesAsExact = 'ignorePlurals' | 'singleWordSynonym' | 'multiWordsSynonym' | 'ignoreConjugations'; diff --git a/packages/agent-studio/model/anthropicProviderInput.ts b/packages/agent-studio/model/anthropicProviderInput.ts deleted file mode 100644 index f39b7d2b8..000000000 --- a/packages/agent-studio/model/anthropicProviderInput.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Anthropic-specific provider input. - */ -export type AnthropicProviderInput = { - apiKey: string; - - baseUrl?: string | null | undefined; -}; diff --git a/packages/agent-studio/model/applicationConfigPatch.ts b/packages/agent-studio/model/applicationConfigPatch.ts deleted file mode 100644 index a539cfc8b..000000000 --- a/packages/agent-studio/model/applicationConfigPatch.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 ApplicationConfigPatch = { - /** - * Maximum number of days to retain data. Valid values: [0, 30, 60, 90]. - */ - maxRetentionDays?: number | null | undefined; -}; diff --git a/packages/agent-studio/model/applicationConfigResponse.ts b/packages/agent-studio/model/applicationConfigResponse.ts deleted file mode 100644 index 989c34c26..000000000 --- a/packages/agent-studio/model/applicationConfigResponse.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by 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 ApplicationConfigResponse = { - maxRetentionDays: number; -}; diff --git a/packages/agent-studio/model/aroundPrecisionUnion.ts b/packages/agent-studio/model/aroundPrecisionUnion.ts deleted file mode 100644 index f497fa6a4..000000000 --- a/packages/agent-studio/model/aroundPrecisionUnion.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 AroundPrecisionUnion = number | Array<{ [key: string]: number }>; diff --git a/packages/agent-studio/model/aroundRadiusUnion.ts b/packages/agent-studio/model/aroundRadiusUnion.ts deleted file mode 100644 index 59cd49bf1..000000000 --- a/packages/agent-studio/model/aroundRadiusUnion.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 AroundRadiusUnion = number | string; diff --git a/packages/agent-studio/model/assistantMessageV4.ts b/packages/agent-studio/model/assistantMessageV4.ts deleted file mode 100644 index 595d5e534..000000000 --- a/packages/agent-studio/model/assistantMessageV4.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AssistantPartV4 } from './assistantPartV4'; -import type { ToolInvocationV4 } from './toolInvocationV4'; - -export type AssistantMessageV4 = { - id?: string | undefined; - - role: string; - - content: string; - - parts?: Array | undefined; - - toolInvocations?: Array | null | undefined; -}; diff --git a/packages/agent-studio/model/assistantMessageV5.ts b/packages/agent-studio/model/assistantMessageV5.ts deleted file mode 100644 index 2b9d32539..000000000 --- a/packages/agent-studio/model/assistantMessageV5.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AssistantPartV5 } from './assistantPartV5'; - -export type AssistantMessageV5 = { - id?: string | undefined; - - role: string; - - parts?: Array | undefined; -}; diff --git a/packages/agent-studio/model/assistantPartV4.ts b/packages/agent-studio/model/assistantPartV4.ts deleted file mode 100644 index 18220fb81..000000000 --- a/packages/agent-studio/model/assistantPartV4.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ReasoningPartV4 } from './reasoningPartV4'; -import type { StepStartPartV4 } from './stepStartPartV4'; -import type { TextPartV4 } from './textPartV4'; -import type { ToolInvocationPartV4 } from './toolInvocationPartV4'; - -export type AssistantPartV4 = StepStartPartV4 | ReasoningPartV4 | TextPartV4 | ToolInvocationPartV4; diff --git a/packages/agent-studio/model/assistantPartV5.ts b/packages/agent-studio/model/assistantPartV5.ts deleted file mode 100644 index bc0723607..000000000 --- a/packages/agent-studio/model/assistantPartV5.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ReasoningPartV5 } from './reasoningPartV5'; -import type { StepStartPartV5 } from './stepStartPartV5'; -import type { TextPartV5 } from './textPartV5'; -import type { ToolPartV5 } from './toolPartV5'; - -export type AssistantPartV5 = StepStartPartV5 | TextPartV5 | ReasoningPartV5 | ToolPartV5; diff --git a/packages/agent-studio/model/azureOpenAIProviderInput.ts b/packages/agent-studio/model/azureOpenAIProviderInput.ts deleted file mode 100644 index 23bf102b1..000000000 --- a/packages/agent-studio/model/azureOpenAIProviderInput.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Azure OpenAI-specific provider input. - */ -export type AzureOpenAIProviderInput = { - apiKey: string; - - azureEndpoint: string; - - /** - * Azure model deployment name is required. - */ - azureDeployment: string; - - apiVersion?: string | null | undefined; -}; diff --git a/packages/agent-studio/model/baseProviderInput.ts b/packages/agent-studio/model/baseProviderInput.ts deleted file mode 100644 index 656e95348..000000000 --- a/packages/agent-studio/model/baseProviderInput.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Base input that all providers must have. - */ -export type BaseProviderInput = { - apiKey: string; -}; diff --git a/packages/agent-studio/model/clientMethodProps.ts b/packages/agent-studio/model/clientMethodProps.ts deleted file mode 100644 index 9cf778733..000000000 --- a/packages/agent-studio/model/clientMethodProps.ts +++ /dev/null @@ -1,502 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AgentCompletionRequest } from '../model/agentCompletionRequest'; -import type { AgentConfigUpdate } from '../model/agentConfigUpdate'; -import type { AllowedDomainBulkDelete } from '../model/allowedDomainBulkDelete'; -import type { AllowedDomainBulkInsert } from '../model/allowedDomainBulkInsert'; -import type { AllowedDomainCreate } from '../model/allowedDomainCreate'; -import type { CompatibilityMode } from '../model/compatibilityMode'; -import type { ProviderAuthenticationPatch } from '../model/providerAuthenticationPatch'; -import type { SecretKeyPatch } from '../model/secretKeyPatch'; - -/** - * Properties for the `bulkCreateAllowedDomains` method. - */ -export type BulkCreateAllowedDomainsProps = { - /** - * The agentId. - */ - agentId: string; - allowedDomainBulkInsert: AllowedDomainBulkInsert; -}; - -/** - * Properties for the `bulkDeleteAllowedDomains` method. - */ -export type BulkDeleteAllowedDomainsProps = { - /** - * The agentId. - */ - agentId: string; - allowedDomainBulkDelete: AllowedDomainBulkDelete; -}; - -/** - * Properties for the `createAgentAllowedDomain` method. - */ -export type CreateAgentAllowedDomainProps = { - /** - * The agentId. - */ - agentId: string; - allowedDomainCreate: AllowedDomainCreate; -}; - -/** - * Properties for the `createAgentCompletion` method. - */ -export type CreateAgentCompletionProps = { - /** - * The agentId. - */ - agentId: string; - /** - * Compatibility mode for the completion API. - */ - compatibilityMode: CompatibilityMode; - agentCompletionRequest: AgentCompletionRequest; - /** - * Whether to stream the response or not. - */ - stream?: boolean | undefined; - /** - * Use cached responses if available. - */ - cache?: boolean | undefined; - /** - * Set to false to disable memory (enabled by default). - */ - memory?: boolean | undefined; - /** - * Set to false to skip analytics for this completion (default: true). Disables Agent Studio BigQuery analytics, Algolia search analytics, click analytics, and query-suggestions training. Useful for offline-eval workflows. - */ - analytics?: boolean | undefined; - /** - * The X-Algolia-Secure-User-Token. - */ - xAlgoliaSecureUserToken?: string | undefined; -}; - -/** - * Properties for the `customDelete` method. - */ -export type CustomDeleteProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customGet` method. - */ -export type CustomGetProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customPost` method. - */ -export type CustomPostProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `customPut` method. - */ -export type CustomPutProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `deleteAgent` method. - */ -export type DeleteAgentProps = { - /** - * The agentId. - */ - agentId: string; -}; - -/** - * Properties for the `deleteAgentConversations` method. - */ -export type DeleteAgentConversationsProps = { - /** - * The agentId. - */ - agentId: string; - /** - * Filter conversations created after this date (format: YYYY-MM-DD). - */ - startDate?: string | undefined; - /** - * Filter conversations created before this date (format: YYYY-MM-DD). - */ - endDate?: string | undefined; -}; - -/** - * Properties for the `deleteAllowedDomain` method. - */ -export type DeleteAllowedDomainProps = { - /** - * The domainId. - */ - domainId: string; - /** - * The agentId. - */ - agentId: string; -}; - -/** - * Properties for the `deleteConversation` method. - */ -export type DeleteConversationProps = { - /** - * The conversationId. - */ - conversationId: string; - /** - * The agentId. - */ - agentId: string; -}; - -/** - * Properties for the `deleteProvider` method. - */ -export type DeleteProviderProps = { - /** - * The providerId. - */ - providerId: string; -}; - -/** - * Properties for the `deleteSecretKey` method. - */ -export type DeleteSecretKeyProps = { - /** - * The secretKeyId. - */ - secretKeyId: string; -}; - -/** - * Properties for the `deleteUserData` method. - */ -export type DeleteUserDataProps = { - /** - * The userToken. - */ - userToken: string; -}; - -/** - * Properties for the `exportConversations` method. - */ -export type ExportConversationsProps = { - /** - * The agentId. - */ - agentId: string; - /** - * Filter conversations created after this date (format: YYYY-MM-DD). - */ - startDate?: string | undefined; - /** - * Filter conversations created before this date (format: YYYY-MM-DD). - */ - endDate?: string | undefined; -}; - -/** - * Properties for the `getAgent` method. - */ -export type GetAgentProps = { - /** - * The agentId. - */ - agentId: string; -}; - -/** - * Properties for the `getAllowedDomain` method. - */ -export type GetAllowedDomainProps = { - /** - * The domainId. - */ - domainId: string; - /** - * The agentId. - */ - agentId: string; -}; - -/** - * Properties for the `getConversation` method. - */ -export type GetConversationProps = { - /** - * The conversationId. - */ - conversationId: string; - /** - * The agentId. - */ - agentId: string; - /** - * Include feedback for the conversation. - */ - includeFeedback?: boolean | undefined; - /** - * The X-Algolia-Secure-User-Token. - */ - xAlgoliaSecureUserToken?: string | undefined; -}; - -/** - * Properties for the `getProvider` method. - */ -export type GetProviderProps = { - /** - * The providerId. - */ - providerId: string; -}; - -/** - * Properties for the `getSecretKey` method. - */ -export type GetSecretKeyProps = { - /** - * The secretKeyId. - */ - secretKeyId: string; -}; - -/** - * Properties for the `getUserData` method. - */ -export type GetUserDataProps = { - /** - * The userToken. - */ - userToken: string; -}; - -/** - * Properties for the `invalidateAgentCache` method. - */ -export type InvalidateAgentCacheProps = { - /** - * The agentId. - */ - agentId: string; - /** - * Delete entries strictly before this date (exclusive, YYYY-MM-DD). - */ - before?: string | undefined; -}; - -/** - * Properties for the `listAgentAllowedDomains` method. - */ -export type ListAgentAllowedDomainsProps = { - /** - * The agentId. - */ - agentId: string; -}; - -/** - * Properties for the `listAgentConversations` method. - */ -export type ListAgentConversationsProps = { - /** - * The agentId. - */ - agentId: string; - /** - * Filter conversations created after this date (format: YYYY-MM-DD). - */ - startDate?: string | undefined; - /** - * Filter conversations created before this date (format: YYYY-MM-DD). - */ - endDate?: string | undefined; - /** - * Include feedback per conversation. - */ - includeFeedback?: boolean | undefined; - /** - * Filter by feedback value (requires includeFeedback=true). - */ - feedbackVote?: number | undefined; - /** - * Page number. - */ - page?: number | undefined; - /** - * Items per page. - */ - limit?: number | undefined; - /** - * The X-Algolia-Secure-User-Token. - */ - xAlgoliaSecureUserToken?: string | undefined; -}; - -/** - * Properties for the `listAgents` method. - */ -export type ListAgentsProps = { - /** - * Page number. - */ - page?: number | undefined; - /** - * Items per page. - */ - limit?: number | undefined; - /** - * Filter by provider id. - */ - providerId?: string | undefined; -}; - -/** - * Properties for the `listProviderModels` method. - */ -export type ListProviderModelsProps = { - /** - * The providerId. - */ - providerId: string; -}; - -/** - * Properties for the `listProviders` method. - */ -export type ListProvidersProps = { - /** - * Page number. - */ - page?: number | undefined; - /** - * Items per page. - */ - limit?: number | undefined; -}; - -/** - * Properties for the `listSecretKeys` method. - */ -export type ListSecretKeysProps = { - /** - * Page number. - */ - page?: number | undefined; - /** - * Items per page. - */ - limit?: number | undefined; -}; - -/** - * Properties for the `publishAgent` method. - */ -export type PublishAgentProps = { - /** - * The agentId. - */ - agentId: string; -}; - -/** - * Properties for the `unpublishAgent` method. - */ -export type UnpublishAgentProps = { - /** - * The agentId. - */ - agentId: string; -}; - -/** - * Properties for the `updateAgent` method. - */ -export type UpdateAgentProps = { - /** - * The agentId. - */ - agentId: string; - agentConfigUpdate: AgentConfigUpdate; -}; - -/** - * Properties for the `updateProvider` method. - */ -export type UpdateProviderProps = { - /** - * The providerId. - */ - providerId: string; - providerAuthenticationPatch: ProviderAuthenticationPatch; -}; - -/** - * Properties for the `updateSecretKey` method. - */ -export type UpdateSecretKeyProps = { - /** - * The secretKeyId. - */ - secretKeyId: string; - secretKeyPatch: SecretKeyPatch; -}; - -export type AgentStudioNodeHelpers = { - forgeSecuredUserToken: (opts: { - secretKey: string; - secretKeyId: string; - userId: string; - expiresIn?: number; - }) => string; -}; diff --git a/packages/agent-studio/model/clientSideToolConfig.ts b/packages/agent-studio/model/clientSideToolConfig.ts deleted file mode 100644 index 3c0d7aa9d..000000000 --- a/packages/agent-studio/model/clientSideToolConfig.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ClientToolsArgsSchema } from './clientToolsArgsSchema'; - -export type ClientSideToolConfig = { - name: string; - - type: string; - - description: string; - - inputSchema: ClientToolsArgsSchema; -}; diff --git a/packages/agent-studio/model/clientToolsArgsSchema.ts b/packages/agent-studio/model/clientToolsArgsSchema.ts deleted file mode 100644 index d2b66ea62..000000000 --- a/packages/agent-studio/model/clientToolsArgsSchema.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by 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 ClientToolsArgsSchema = { - type?: string | undefined; - - properties?: { [key: string]: any } | undefined; - - required?: Array | undefined; -}; diff --git a/packages/agent-studio/model/compatibilityMode.ts b/packages/agent-studio/model/compatibilityMode.ts deleted file mode 100644 index a2aa77783..000000000 --- a/packages/agent-studio/model/compatibilityMode.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Support Compatibility modes for the completion API. - */ -export type CompatibilityMode = 'ai-sdk-4' | 'ai-sdk-5'; diff --git a/packages/agent-studio/model/conversationBaseResponse.ts b/packages/agent-studio/model/conversationBaseResponse.ts deleted file mode 100644 index 798ead5d6..000000000 --- a/packages/agent-studio/model/conversationBaseResponse.ts +++ /dev/null @@ -1,37 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ConversationMetadata } from './conversationMetadata'; -import type { FeedbackResponse } from './feedbackResponse'; - -/** - * Lightweight response model without its messages. - */ -export type ConversationBaseResponse = { - id: string; - - agentId: string; - - title?: string | null | undefined; - - createdAt: string; - - updatedAt: string; - - lastActivityAt?: string | null | undefined; - - userToken?: string | null | undefined; - - isFromDashboard?: boolean | undefined; - - messageCount?: number | undefined; - - totalInputTokens?: number | undefined; - - totalOutputTokens?: number | undefined; - - totalTokens?: number | undefined; - - conversationMetadata?: ConversationMetadata | null | undefined; - - feedback?: Array | null | undefined; -}; diff --git a/packages/agent-studio/model/conversationFullResponse.ts b/packages/agent-studio/model/conversationFullResponse.ts deleted file mode 100644 index 30c40d001..000000000 --- a/packages/agent-studio/model/conversationFullResponse.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ConversationMetadata } from './conversationMetadata'; -import type { FeedbackResponse } from './feedbackResponse'; -import type { MessageResponse } from './messageResponse'; - -/** - * Response model for a conversation with all its messages. - */ -export type ConversationFullResponse = { - id: string; - - agentId: string; - - title?: string | null | undefined; - - createdAt: string; - - updatedAt: string; - - lastActivityAt?: string | null | undefined; - - userToken?: string | null | undefined; - - isFromDashboard?: boolean | undefined; - - messageCount?: number | undefined; - - totalInputTokens?: number | undefined; - - totalOutputTokens?: number | undefined; - - totalTokens?: number | undefined; - - conversationMetadata?: ConversationMetadata | null | undefined; - - feedback?: Array | null | undefined; - - messages: Array; -}; diff --git a/packages/agent-studio/model/conversationMetadata.ts b/packages/agent-studio/model/conversationMetadata.ts deleted file mode 100644 index ef470274c..000000000 --- a/packages/agent-studio/model/conversationMetadata.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Public metadata exposed on conversation responses. - */ -export type ConversationMetadata = { - cachedAt?: string | null | undefined; -}; diff --git a/packages/agent-studio/model/distinctUnion.ts b/packages/agent-studio/model/distinctUnion.ts deleted file mode 100644 index 3ea272cfb..000000000 --- a/packages/agent-studio/model/distinctUnion.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 DistinctUnion = boolean | number; diff --git a/packages/agent-studio/model/episode.ts b/packages/agent-studio/model/episode.ts deleted file mode 100644 index 83dcd5ec7..000000000 --- a/packages/agent-studio/model/episode.ts +++ /dev/null @@ -1,26 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Episodic memory schema following LangMem\'s OTAR pattern: Observation → Thoughts → Action → Result Captures complete interaction experiences for agent learning. See https://langchain-ai.github.io/langmem/concepts/conceptual_guide/#episodic-memory-past-experiences. - */ -export type Episode = { - /** - * What user wanted + key context (1-2 sentences). Include prior failed attempts if they informed the approach. - */ - observation: string; - - /** - * WHY this approach was chosen, which constraints/preferences drove decisions (1-3 sentences). Capture reasoning that applies to similar future scenarios. - */ - thoughts: string; - - /** - * What was done with PRECISE details (1-3 sentences). WITH tool calls: use arrow notation `tool(param:value) → feedback → tool(refined_param:new_value)`. WITHOUT tool calls: capture communication/workflow pattern. - */ - action: string; - - /** - * Learned pattern + effectiveness (1-3 sentences). What worked and WHY it\'s replicable. Note efficiency: multi-turn refinements, which results were relevant, what made final attempt succeed. Use strict `param:value` syntax for learnings. Format: \'For [context], use [param:value] because [reason]\'. - */ - result: string; -}; diff --git a/packages/agent-studio/model/errorBase.ts b/packages/agent-studio/model/errorBase.ts deleted file mode 100644 index f31be6046..000000000 --- a/packages/agent-studio/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/agent-studio/model/exactOnSingleWordQuery.ts b/packages/agent-studio/model/exactOnSingleWordQuery.ts deleted file mode 100644 index d01b358f6..000000000 --- a/packages/agent-studio/model/exactOnSingleWordQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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/agent-studio/model/facetFiltersUnion.ts b/packages/agent-studio/model/facetFiltersUnion.ts deleted file mode 100644 index a814e273c..000000000 --- a/packages/agent-studio/model/facetFiltersUnion.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 FacetFiltersUnion = Array | string; diff --git a/packages/agent-studio/model/facets.ts b/packages/agent-studio/model/facets.ts deleted file mode 100644 index 7fecebed3..000000000 --- a/packages/agent-studio/model/facets.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 = Record & { - order?: Array | null | undefined; -}; diff --git a/packages/agent-studio/model/facetsParam.ts b/packages/agent-studio/model/facetsParam.ts deleted file mode 100644 index 1aac82beb..000000000 --- a/packages/agent-studio/model/facetsParam.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by 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 facets parameter that is always hidden from the LLM. - */ -export type FacetsParam = { - exposed?: boolean | undefined; - - _default?: Array | null | undefined; -}; diff --git a/packages/agent-studio/model/facetsUnion.ts b/packages/agent-studio/model/facetsUnion.ts deleted file mode 100644 index 8427e47dc..000000000 --- a/packages/agent-studio/model/facetsUnion.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (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'; - -export type FacetsUnion = Array | Facets; diff --git a/packages/agent-studio/model/feedbackCreationRequest.ts b/packages/agent-studio/model/feedbackCreationRequest.ts deleted file mode 100644 index 9f422d304..000000000 --- a/packages/agent-studio/model/feedbackCreationRequest.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { VoteEnum } from './voteEnum'; - -/** - * Request model for creating a feedback entry. - */ -export type FeedbackCreationRequest = { - messageId: string; - - agentId: string; - - vote: VoteEnum; - - tags?: Array | undefined; - - notes?: string | undefined; -}; diff --git a/packages/agent-studio/model/feedbackResponse.ts b/packages/agent-studio/model/feedbackResponse.ts deleted file mode 100644 index ec4ffa674..000000000 --- a/packages/agent-studio/model/feedbackResponse.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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 FeedbackResponse = { - id: string; - - agentId: string; - - messageId: string; - - vote: number; - - tags: Array; - - notes?: string | null | undefined; - - model?: string | null | undefined; - - createdAt: string; - - updatedAt: string; -}; diff --git a/packages/agent-studio/model/hTTPValidationError.ts b/packages/agent-studio/model/hTTPValidationError.ts deleted file mode 100644 index ce4aba47f..000000000 --- a/packages/agent-studio/model/hTTPValidationError.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ValidationError } from './validationError'; - -export type HTTPValidationError = { - detail?: Array | undefined; -}; diff --git a/packages/agent-studio/model/ignorePluralsUnion.ts b/packages/agent-studio/model/ignorePluralsUnion.ts deleted file mode 100644 index 5e060c369..000000000 --- a/packages/agent-studio/model/ignorePluralsUnion.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (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 IgnorePluralsUnion = boolean | Array; diff --git a/packages/agent-studio/model/index.ts b/packages/agent-studio/model/index.ts deleted file mode 100644 index 10bec065d..000000000 --- a/packages/agent-studio/model/index.ts +++ /dev/null @@ -1,127 +0,0 @@ -// Code generated by 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 './agentCompletionAlgoliaParams'; -export * from './agentCompletionRequest'; -export * from './agentConfigCreate'; -export * from './agentConfigUpdate'; -export * from './agentStatus'; -export * from './agentTestConfiguration'; -export * from './agentWithVersionResponse'; -export * from './algoliaDisplayResultsToolConfig'; -export * from './algoliaRecommendToolConfigInput'; -export * from './algoliaRecommendToolIndexConfig'; -export * from './algoliaSearchToolConfig'; -export * from './algoliaSearchToolIndexConfig'; -export * from './allowedDomainBulkDelete'; -export * from './allowedDomainBulkInsert'; -export * from './allowedDomainCreate'; -export * from './allowedDomainListResponse'; -export * from './allowedDomainResponse'; -export * from './alternativesAsExact'; -export * from './anthropicProviderInput'; -export * from './applicationConfigPatch'; -export * from './applicationConfigResponse'; -export * from './aroundPrecisionUnion'; -export * from './aroundRadiusUnion'; -export * from './assistantMessageV4'; -export * from './assistantMessageV5'; -export * from './assistantPartV4'; -export * from './assistantPartV5'; -export * from './azureOpenAIProviderInput'; -export * from './baseProviderInput'; -export * from './clientMethodProps'; -export * from './clientSideToolConfig'; -export * from './clientToolsArgsSchema'; -export * from './compatibilityMode'; -export * from './conversationBaseResponse'; -export * from './conversationFullResponse'; -export * from './conversationMetadata'; -export * from './distinctUnion'; -export * from './episode'; -export * from './errorBase'; -export * from './exactOnSingleWordQuery'; -export * from './facetFiltersUnion'; -export * from './facets'; -export * from './facetsParam'; -export * from './facetsUnion'; -export * from './feedbackCreationRequest'; -export * from './feedbackResponse'; -export * from './hTTPValidationError'; -export * from './ignorePluralsUnion'; -export * from './indexSearchParameters'; -export * from './insideBoundingBoxUnion'; -export * from './insidePolygonUnion'; -export * from './locationItemUnion'; -export * from './mcpServerToolConfig'; -export * from './mcpToolConfig'; -export * from './memoryRecord'; -export * from './memoryType'; -export * from './messagePart'; -export * from './messageResponse'; -export * from './messageRole'; -export * from './messagesUnion'; -export * from './messageV4'; -export * from './messageV5'; -export * from './numberParam'; -export * from './numberParamConstraint'; -export * from './numericFiltersUnion'; -export * from './openAICompatibleProviderInput'; -export * from './openAIProviderInput'; -export * from './optionalFiltersUnion'; -export * from './optionalWordsUnion'; -export * from './paginatedAgentsResponse'; -export * from './paginatedConversationsResponse'; -export * from './paginatedProviderAuthenticationsResponse'; -export * from './paginatedSecretKeysResponse'; -export * from './paginationMetadata'; -export * from './providerAuthenticationCreate'; -export * from './providerAuthenticationPatch'; -export * from './providerAuthenticationResponse'; -export * from './providerInput'; -export * from './providerInputNullable'; -export * from './providerName'; -export * from './queryType'; -export * from './reasoningPart'; -export * from './reasoningPartV4'; -export * from './reasoningPartV5'; -export * from './removeStopWordsUnion'; -export * from './removeWordsIfNoResults'; -export * from './reRankingApplyFilterUnion'; -export * from './searchParameters'; -export * from './searchParametersOverrides'; -export * from './secretKeyCreate'; -export * from './secretKeyPatch'; -export * from './secretKeyResponse'; -export * from './startPart'; -export * from './startStepPart'; -export * from './stepStartPartV4'; -export * from './stepStartPartV5'; -export * from './stringArrayParam'; -export * from './stringArrayParamConstraint'; -export * from './supportedLanguage'; -export * from './tagFiltersUnion'; -export * from './textParam'; -export * from './textPart'; -export * from './textPartV4'; -export * from './textPartV5'; -export * from './toolApprovalRequestPart'; -export * from './toolCallPart'; -export * from './toolConfig'; -export * from './toolConfigInput'; -export * from './toolInvocationPartV4'; -export * from './toolInvocationV4'; -export * from './toolPartV5'; -export * from './toolResultOutput'; -export * from './toolResultOutputType'; -export * from './toolResultPart'; -export * from './toolState'; -export * from './typoToleranceEnum'; -export * from './typoToleranceUnion'; -export * from './unknownToolConfig'; -export * from './userDataResponse'; -export * from './userMessageMetadataV5'; -export * from './userMessageV4'; -export * from './userMessageV5'; -export * from './validationError'; -export * from './voteEnum'; diff --git a/packages/agent-studio/model/indexSearchParameters.ts b/packages/agent-studio/model/indexSearchParameters.ts deleted file mode 100644 index 46e808099..000000000 --- a/packages/agent-studio/model/indexSearchParameters.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { FacetsParam } from './facetsParam'; -import type { NumberParam } from './numberParam'; -import type { StringArrayParam } from './stringArrayParam'; -import type { TextParam } from './textParam'; - -/** - * Structured search parameters configuration for an Algolia index. Each parameter controls whether it is exposed to the LLM, its default value, optional constraints, and merge behavior. - */ -export type IndexSearchParameters = { - query?: TextParam | null | undefined; - - hitsPerPage?: NumberParam | undefined; - - page?: NumberParam | undefined; - - attributesToRetrieve?: StringArrayParam | undefined; - - responseFields?: StringArrayParam | undefined; - - facets?: FacetsParam | null | undefined; - - custom?: { [key: string]: any } | null | undefined; -}; diff --git a/packages/agent-studio/model/insideBoundingBoxUnion.ts b/packages/agent-studio/model/insideBoundingBoxUnion.ts deleted file mode 100644 index 3b5cb45c5..000000000 --- a/packages/agent-studio/model/insideBoundingBoxUnion.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 InsideBoundingBoxUnion = string | Array>; diff --git a/packages/agent-studio/model/insidePolygonUnion.ts b/packages/agent-studio/model/insidePolygonUnion.ts deleted file mode 100644 index 49029c61c..000000000 --- a/packages/agent-studio/model/insidePolygonUnion.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 InsidePolygonUnion = string | Array>; diff --git a/packages/agent-studio/model/locationItemUnion.ts b/packages/agent-studio/model/locationItemUnion.ts deleted file mode 100644 index c8be5fe5d..000000000 --- a/packages/agent-studio/model/locationItemUnion.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 LocationItemUnion = string | number; diff --git a/packages/agent-studio/model/mcpServerToolConfig.ts b/packages/agent-studio/model/mcpServerToolConfig.ts deleted file mode 100644 index f81055045..000000000 --- a/packages/agent-studio/model/mcpServerToolConfig.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ToolConfig } from './toolConfig'; - -export type McpServerToolConfig = { - url: string; - - transport?: string | undefined; - - headers: { [key: string]: string }; - - name: string; - - type: string; - - /** - * Stable unique identifier for this MCP tool. - */ - id?: string | null | undefined; - - allowedTools?: { [key: string]: ToolConfig } | null | undefined; -}; diff --git a/packages/agent-studio/model/mcpToolConfig.ts b/packages/agent-studio/model/mcpToolConfig.ts deleted file mode 100644 index e2c1e0f9f..000000000 --- a/packages/agent-studio/model/mcpToolConfig.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by 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 McpToolConfig = { - requiresApproval?: boolean | null | undefined; - - alias?: string | null | undefined; -}; diff --git a/packages/agent-studio/model/memoryRecord.ts b/packages/agent-studio/model/memoryRecord.ts deleted file mode 100644 index 9c9354b53..000000000 --- a/packages/agent-studio/model/memoryRecord.ts +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { Episode } from './episode'; -import type { MemoryType } from './memoryType'; - -/** - * Universal storage model for all memory types (semantic, episodic). This is the ONLY model that touches storage (Algolia). Domain models (SemanticMemory, EpisodicMemory) are used for LLM extraction and converted to MemoryRecord before saving. See https://langchain-ai.github.io/langmem/concepts/conceptual_guide/#memory-types for memory type definitions. - */ -export type MemoryRecord = { - memoryType?: MemoryType | undefined; - - episode?: Episode | null | undefined; - - /** - * Self-contained, first-person memory for long-term recall. - */ - text: string; - - /** - * Verbatim conversation extract, not paraphrased. - */ - rawExtract: string; - - /** - * 5-20 free-form keywords: entities, context, search terms (any words). - */ - keywords?: Array | undefined; - - /** - * 2-4 topics ONLY from this list: [complaints, entertainment, family, feedback, finance, food, goals, health, history, hobbies, learning, praise, preferences, schedule, shopping, technical, travel, work]. - */ - topics?: Array | undefined; - - /** - * Arbitrary labels/themes for flexible categorization (e.g., \'Q1-goals\', \'paris-trip\', \'vip-customer\'). - */ - _tags?: Array | undefined; - - /** - * 3-5 natural phrases that should trigger this memory. - */ - recallTriggers?: Array | undefined; - - /** - * ObjectID of existing memory to update. Leave empty for new memory. - */ - objectID?: string | null | undefined; - - /** - * Application ID. - */ - appId?: string | undefined; - - /** - * Agent IDs with access: [\'agent1\'], [\'*\'] for all, [\'*\', \'-agent1\'] to exclude. - */ - agentIDs?: Array | undefined; - - /** - * User ID. - */ - userID?: string | undefined; - - /** - * Epoch seconds. - */ - createdAt?: number | undefined; - - /** - * Epoch seconds. - */ - updatedAt?: number | undefined; -}; diff --git a/packages/agent-studio/model/memoryType.ts b/packages/agent-studio/model/memoryType.ts deleted file mode 100644 index 5ba4aa586..000000000 --- a/packages/agent-studio/model/memoryType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Memory types implemented so far. Follows LangMem\'s ontology: https://langchain-ai.github.io/langmem/concepts/conceptual_guide/#memory-types. - */ -export type MemoryType = 'semantic' | 'episodic'; diff --git a/packages/agent-studio/model/messagePart.ts b/packages/agent-studio/model/messagePart.ts deleted file mode 100644 index 73ca4cd57..000000000 --- a/packages/agent-studio/model/messagePart.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ReasoningPart } from './reasoningPart'; -import type { StartPart } from './startPart'; -import type { StartStepPart } from './startStepPart'; -import type { TextPart } from './textPart'; -import type { ToolApprovalRequestPart } from './toolApprovalRequestPart'; -import type { ToolCallPart } from './toolCallPart'; -import type { ToolResultPart } from './toolResultPart'; - -export type MessagePart = - TextPart | ToolCallPart | ToolResultPart | StartPart | StartStepPart | ReasoningPart | ToolApprovalRequestPart; diff --git a/packages/agent-studio/model/messageResponse.ts b/packages/agent-studio/model/messageResponse.ts deleted file mode 100644 index 55595b216..000000000 --- a/packages/agent-studio/model/messageResponse.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { MessagePart } from './messagePart'; -import type { MessageRole } from './messageRole'; - -/** - * Response model for a message. - */ -export type MessageResponse = { - id: string; - - conversationId: string; - - role: MessageRole; - - parts: Array; - - createdAt: string; - - updatedAt: string; - - model?: string | null | undefined; - - inputTokens?: number | null | undefined; - - outputTokens?: number | null | undefined; - - turnContext?: { [key: string]: string } | null | undefined; -}; diff --git a/packages/agent-studio/model/messageRole.ts b/packages/agent-studio/model/messageRole.ts deleted file mode 100644 index fa3a0cbb4..000000000 --- a/packages/agent-studio/model/messageRole.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Role of a message in the conversation. - */ -export type MessageRole = 'user' | 'assistant'; diff --git a/packages/agent-studio/model/messageV4.ts b/packages/agent-studio/model/messageV4.ts deleted file mode 100644 index 906d1037f..000000000 --- a/packages/agent-studio/model/messageV4.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AssistantMessageV4 } from './assistantMessageV4'; -import type { UserMessageV4 } from './userMessageV4'; - -export type MessageV4 = UserMessageV4 | AssistantMessageV4; diff --git a/packages/agent-studio/model/messageV5.ts b/packages/agent-studio/model/messageV5.ts deleted file mode 100644 index 9edf6a1d5..000000000 --- a/packages/agent-studio/model/messageV5.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AssistantMessageV5 } from './assistantMessageV5'; -import type { UserMessageV5 } from './userMessageV5'; - -export type MessageV5 = UserMessageV5 | AssistantMessageV5; diff --git a/packages/agent-studio/model/messagesUnion.ts b/packages/agent-studio/model/messagesUnion.ts deleted file mode 100644 index 6723cc1d0..000000000 --- a/packages/agent-studio/model/messagesUnion.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { MessageV4 } from './messageV4'; -import type { MessageV5 } from './messageV5'; - -export type MessagesUnion = Array | Array; diff --git a/packages/agent-studio/model/numberParam.ts b/packages/agent-studio/model/numberParam.ts deleted file mode 100644 index 33a398fae..000000000 --- a/packages/agent-studio/model/numberParam.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { NumberParamConstraint } from './numberParamConstraint'; - -/** - * A number search parameter with exposure control and optional constraints. - */ -export type NumberParam = { - exposed: boolean; - - _default?: number | null | undefined; - - constraint?: NumberParamConstraint | null | undefined; -}; diff --git a/packages/agent-studio/model/numberParamConstraint.ts b/packages/agent-studio/model/numberParamConstraint.ts deleted file mode 100644 index 634bea75f..000000000 --- a/packages/agent-studio/model/numberParamConstraint.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Constraints for a number parameter. - */ -export type NumberParamConstraint = { - min?: number | null | undefined; - - max?: number | null | undefined; -}; diff --git a/packages/agent-studio/model/numericFiltersUnion.ts b/packages/agent-studio/model/numericFiltersUnion.ts deleted file mode 100644 index 23ff99610..000000000 --- a/packages/agent-studio/model/numericFiltersUnion.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 NumericFiltersUnion = string | Array; diff --git a/packages/agent-studio/model/openAICompatibleProviderInput.ts b/packages/agent-studio/model/openAICompatibleProviderInput.ts deleted file mode 100644 index 89f0db039..000000000 --- a/packages/agent-studio/model/openAICompatibleProviderInput.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * OpenAI-compatible provider input. Contrary to the OpenAIProviderInput, the base_url is required. A model is required to verify connectivity and get saved as the default model. This can later be changed at the Agent level. - */ -export type OpenAICompatibleProviderInput = { - apiKey: string; - - baseUrl: string; - - /** - * Default model for this provider. Used for validation and as fallback when no model is specified at agent level. - */ - defaultModel: string; -}; diff --git a/packages/agent-studio/model/openAIProviderInput.ts b/packages/agent-studio/model/openAIProviderInput.ts deleted file mode 100644 index 726ae5fff..000000000 --- a/packages/agent-studio/model/openAIProviderInput.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * OpenAI-specific provider input. - */ -export type OpenAIProviderInput = { - apiKey: string; - - baseUrl?: string | null | undefined; -}; diff --git a/packages/agent-studio/model/optionalFiltersUnion.ts b/packages/agent-studio/model/optionalFiltersUnion.ts deleted file mode 100644 index 888828352..000000000 --- a/packages/agent-studio/model/optionalFiltersUnion.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 OptionalFiltersUnion = string | Array; diff --git a/packages/agent-studio/model/optionalWordsUnion.ts b/packages/agent-studio/model/optionalWordsUnion.ts deleted file mode 100644 index 0b5564806..000000000 --- a/packages/agent-studio/model/optionalWordsUnion.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 OptionalWordsUnion = string | Array; diff --git a/packages/agent-studio/model/paginatedAgentsResponse.ts b/packages/agent-studio/model/paginatedAgentsResponse.ts deleted file mode 100644 index 81d7a774a..000000000 --- a/packages/agent-studio/model/paginatedAgentsResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AgentWithVersionResponse } from './agentWithVersionResponse'; -import type { PaginationMetadata } from './paginationMetadata'; - -export type PaginatedAgentsResponse = { - data: Array; - - pagination: PaginationMetadata; -}; diff --git a/packages/agent-studio/model/paginatedConversationsResponse.ts b/packages/agent-studio/model/paginatedConversationsResponse.ts deleted file mode 100644 index f64247b58..000000000 --- a/packages/agent-studio/model/paginatedConversationsResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ConversationBaseResponse } from './conversationBaseResponse'; -import type { PaginationMetadata } from './paginationMetadata'; - -export type PaginatedConversationsResponse = { - data: Array; - - pagination: PaginationMetadata; -}; diff --git a/packages/agent-studio/model/paginatedProviderAuthenticationsResponse.ts b/packages/agent-studio/model/paginatedProviderAuthenticationsResponse.ts deleted file mode 100644 index 1f9a47e2b..000000000 --- a/packages/agent-studio/model/paginatedProviderAuthenticationsResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { PaginationMetadata } from './paginationMetadata'; -import type { ProviderAuthenticationResponse } from './providerAuthenticationResponse'; - -export type PaginatedProviderAuthenticationsResponse = { - data: Array; - - pagination: PaginationMetadata; -}; diff --git a/packages/agent-studio/model/paginatedSecretKeysResponse.ts b/packages/agent-studio/model/paginatedSecretKeysResponse.ts deleted file mode 100644 index 5254591a1..000000000 --- a/packages/agent-studio/model/paginatedSecretKeysResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { PaginationMetadata } from './paginationMetadata'; -import type { SecretKeyResponse } from './secretKeyResponse'; - -export type PaginatedSecretKeysResponse = { - data: Array; - - pagination: PaginationMetadata; -}; diff --git a/packages/agent-studio/model/paginationMetadata.ts b/packages/agent-studio/model/paginationMetadata.ts deleted file mode 100644 index 37ecc1ed6..000000000 --- a/packages/agent-studio/model/paginationMetadata.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 PaginationMetadata = { - page: number; - - limit: number; - - totalCount: number; - - totalPages: number; -}; diff --git a/packages/agent-studio/model/providerAuthenticationCreate.ts b/packages/agent-studio/model/providerAuthenticationCreate.ts deleted file mode 100644 index d62f04639..000000000 --- a/packages/agent-studio/model/providerAuthenticationCreate.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ProviderInput } from './providerInput'; -import type { ProviderName } from './providerName'; - -export type ProviderAuthenticationCreate = { - name: string; - - providerName: ProviderName; - - input: ProviderInput; -}; diff --git a/packages/agent-studio/model/providerAuthenticationPatch.ts b/packages/agent-studio/model/providerAuthenticationPatch.ts deleted file mode 100644 index 78950c26e..000000000 --- a/packages/agent-studio/model/providerAuthenticationPatch.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ProviderInputNullable } from './providerInputNullable'; - -export type ProviderAuthenticationPatch = { - name?: string | null | undefined; - - input?: ProviderInputNullable | null | undefined; -}; diff --git a/packages/agent-studio/model/providerAuthenticationResponse.ts b/packages/agent-studio/model/providerAuthenticationResponse.ts deleted file mode 100644 index 66e8638ae..000000000 --- a/packages/agent-studio/model/providerAuthenticationResponse.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ProviderInput } from './providerInput'; - -export type ProviderAuthenticationResponse = { - id: string; - - name: string; - - providerName: string; - - input: ProviderInput; - - createdAt: string; - - updatedAt: string; - - lastUsedAt?: string | null | undefined; -}; diff --git a/packages/agent-studio/model/providerInput.ts b/packages/agent-studio/model/providerInput.ts deleted file mode 100644 index bb53acf58..000000000 --- a/packages/agent-studio/model/providerInput.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AnthropicProviderInput } from './anthropicProviderInput'; -import type { AzureOpenAIProviderInput } from './azureOpenAIProviderInput'; -import type { BaseProviderInput } from './baseProviderInput'; -import type { OpenAICompatibleProviderInput } from './openAICompatibleProviderInput'; -import type { OpenAIProviderInput } from './openAIProviderInput'; - -export type ProviderInput = - | OpenAIProviderInput - | AzureOpenAIProviderInput - | OpenAICompatibleProviderInput - | BaseProviderInput - | AnthropicProviderInput; diff --git a/packages/agent-studio/model/providerInputNullable.ts b/packages/agent-studio/model/providerInputNullable.ts deleted file mode 100644 index 3438ec1ca..000000000 --- a/packages/agent-studio/model/providerInputNullable.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AnthropicProviderInput } from './anthropicProviderInput'; -import type { AzureOpenAIProviderInput } from './azureOpenAIProviderInput'; -import type { BaseProviderInput } from './baseProviderInput'; -import type { OpenAICompatibleProviderInput } from './openAICompatibleProviderInput'; -import type { OpenAIProviderInput } from './openAIProviderInput'; - -export type ProviderInputNullable = - | OpenAIProviderInput - | AzureOpenAIProviderInput - | OpenAICompatibleProviderInput - | BaseProviderInput - | AnthropicProviderInput; diff --git a/packages/agent-studio/model/providerName.ts b/packages/agent-studio/model/providerName.ts deleted file mode 100644 index 1a21225a8..000000000 --- a/packages/agent-studio/model/providerName.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 ProviderName = 'openai' | 'azure_openai' | 'google_genai' | 'deepseek' | 'openai_compatible' | 'anthropic'; diff --git a/packages/agent-studio/model/queryType.ts b/packages/agent-studio/model/queryType.ts deleted file mode 100644 index 5c33be4a6..000000000 --- a/packages/agent-studio/model/queryType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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/agent-studio/model/reRankingApplyFilterUnion.ts b/packages/agent-studio/model/reRankingApplyFilterUnion.ts deleted file mode 100644 index 7a36ee39f..000000000 --- a/packages/agent-studio/model/reRankingApplyFilterUnion.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 ReRankingApplyFilterUnion = string | Array<{ [key: string]: any }>; diff --git a/packages/agent-studio/model/reasoningPart.ts b/packages/agent-studio/model/reasoningPart.ts deleted file mode 100644 index 48aa83421..000000000 --- a/packages/agent-studio/model/reasoningPart.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by 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 ReasoningPart = { - type: string; - - text: string; -}; diff --git a/packages/agent-studio/model/reasoningPartV4.ts b/packages/agent-studio/model/reasoningPartV4.ts deleted file mode 100644 index 71f7f1f18..000000000 --- a/packages/agent-studio/model/reasoningPartV4.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by 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 ReasoningPartV4 = { - type?: string | undefined; - - reasoning: string; -}; diff --git a/packages/agent-studio/model/reasoningPartV5.ts b/packages/agent-studio/model/reasoningPartV5.ts deleted file mode 100644 index d4e2408ce..000000000 --- a/packages/agent-studio/model/reasoningPartV5.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by 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 ReasoningPartV5 = { - type?: string | undefined; - - text: string; -}; diff --git a/packages/agent-studio/model/removeStopWordsUnion.ts b/packages/agent-studio/model/removeStopWordsUnion.ts deleted file mode 100644 index 2a73f6c8b..000000000 --- a/packages/agent-studio/model/removeStopWordsUnion.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (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 RemoveStopWordsUnion = boolean | Array; diff --git a/packages/agent-studio/model/removeWordsIfNoResults.ts b/packages/agent-studio/model/removeWordsIfNoResults.ts deleted file mode 100644 index 70e1aa5e7..000000000 --- a/packages/agent-studio/model/removeWordsIfNoResults.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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/agent-studio/model/searchParameters.ts b/packages/agent-studio/model/searchParameters.ts deleted file mode 100644 index 0e255e0d5..000000000 --- a/packages/agent-studio/model/searchParameters.ts +++ /dev/null @@ -1,160 +0,0 @@ -// Code generated by OpenAPI Generator (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 { AroundPrecisionUnion } from './aroundPrecisionUnion'; -import type { AroundRadiusUnion } from './aroundRadiusUnion'; -import type { DistinctUnion } from './distinctUnion'; -import type { ExactOnSingleWordQuery } from './exactOnSingleWordQuery'; -import type { FacetFiltersUnion } from './facetFiltersUnion'; -import type { FacetsUnion } from './facetsUnion'; -import type { IgnorePluralsUnion } from './ignorePluralsUnion'; -import type { InsideBoundingBoxUnion } from './insideBoundingBoxUnion'; -import type { InsidePolygonUnion } from './insidePolygonUnion'; -import type { NumericFiltersUnion } from './numericFiltersUnion'; -import type { OptionalFiltersUnion } from './optionalFiltersUnion'; -import type { OptionalWordsUnion } from './optionalWordsUnion'; -import type { QueryType } from './queryType'; -import type { ReRankingApplyFilterUnion } from './reRankingApplyFilterUnion'; -import type { RemoveStopWordsUnion } from './removeStopWordsUnion'; -import type { RemoveWordsIfNoResults } from './removeWordsIfNoResults'; -import type { SupportedLanguage } from './supportedLanguage'; -import type { TagFiltersUnion } from './tagFiltersUnion'; -import type { TypoToleranceUnion } from './typoToleranceUnion'; - -/** - * Algolia Search API parameters that can be predefined for the search tool. Reference: https://www.algolia.com/doc/api-reference/search-api-parameters/ The parameters that seemed irrelevant for the search tool have been commented out. Uses types from algoliasearch.search.models for better type safety. - */ -export type SearchParameters = { - queryType?: QueryType | null | undefined; - - similarQuery?: string | null | undefined; - - queryLanguages?: Array | null | undefined; - - advancedSyntax?: boolean | null | undefined; - - advancedSyntaxFeatures?: Array | null | undefined; - - alternativesAsExact?: Array | null | undefined; - - decompoundQuery?: boolean | null | undefined; - - typoTolerance?: TypoToleranceUnion | null | undefined; - - allowTyposOnNumericTokens?: boolean | null | undefined; - - minWordSizeFor1Typo?: number | null | undefined; - - minWordSizeFor2Typos?: number | null | undefined; - - disableTypoToleranceOnAttributes?: Array | null | undefined; - - filters?: string | null | undefined; - - facetFilters?: FacetFiltersUnion | null | undefined; - - facets?: FacetsUnion | null | undefined; - - maxValuesPerFacet?: number | null | undefined; - - maxFacetHits?: number | null | undefined; - - facetingAfterDistinct?: boolean | null | undefined; - - sortFacetValuesBy?: string | null | undefined; - - numericFilters?: NumericFiltersUnion | null | undefined; - - tagFilters?: TagFiltersUnion | null | undefined; - - sumOrFiltersScores?: boolean | null | undefined; - - aroundLatLng?: string | null | undefined; - - aroundLatLngViaIp?: boolean | null | undefined; - - aroundRadius?: AroundRadiusUnion | null | undefined; - - aroundPrecision?: AroundPrecisionUnion | null | undefined; - - minimumAroundRadius?: number | null | undefined; - - insideBoundingBox?: InsideBoundingBoxUnion | null | undefined; - - insidePolygon?: InsidePolygonUnion | null | undefined; - - attributesToRetrieve?: Array | null | undefined; - - attributesToSnippet?: Array | null | undefined; - - snippetEllipsisText?: string | null | undefined; - - restrictHighlightAndSnippetArrays?: boolean | null | undefined; - - page?: number | null | undefined; - - offset?: number | null | undefined; - - hitsPerPage?: number | null | undefined; - - length?: number | null | undefined; - - getRankingInfo?: boolean | null | undefined; - - relevancyStrictness?: number | null | undefined; - - minProximity?: number | null | undefined; - - attributeCriteriaComputedByMinProximity?: boolean | null | undefined; - - distinct?: DistinctUnion | null | undefined; - - enableRules?: boolean | null | undefined; - - enablePersonalization?: boolean | null | undefined; - - personalizationImpact?: number | null | undefined; - - enableAbTest?: boolean | null | undefined; - - enableReRanking?: boolean | null | undefined; - - reRankingApplyFilter?: ReRankingApplyFilterUnion | null | undefined; - - ruleContexts?: Array | null | undefined; - - removeStopWords?: RemoveStopWordsUnion | null | undefined; - - ignorePlurals?: IgnorePluralsUnion | null | undefined; - - removeWordsIfNoResults?: RemoveWordsIfNoResults | null | undefined; - - optionalWords?: OptionalWordsUnion | null | undefined; - - optionalFilters?: OptionalFiltersUnion | null | undefined; - - synonyms?: boolean | null | undefined; - - replaceSynonymsInHighlight?: boolean | null | undefined; - - analytics?: boolean | null | undefined; - - analyticsTags?: Array | null | undefined; - - clickAnalytics?: boolean | null | undefined; - - userToken?: string | null | undefined; - - restrictSearchableAttributes?: Array | null | undefined; - - disableExactOnAttributes?: Array | null | undefined; - - exactOnSingleWordQuery?: ExactOnSingleWordQuery | null | undefined; - - naturalLanguages?: Array | null | undefined; - - percentileComputation?: boolean | null | undefined; - - explain?: Array | null | undefined; -}; diff --git a/packages/agent-studio/model/searchParametersOverrides.ts b/packages/agent-studio/model/searchParametersOverrides.ts deleted file mode 100644 index 583cb9fa8..000000000 --- a/packages/agent-studio/model/searchParametersOverrides.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { DistinctUnion } from './distinctUnion'; -import type { OptionalFiltersUnion } from './optionalFiltersUnion'; - -/** - * Algolia Search API parameters that can be predefined for the search tool. Reference: https://www.algolia.com/doc/api-reference/search-api-parameters/ A subset of SearchParameters of specific params we allow for runtime override. - */ -export type SearchParametersOverrides = { - filters?: string | undefined; - - attributesToRetrieve?: Array | undefined; - - restrictSearchableAttributes?: Array | undefined; - - distinct?: DistinctUnion | null | undefined; - - userToken?: string | undefined; - - enablePersonalization?: boolean | undefined; - - personalizationImpact?: number | undefined; - - optionalFilters?: OptionalFiltersUnion | null | undefined; -}; diff --git a/packages/agent-studio/model/secretKeyCreate.ts b/packages/agent-studio/model/secretKeyCreate.ts deleted file mode 100644 index 1c07e4283..000000000 --- a/packages/agent-studio/model/secretKeyCreate.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Secret key creation payload. - */ -export type SecretKeyCreate = { - /** - * The name of the secret key. - */ - name: string; - - /** - * List of agent IDs this secret key is associated with. - */ - agentIds?: Array | undefined; -}; diff --git a/packages/agent-studio/model/secretKeyPatch.ts b/packages/agent-studio/model/secretKeyPatch.ts deleted file mode 100644 index 79fb46b02..000000000 --- a/packages/agent-studio/model/secretKeyPatch.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Secret key patch payload. - */ -export type SecretKeyPatch = { - /** - * The new name of the secret key. - */ - name?: string | null | undefined; - - /** - * Updated list of agent IDs this secret key is associated with. - */ - agentIds?: Array | null | undefined; -}; diff --git a/packages/agent-studio/model/secretKeyResponse.ts b/packages/agent-studio/model/secretKeyResponse.ts deleted file mode 100644 index cebc7ab32..000000000 --- a/packages/agent-studio/model/secretKeyResponse.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Code generated by 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 SecretKeyResponse = { - id: string; - - name: string; - - value: string; - - createdAt: string; - - updatedAt: string; - - lastUsedAt: string | null; - - isDefault?: boolean | undefined; - - agentIds: Array; -}; diff --git a/packages/agent-studio/model/startPart.ts b/packages/agent-studio/model/startPart.ts deleted file mode 100644 index 6992b9dbe..000000000 --- a/packages/agent-studio/model/startPart.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by 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 StartPart = { - type: string; -}; diff --git a/packages/agent-studio/model/startStepPart.ts b/packages/agent-studio/model/startStepPart.ts deleted file mode 100644 index c67feea43..000000000 --- a/packages/agent-studio/model/startStepPart.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by 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 StartStepPart = { - type: string; -}; diff --git a/packages/agent-studio/model/stepStartPartV4.ts b/packages/agent-studio/model/stepStartPartV4.ts deleted file mode 100644 index 0a89b9c0b..000000000 --- a/packages/agent-studio/model/stepStartPartV4.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by 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 StepStartPartV4 = { - type?: string | undefined; -}; diff --git a/packages/agent-studio/model/stepStartPartV5.ts b/packages/agent-studio/model/stepStartPartV5.ts deleted file mode 100644 index 22725a4c5..000000000 --- a/packages/agent-studio/model/stepStartPartV5.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by 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 StepStartPartV5 = { - type?: string | undefined; -}; diff --git a/packages/agent-studio/model/stringArrayParam.ts b/packages/agent-studio/model/stringArrayParam.ts deleted file mode 100644 index 4b96f1d70..000000000 --- a/packages/agent-studio/model/stringArrayParam.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { StringArrayParamConstraint } from './stringArrayParamConstraint'; - -/** - * A string array search parameter with exposure control, constraints, and merge behavior. - */ -export type StringArrayParam = { - exposed: boolean; - - _default?: Array | null | undefined; - - constraint?: StringArrayParamConstraint | null | undefined; - - merge?: boolean | null | undefined; -}; diff --git a/packages/agent-studio/model/stringArrayParamConstraint.ts b/packages/agent-studio/model/stringArrayParamConstraint.ts deleted file mode 100644 index 249773944..000000000 --- a/packages/agent-studio/model/stringArrayParamConstraint.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Constraints for a string array parameter. - */ -export type StringArrayParamConstraint = { - values?: Array | null | undefined; -}; diff --git a/packages/agent-studio/model/supportedLanguage.ts b/packages/agent-studio/model/supportedLanguage.ts deleted file mode 100644 index 85f2111cc..000000000 --- a/packages/agent-studio/model/supportedLanguage.ts +++ /dev/null @@ -1,74 +0,0 @@ -// Code generated by 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/agent-studio/model/tagFiltersUnion.ts b/packages/agent-studio/model/tagFiltersUnion.ts deleted file mode 100644 index d3d1288b6..000000000 --- a/packages/agent-studio/model/tagFiltersUnion.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 TagFiltersUnion = string | Array; diff --git a/packages/agent-studio/model/textParam.ts b/packages/agent-studio/model/textParam.ts deleted file mode 100644 index 3566966fe..000000000 --- a/packages/agent-studio/model/textParam.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by 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 text search parameter with exposure control. - */ -export type TextParam = { - exposed: boolean; - - _default?: string | null | undefined; -}; diff --git a/packages/agent-studio/model/textPart.ts b/packages/agent-studio/model/textPart.ts deleted file mode 100644 index edbc727a0..000000000 --- a/packages/agent-studio/model/textPart.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by 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 TextPart = { - type: string; - - text: string; -}; diff --git a/packages/agent-studio/model/textPartV4.ts b/packages/agent-studio/model/textPartV4.ts deleted file mode 100644 index 5b93f49f8..000000000 --- a/packages/agent-studio/model/textPartV4.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by 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 TextPartV4 = { - type?: string | undefined; - - text: string; -}; diff --git a/packages/agent-studio/model/textPartV5.ts b/packages/agent-studio/model/textPartV5.ts deleted file mode 100644 index 0e3e77ac2..000000000 --- a/packages/agent-studio/model/textPartV5.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by 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 TextPartV5 = { - type?: string | undefined; - - text: string; -}; diff --git a/packages/agent-studio/model/toolApprovalRequestPart.ts b/packages/agent-studio/model/toolApprovalRequestPart.ts deleted file mode 100644 index 46175a7a5..000000000 --- a/packages/agent-studio/model/toolApprovalRequestPart.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Code generated by 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 ToolApprovalRequestPart = { - type: string; - - toolCallId: string; - - toolName: string; - - args: any | null; - - description?: string | null | undefined; - - providerOptions?: { [key: string]: any } | null | undefined; - - argsHash?: string | null | undefined; - - appId?: string | null | undefined; -}; diff --git a/packages/agent-studio/model/toolCallPart.ts b/packages/agent-studio/model/toolCallPart.ts deleted file mode 100644 index dbd709f55..000000000 --- a/packages/agent-studio/model/toolCallPart.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by 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 ToolCallPart = { - type: string; - - toolCallId: string; - - toolName: string; - - args: any | null; - - requiresApproval?: boolean | null | undefined; - - providerOptions?: { [key: string]: any } | null | undefined; -}; diff --git a/packages/agent-studio/model/toolConfig.ts b/packages/agent-studio/model/toolConfig.ts deleted file mode 100644 index 334c649c7..000000000 --- a/packages/agent-studio/model/toolConfig.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { McpToolConfig } from './mcpToolConfig'; - -export type ToolConfig = McpToolConfig | boolean; diff --git a/packages/agent-studio/model/toolConfigInput.ts b/packages/agent-studio/model/toolConfigInput.ts deleted file mode 100644 index abc53a658..000000000 --- a/packages/agent-studio/model/toolConfigInput.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AlgoliaDisplayResultsToolConfig } from './algoliaDisplayResultsToolConfig'; -import type { AlgoliaRecommendToolConfigInput } from './algoliaRecommendToolConfigInput'; -import type { AlgoliaSearchToolConfig } from './algoliaSearchToolConfig'; -import type { ClientSideToolConfig } from './clientSideToolConfig'; -import type { McpServerToolConfig } from './mcpServerToolConfig'; -import type { UnknownToolConfig } from './unknownToolConfig'; - -export type ToolConfigInput = - | ClientSideToolConfig - | AlgoliaSearchToolConfig - | AlgoliaRecommendToolConfigInput - | AlgoliaDisplayResultsToolConfig - | McpServerToolConfig - | UnknownToolConfig; diff --git a/packages/agent-studio/model/toolInvocationPartV4.ts b/packages/agent-studio/model/toolInvocationPartV4.ts deleted file mode 100644 index 7d25c0481..000000000 --- a/packages/agent-studio/model/toolInvocationPartV4.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ToolInvocationV4 } from './toolInvocationV4'; - -export type ToolInvocationPartV4 = { - type?: string | undefined; - - toolInvocation: ToolInvocationV4; -}; diff --git a/packages/agent-studio/model/toolInvocationV4.ts b/packages/agent-studio/model/toolInvocationV4.ts deleted file mode 100644 index 31cd9a7d9..000000000 --- a/packages/agent-studio/model/toolInvocationV4.ts +++ /dev/null @@ -1,26 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Model for tool invocation in a Message. - */ -export type ToolInvocationV4 = { - toolCallId: string; - - toolName: string; - - args?: { [key: string]: any } | undefined; - - result?: { [key: string]: any } | undefined; - - step?: number | undefined; - - state?: string | undefined; - - providerOptions?: { [key: string]: any } | undefined; - - requiresApproval?: boolean | undefined; - - description?: string | undefined; - - argsHash?: string | undefined; -}; diff --git a/packages/agent-studio/model/toolPartV5.ts b/packages/agent-studio/model/toolPartV5.ts deleted file mode 100644 index 0e09b6fab..000000000 --- a/packages/agent-studio/model/toolPartV5.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ToolState } from './toolState'; - -/** - * Model for tool invocation in a Message. - */ -export type ToolPartV5 = { - type: string; - - toolCallId: string; - - state?: ToolState | undefined; - - input?: { [key: string]: any } | undefined; - - output?: { [key: string]: any } | undefined; - - errorText?: string | undefined; - - providerOptions?: { [key: string]: any } | undefined; - - requiresApproval?: boolean | undefined; - - description?: string | undefined; - - argsHash?: string | undefined; -}; diff --git a/packages/agent-studio/model/toolResultOutput.ts b/packages/agent-studio/model/toolResultOutput.ts deleted file mode 100644 index 156056ff4..000000000 --- a/packages/agent-studio/model/toolResultOutput.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ToolResultOutputType } from './toolResultOutputType'; - -export type ToolResultOutput = { - type: ToolResultOutputType; - - value: any | null; -}; diff --git a/packages/agent-studio/model/toolResultOutputType.ts b/packages/agent-studio/model/toolResultOutputType.ts deleted file mode 100644 index e1644adb2..000000000 --- a/packages/agent-studio/model/toolResultOutputType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 valid \'type\' of tool results. - */ -export type ToolResultOutputType = 'text' | 'json' | 'error-text' | 'error-json' | 'content'; diff --git a/packages/agent-studio/model/toolResultPart.ts b/packages/agent-studio/model/toolResultPart.ts deleted file mode 100644 index 90ade909d..000000000 --- a/packages/agent-studio/model/toolResultPart.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ToolResultOutput } from './toolResultOutput'; - -export type ToolResultPart = { - type: string; - - toolCallId: string; - - toolName: string; - - output: ToolResultOutput; - - providerOptions?: { [key: string]: any } | null | undefined; -}; diff --git a/packages/agent-studio/model/toolState.ts b/packages/agent-studio/model/toolState.ts deleted file mode 100644 index 0be567a9c..000000000 --- a/packages/agent-studio/model/toolState.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 ToolState = 'input-streaming' | 'input-available' | 'output-available' | 'output-error'; diff --git a/packages/agent-studio/model/typoToleranceEnum.ts b/packages/agent-studio/model/typoToleranceEnum.ts deleted file mode 100644 index fd97a0ed0..000000000 --- a/packages/agent-studio/model/typoToleranceEnum.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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' | 'true' | 'false'; diff --git a/packages/agent-studio/model/typoToleranceUnion.ts b/packages/agent-studio/model/typoToleranceUnion.ts deleted file mode 100644 index 979947acd..000000000 --- a/packages/agent-studio/model/typoToleranceUnion.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (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'; - -export type TypoToleranceUnion = boolean | TypoToleranceEnum; diff --git a/packages/agent-studio/model/unknownToolConfig.ts b/packages/agent-studio/model/unknownToolConfig.ts deleted file mode 100644 index ed778c81e..000000000 --- a/packages/agent-studio/model/unknownToolConfig.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Exists only to ensure that when you change branch from toolX to feat/toolY, your config stays valid. - */ -export type UnknownToolConfig = Record & { - name: string; - - type: string; -}; diff --git a/packages/agent-studio/model/userDataResponse.ts b/packages/agent-studio/model/userDataResponse.ts deleted file mode 100644 index faff01f06..000000000 --- a/packages/agent-studio/model/userDataResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ConversationFullResponse } from './conversationFullResponse'; -import type { MemoryRecord } from './memoryRecord'; - -export type UserDataResponse = { - conversations: Array; - - memories: Array; -}; diff --git a/packages/agent-studio/model/userMessageMetadataV5.ts b/packages/agent-studio/model/userMessageMetadataV5.ts deleted file mode 100644 index 647e8ec18..000000000 --- a/packages/agent-studio/model/userMessageMetadataV5.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Client-supplied metadata on a v5 user message. `turn_context` is namespaced so other callers can use `metadata` for unrelated purposes without collision. Unknown keys are preserved and ignored by this pipeline. Note: `turn_context` is deliberately typed `dict[str, Any]` (not `TurnContext`). The metadata is parsed eagerly with the request body, but cap/charset validation must be deferred to `extract_turn_context_v5` so the kill-switch (`TURN_CONTEXT_ENABLED=false`) can silently drop payloads instead of 422-ing. See `test_invalid_metadata_does_not_raise_at_model_construction`. - */ -export type UserMessageMetadataV5 = Record & { - turnContext?: { [key: string]: any } | undefined; -}; diff --git a/packages/agent-studio/model/userMessageV4.ts b/packages/agent-studio/model/userMessageV4.ts deleted file mode 100644 index f172363ff..000000000 --- a/packages/agent-studio/model/userMessageV4.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { TextPartV4 } from './textPartV4'; - -export type UserMessageV4 = { - id?: string | undefined; - - role: string; - - content: string; - - parts?: Array | undefined; - - annotations?: Array<{ [key: string]: any }> | undefined; -}; diff --git a/packages/agent-studio/model/userMessageV5.ts b/packages/agent-studio/model/userMessageV5.ts deleted file mode 100644 index 181701b46..000000000 --- a/packages/agent-studio/model/userMessageV5.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { TextPartV5 } from './textPartV5'; -import type { UserMessageMetadataV5 } from './userMessageMetadataV5'; - -export type UserMessageV5 = { - id?: string | undefined; - - role: string; - - parts?: Array | undefined; - - metadata?: UserMessageMetadataV5 | undefined; -}; diff --git a/packages/agent-studio/model/validationError.ts b/packages/agent-studio/model/validationError.ts deleted file mode 100644 index cf9d60125..000000000 --- a/packages/agent-studio/model/validationError.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { LocationItemUnion } from './locationItemUnion'; - -export type ValidationError = { - loc: Array; - - msg: string; - - type: string; - - input?: any | null | undefined; - - ctx?: Record | undefined; -}; diff --git a/packages/agent-studio/model/voteEnum.ts b/packages/agent-studio/model/voteEnum.ts deleted file mode 100644 index 194a0d7f5..000000000 --- a/packages/agent-studio/model/voteEnum.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 VoteEnum = 0 | 1; diff --git a/packages/agent-studio/package.json b/packages/agent-studio/package.json deleted file mode 100644 index aa66e39ea..000000000 --- a/packages/agent-studio/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "version": "1.1.0", - "repository": { - "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" - }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/packages/agent-studio#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/agent-studio", - "description": "JavaScript client for agent-studio", - "exports": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/builds/browser.js" - }, - "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", - "./dist/builds/*.js": "./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.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "26.1.2", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" - } -} diff --git a/packages/agent-studio/rollup.config.js b/packages/agent-studio/rollup.config.js deleted file mode 100644 index 60f86a86c..000000000 --- a/packages/agent-studio/rollup.config.js +++ /dev/null @@ -1,17 +0,0 @@ -export default [ - { - input: 'dist/builds/browser.min.js', - external: ['dom'], - cache: false, - output: { - esModule: false, - file: 'dist/builds/browser.umd.js', - name: '@algolia/agent-studio', - format: 'umd', - sourcemap: false, - globals: { - ['agentStudioClient']: 'agentStudioClient', - }, - }, - }, -]; diff --git a/packages/agent-studio/src/agentStudioClient.ts b/packages/agent-studio/src/agentStudioClient.ts deleted file mode 100644 index 8eaaff020..000000000 --- a/packages/agent-studio/src/agentStudioClient.ts +++ /dev/null @@ -1,3257 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - CreateClientOptions, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, - ServerSentEvent, - StreamEvent, -} from '@algolia/client-common'; -import { createAuth, createTransporter, getAlgoliaAgent, shuffle, validateRequired } from '@algolia/client-common'; - -import type { AgentConfigCreate } from '../model/agentConfigCreate'; -import type { AgentWithVersionResponse } from '../model/agentWithVersionResponse'; -import type { AllowedDomainListResponse } from '../model/allowedDomainListResponse'; -import type { AllowedDomainResponse } from '../model/allowedDomainResponse'; -import type { ApplicationConfigPatch } from '../model/applicationConfigPatch'; -import type { ApplicationConfigResponse } from '../model/applicationConfigResponse'; -import type { ConversationFullResponse } from '../model/conversationFullResponse'; -import type { FeedbackCreationRequest } from '../model/feedbackCreationRequest'; -import type { FeedbackResponse } from '../model/feedbackResponse'; -import type { PaginatedAgentsResponse } from '../model/paginatedAgentsResponse'; -import type { PaginatedConversationsResponse } from '../model/paginatedConversationsResponse'; -import type { PaginatedProviderAuthenticationsResponse } from '../model/paginatedProviderAuthenticationsResponse'; -import type { PaginatedSecretKeysResponse } from '../model/paginatedSecretKeysResponse'; -import type { ProviderAuthenticationCreate } from '../model/providerAuthenticationCreate'; -import type { ProviderAuthenticationResponse } from '../model/providerAuthenticationResponse'; -import type { SecretKeyCreate } from '../model/secretKeyCreate'; -import type { SecretKeyResponse } from '../model/secretKeyResponse'; -import type { UserDataResponse } from '../model/userDataResponse'; - -import type { - BulkCreateAllowedDomainsProps, - BulkDeleteAllowedDomainsProps, - CreateAgentAllowedDomainProps, - CreateAgentCompletionProps, - CustomDeleteProps, - CustomGetProps, - CustomPostProps, - CustomPutProps, - DeleteAgentConversationsProps, - DeleteAgentProps, - DeleteAllowedDomainProps, - DeleteConversationProps, - DeleteProviderProps, - DeleteSecretKeyProps, - DeleteUserDataProps, - ExportConversationsProps, - GetAgentProps, - GetAllowedDomainProps, - GetConversationProps, - GetProviderProps, - GetSecretKeyProps, - GetUserDataProps, - InvalidateAgentCacheProps, - ListAgentAllowedDomainsProps, - ListAgentConversationsProps, - ListAgentsProps, - ListProviderModelsProps, - ListProvidersProps, - ListSecretKeysProps, - PublishAgentProps, - UnpublishAgentProps, - UpdateAgentProps, - UpdateProviderProps, - UpdateSecretKeyProps, -} from '../model/clientMethodProps'; - -export const apiClientVersion = '1.1.0'; - -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 createAgentStudioClient({ - 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: 'AgentStudio', - 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 | undefined): 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; - } - }, - - /** - * Add multiple allowed domain patterns. Duplicates are skipped. - * - * Required API Key ACLs: - * - editSettings - * @param bulkCreateAllowedDomains - The bulkCreateAllowedDomains object. - * @param bulkCreateAllowedDomains.agentId - The agentId. - * @param bulkCreateAllowedDomains.allowedDomainBulkInsert - The allowedDomainBulkInsert object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - bulkCreateAllowedDomains( - { agentId, allowedDomainBulkInsert }: BulkCreateAllowedDomainsProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('agentId', 'bulkCreateAllowedDomains', agentId); - - validateRequired('allowedDomainBulkInsert', 'bulkCreateAllowedDomains', allowedDomainBulkInsert); - - validateRequired('allowedDomainBulkInsert.domains', 'bulkCreateAllowedDomains', allowedDomainBulkInsert.domains); - - const requestPath = '/agent-studio/1/agents/{agentId}/allowed-domains/bulk'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: allowedDomainBulkInsert, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Add multiple allowed domain patterns. Duplicates are skipped. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param bulkCreateAllowedDomains - The bulkCreateAllowedDomains object. - * @param bulkCreateAllowedDomains.agentId - The agentId. - * @param bulkCreateAllowedDomains.allowedDomainBulkInsert - The allowedDomainBulkInsert object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see bulkCreateAllowedDomains for the plain version. - */ - bulkCreateAllowedDomainsWithHTTPInfo( - { agentId, allowedDomainBulkInsert }: BulkCreateAllowedDomainsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'bulkCreateAllowedDomainsWithHTTPInfo', agentId); - - validateRequired('allowedDomainBulkInsert', 'bulkCreateAllowedDomainsWithHTTPInfo', allowedDomainBulkInsert); - - validateRequired( - 'allowedDomainBulkInsert.domains', - 'bulkCreateAllowedDomainsWithHTTPInfo', - allowedDomainBulkInsert.domains, - ); - - const requestPath = '/agent-studio/1/agents/{agentId}/allowed-domains/bulk'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: allowedDomainBulkInsert, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Delete allowed domains by id list. - * - * Required API Key ACLs: - * - editSettings - * @param bulkDeleteAllowedDomains - The bulkDeleteAllowedDomains object. - * @param bulkDeleteAllowedDomains.agentId - The agentId. - * @param bulkDeleteAllowedDomains.allowedDomainBulkDelete - The allowedDomainBulkDelete object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - bulkDeleteAllowedDomains( - { agentId, allowedDomainBulkDelete }: BulkDeleteAllowedDomainsProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('agentId', 'bulkDeleteAllowedDomains', agentId); - - validateRequired('allowedDomainBulkDelete', 'bulkDeleteAllowedDomains', allowedDomainBulkDelete); - - validateRequired( - 'allowedDomainBulkDelete.domainIds', - 'bulkDeleteAllowedDomains', - allowedDomainBulkDelete.domainIds, - ); - - const requestPath = '/agent-studio/1/agents/{agentId}/allowed-domains/bulk'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - data: allowedDomainBulkDelete, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Delete allowed domains by id list. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param bulkDeleteAllowedDomains - The bulkDeleteAllowedDomains object. - * @param bulkDeleteAllowedDomains.agentId - The agentId. - * @param bulkDeleteAllowedDomains.allowedDomainBulkDelete - The allowedDomainBulkDelete object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see bulkDeleteAllowedDomains for the plain version. - */ - bulkDeleteAllowedDomainsWithHTTPInfo( - { agentId, allowedDomainBulkDelete }: BulkDeleteAllowedDomainsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'bulkDeleteAllowedDomainsWithHTTPInfo', agentId); - - validateRequired('allowedDomainBulkDelete', 'bulkDeleteAllowedDomainsWithHTTPInfo', allowedDomainBulkDelete); - - validateRequired( - 'allowedDomainBulkDelete.domainIds', - 'bulkDeleteAllowedDomainsWithHTTPInfo', - allowedDomainBulkDelete.domainIds, - ); - - const requestPath = '/agent-studio/1/agents/{agentId}/allowed-domains/bulk'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - data: allowedDomainBulkDelete, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Create a new agent. - * - * Required API Key ACLs: - * - editSettings - * @param agentConfigCreate - The agentConfigCreate object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - createAgent( - agentConfigCreate: AgentConfigCreate, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('agentConfigCreate', 'createAgent', agentConfigCreate); - - validateRequired('agentConfigCreate.name', 'createAgent', agentConfigCreate.name); - validateRequired('agentConfigCreate.instructions', 'createAgent', agentConfigCreate.instructions); - - const requestPath = '/agent-studio/1/agents'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: agentConfigCreate, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Create a new agent. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param agentConfigCreate - The agentConfigCreate object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see createAgent for the plain version. - */ - createAgentWithHTTPInfo( - agentConfigCreate: AgentConfigCreate, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentConfigCreate', 'createAgentWithHTTPInfo', agentConfigCreate); - - validateRequired('agentConfigCreate.name', 'createAgentWithHTTPInfo', agentConfigCreate.name); - validateRequired('agentConfigCreate.instructions', 'createAgentWithHTTPInfo', agentConfigCreate.instructions); - - const requestPath = '/agent-studio/1/agents'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: agentConfigCreate, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Add a single allowed domain pattern (e.g. https://app.example.com or *.example.com). - * - * Required API Key ACLs: - * - editSettings - * @param createAgentAllowedDomain - The createAgentAllowedDomain object. - * @param createAgentAllowedDomain.agentId - The agentId. - * @param createAgentAllowedDomain.allowedDomainCreate - The allowedDomainCreate object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - createAgentAllowedDomain( - { agentId, allowedDomainCreate }: CreateAgentAllowedDomainProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('agentId', 'createAgentAllowedDomain', agentId); - - validateRequired('allowedDomainCreate', 'createAgentAllowedDomain', allowedDomainCreate); - - validateRequired('allowedDomainCreate.domain', 'createAgentAllowedDomain', allowedDomainCreate.domain); - - const requestPath = '/agent-studio/1/agents/{agentId}/allowed-domains'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: allowedDomainCreate, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Add a single allowed domain pattern (e.g. https://app.example.com or *.example.com). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param createAgentAllowedDomain - The createAgentAllowedDomain object. - * @param createAgentAllowedDomain.agentId - The agentId. - * @param createAgentAllowedDomain.allowedDomainCreate - The allowedDomainCreate object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see createAgentAllowedDomain for the plain version. - */ - createAgentAllowedDomainWithHTTPInfo( - { agentId, allowedDomainCreate }: CreateAgentAllowedDomainProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'createAgentAllowedDomainWithHTTPInfo', agentId); - - validateRequired('allowedDomainCreate', 'createAgentAllowedDomainWithHTTPInfo', allowedDomainCreate); - - validateRequired( - 'allowedDomainCreate.domain', - 'createAgentAllowedDomainWithHTTPInfo', - allowedDomainCreate.domain, - ); - - const requestPath = '/agent-studio/1/agents/{agentId}/allowed-domains'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: allowedDomainCreate, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Create a completion for the specified agent. This endpoint handles two types of requests: 1. Normal completion request: User message -> Agent response 2. Tool approval response: User approval -> Execute tool -> Agent response Tool Approval Flow (for MCP tools with requiresApproval: true): - Request 1: User sends message -> Agent requests tool call -> Return approval request - Request 2: User approves -> Execute tool -> Agent continues with result. - * - * Required API Key ACLs: - * - search - * @param createAgentCompletion - The createAgentCompletion object. - * @param createAgentCompletion.agentId - The agentId. - * @param createAgentCompletion.compatibilityMode - Compatibility mode for the completion API. - * @param createAgentCompletion.agentCompletionRequest - The agentCompletionRequest object. - * @param createAgentCompletion.stream - Whether to stream the response or not. - * @param createAgentCompletion.cache - Use cached responses if available. - * @param createAgentCompletion.memory - Set to false to disable memory (enabled by default). - * @param createAgentCompletion.analytics - Set to false to skip analytics for this completion (default: true). Disables Agent Studio BigQuery analytics, Algolia search analytics, click analytics, and query-suggestions training. Useful for offline-eval workflows. - * @param createAgentCompletion.xAlgoliaSecureUserToken - The X-Algolia-Secure-User-Token. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - createAgentCompletion( - { - agentId, - compatibilityMode, - agentCompletionRequest, - stream, - cache, - memory, - analytics, - xAlgoliaSecureUserToken, - }: CreateAgentCompletionProps, - requestOptions?: RequestOptions, - ): Promise<{ [key: string]: any }> { - validateRequired('agentId', 'createAgentCompletion', agentId); - - validateRequired('compatibilityMode', 'createAgentCompletion', compatibilityMode); - - validateRequired('agentCompletionRequest', 'createAgentCompletion', agentCompletionRequest); - - const requestPath = '/agent-studio/1/agents/{agentId}/completions'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (compatibilityMode !== undefined) { - queryParameters['compatibilityMode'] = compatibilityMode.toString(); - } - - if (stream !== undefined) { - queryParameters['stream'] = stream.toString(); - } - - if (cache !== undefined) { - queryParameters['cache'] = cache.toString(); - } - - if (memory !== undefined) { - queryParameters['memory'] = memory.toString(); - } - - if (analytics !== undefined) { - queryParameters['analytics'] = analytics.toString(); - } - - if (xAlgoliaSecureUserToken !== undefined) { - headers['X-Algolia-Secure-User-Token'] = xAlgoliaSecureUserToken.toString(); - } - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: agentCompletionRequest, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Create a completion for the specified agent. This endpoint handles two types of requests: 1. Normal completion request: User message -> Agent response 2. Tool approval response: User approval -> Execute tool -> Agent response Tool Approval Flow (for MCP tools with requiresApproval: true): - Request 1: User sends message -> Agent requests tool call -> Return approval request - Request 2: User approves -> Execute tool -> Agent continues with result. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - search - * @param createAgentCompletion - The createAgentCompletion object. - * @param createAgentCompletion.agentId - The agentId. - * @param createAgentCompletion.compatibilityMode - Compatibility mode for the completion API. - * @param createAgentCompletion.agentCompletionRequest - The agentCompletionRequest object. - * @param createAgentCompletion.stream - Whether to stream the response or not. - * @param createAgentCompletion.cache - Use cached responses if available. - * @param createAgentCompletion.memory - Set to false to disable memory (enabled by default). - * @param createAgentCompletion.analytics - Set to false to skip analytics for this completion (default: true). Disables Agent Studio BigQuery analytics, Algolia search analytics, click analytics, and query-suggestions training. Useful for offline-eval workflows. - * @param createAgentCompletion.xAlgoliaSecureUserToken - The X-Algolia-Secure-User-Token. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see createAgentCompletion for the plain version. - */ - createAgentCompletionWithHTTPInfo( - { - agentId, - compatibilityMode, - agentCompletionRequest, - stream, - cache, - memory, - analytics, - xAlgoliaSecureUserToken, - }: CreateAgentCompletionProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'createAgentCompletionWithHTTPInfo', agentId); - - validateRequired('compatibilityMode', 'createAgentCompletionWithHTTPInfo', compatibilityMode); - - validateRequired('agentCompletionRequest', 'createAgentCompletionWithHTTPInfo', agentCompletionRequest); - - const requestPath = '/agent-studio/1/agents/{agentId}/completions'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (compatibilityMode !== undefined) { - queryParameters['compatibilityMode'] = compatibilityMode.toString(); - } - - if (stream !== undefined) { - queryParameters['stream'] = stream.toString(); - } - - if (cache !== undefined) { - queryParameters['cache'] = cache.toString(); - } - - if (memory !== undefined) { - queryParameters['memory'] = memory.toString(); - } - - if (analytics !== undefined) { - queryParameters['analytics'] = analytics.toString(); - } - - if (xAlgoliaSecureUserToken !== undefined) { - headers['X-Algolia-Secure-User-Token'] = xAlgoliaSecureUserToken.toString(); - } - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: agentCompletionRequest, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - /** - * Create a completion for the specified agent. This endpoint handles two types of requests: 1. Normal completion request: User message -> Agent response 2. Tool approval response: User approval -> Execute tool -> Agent response Tool Approval Flow (for MCP tools with requiresApproval: true): - Request 1: User sends message -> Agent requests tool call -> Return approval request - Request 2: User approves -> Execute tool -> Agent continues with result. (raw streaming version). - * - * Yields raw {@link ServerSentEvent} objects. Each event's `data` field contains a JSON-encoded `{ [key: string]: any; }` string. - * - * @see createAgentCompletionStream for the parsed variant. - * @see createAgentCompletion for the non-streaming version. - */ - createAgentCompletionStreamRaw( - { - agentId, - compatibilityMode, - agentCompletionRequest, - stream, - cache, - memory, - analytics, - xAlgoliaSecureUserToken, - }: CreateAgentCompletionProps, - requestOptions?: RequestOptions, - ): AsyncGenerator { - validateRequired('agentId', 'createAgentCompletionStreamRaw', agentId); - - validateRequired('compatibilityMode', 'createAgentCompletionStreamRaw', compatibilityMode); - - validateRequired('agentCompletionRequest', 'createAgentCompletionStreamRaw', agentCompletionRequest); - - const requestPath = '/agent-studio/1/agents/{agentId}/completions'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (compatibilityMode !== undefined) { - queryParameters['compatibilityMode'] = compatibilityMode.toString(); - } - - if (stream !== undefined) { - queryParameters['stream'] = stream.toString(); - } - - if (cache !== undefined) { - queryParameters['cache'] = cache.toString(); - } - - if (memory !== undefined) { - queryParameters['memory'] = memory.toString(); - } - - if (analytics !== undefined) { - queryParameters['analytics'] = analytics.toString(); - } - - if (xAlgoliaSecureUserToken !== undefined) { - headers['X-Algolia-Secure-User-Token'] = xAlgoliaSecureUserToken.toString(); - } - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: agentCompletionRequest, - }; - - return transporter.requestStream(request, requestOptions); - }, - /** - * Create a completion for the specified agent. This endpoint handles two types of requests: 1. Normal completion request: User message -> Agent response 2. Tool approval response: User approval -> Execute tool -> Agent response Tool Approval Flow (for MCP tools with requiresApproval: true): - Request 1: User sends message -> Agent requests tool call -> Return approval request - Request 2: User approves -> Execute tool -> Agent continues with result. (streaming version). - * - * Yields {@link StreamEvent} objects wrapping parsed `{ [key: string]: any; }` payloads. - * - * @see createAgentCompletionStreamRaw for the raw variant. - * @see createAgentCompletion for the non-streaming version. - */ - async *createAgentCompletionStream( - { - agentId, - compatibilityMode, - agentCompletionRequest, - stream, - cache, - memory, - analytics, - xAlgoliaSecureUserToken, - }: CreateAgentCompletionProps, - requestOptions?: RequestOptions, - ): AsyncGenerator> { - for await (const event of this.createAgentCompletionStreamRaw( - { - agentId, - compatibilityMode, - agentCompletionRequest, - stream, - cache, - memory, - analytics, - xAlgoliaSecureUserToken, - }, - requestOptions, - )) { - try { - const data = JSON.parse(event.data) as { [key: string]: any }; - yield { data, raw: event }; - } catch (e) { - yield { data: null, raw: event, error: e as Error }; - } - } - }, - - /** - * Create new feedback entry. - * - * Required API Key ACLs: - * - search - * @param feedbackCreationRequest - The feedbackCreationRequest object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - createFeedback( - feedbackCreationRequest: FeedbackCreationRequest, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('feedbackCreationRequest', 'createFeedback', feedbackCreationRequest); - - validateRequired('feedbackCreationRequest.messageId', 'createFeedback', feedbackCreationRequest.messageId); - validateRequired('feedbackCreationRequest.agentId', 'createFeedback', feedbackCreationRequest.agentId); - validateRequired('feedbackCreationRequest.vote', 'createFeedback', feedbackCreationRequest.vote); - - const requestPath = '/agent-studio/1/feedback'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: feedbackCreationRequest, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Create new feedback entry. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - search - * @param feedbackCreationRequest - The feedbackCreationRequest object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see createFeedback for the plain version. - */ - createFeedbackWithHTTPInfo( - feedbackCreationRequest: FeedbackCreationRequest, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('feedbackCreationRequest', 'createFeedbackWithHTTPInfo', feedbackCreationRequest); - - validateRequired( - 'feedbackCreationRequest.messageId', - 'createFeedbackWithHTTPInfo', - feedbackCreationRequest.messageId, - ); - validateRequired( - 'feedbackCreationRequest.agentId', - 'createFeedbackWithHTTPInfo', - feedbackCreationRequest.agentId, - ); - validateRequired('feedbackCreationRequest.vote', 'createFeedbackWithHTTPInfo', feedbackCreationRequest.vote); - - const requestPath = '/agent-studio/1/feedback'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: feedbackCreationRequest, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Create Provider. - * - * Required API Key ACLs: - * - editSettings - * @param providerAuthenticationCreate - The providerAuthenticationCreate object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - createProvider( - providerAuthenticationCreate: ProviderAuthenticationCreate, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('providerAuthenticationCreate', 'createProvider', providerAuthenticationCreate); - - validateRequired('providerAuthenticationCreate.name', 'createProvider', providerAuthenticationCreate.name); - validateRequired( - 'providerAuthenticationCreate.providerName', - 'createProvider', - providerAuthenticationCreate.providerName, - ); - validateRequired('providerAuthenticationCreate.input', 'createProvider', providerAuthenticationCreate.input); - - const requestPath = '/agent-studio/1/providers'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: providerAuthenticationCreate, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Create Provider. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param providerAuthenticationCreate - The providerAuthenticationCreate object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see createProvider for the plain version. - */ - createProviderWithHTTPInfo( - providerAuthenticationCreate: ProviderAuthenticationCreate, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('providerAuthenticationCreate', 'createProviderWithHTTPInfo', providerAuthenticationCreate); - - validateRequired( - 'providerAuthenticationCreate.name', - 'createProviderWithHTTPInfo', - providerAuthenticationCreate.name, - ); - validateRequired( - 'providerAuthenticationCreate.providerName', - 'createProviderWithHTTPInfo', - providerAuthenticationCreate.providerName, - ); - validateRequired( - 'providerAuthenticationCreate.input', - 'createProviderWithHTTPInfo', - providerAuthenticationCreate.input, - ); - - const requestPath = '/agent-studio/1/providers'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: providerAuthenticationCreate, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Create Secret Key. - * - * Required API Key ACLs: - * - admin - * @param secretKeyCreate - The secretKeyCreate object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - createSecretKey(secretKeyCreate: SecretKeyCreate, requestOptions?: RequestOptions): Promise { - validateRequired('secretKeyCreate', 'createSecretKey', secretKeyCreate); - - validateRequired('secretKeyCreate.name', 'createSecretKey', secretKeyCreate.name); - - const requestPath = '/agent-studio/1/secret-keys'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: secretKeyCreate, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Create Secret Key. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - admin - * @param secretKeyCreate - The secretKeyCreate object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see createSecretKey for the plain version. - */ - createSecretKeyWithHTTPInfo( - secretKeyCreate: SecretKeyCreate, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('secretKeyCreate', 'createSecretKeyWithHTTPInfo', secretKeyCreate); - - validateRequired('secretKeyCreate.name', 'createSecretKeyWithHTTPInfo', secretKeyCreate.name); - - const requestPath = '/agent-studio/1/secret-keys'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: secretKeyCreate, - }; - - return transporter.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customDelete', path); - - const requestPath = '/agent-studio/{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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customDelete - The customDelete object. - * @param customDelete.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customDelete for the plain version. - */ - customDeleteWithHTTPInfo( - { path, parameters }: CustomDeleteProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customDeleteWithHTTPInfo', path); - - const requestPath = '/agent-studio/{path}'.replace('{path}', path); - const headers: Headers = {}; - const queryParameters: QueryParameters = parameters ? parameters : {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customGet', path); - - const requestPath = '/agent-studio/{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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customGet - The customGet object. - * @param customGet.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customGet for the plain version. - */ - customGetWithHTTPInfo( - { path, parameters }: CustomGetProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customGetWithHTTPInfo', path); - - const requestPath = '/agent-studio/{path}'.replace('{path}', path); - const headers: Headers = {}; - const queryParameters: QueryParameters = parameters ? parameters : {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - const requestPath = '/agent-studio/{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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - const requestPath = '/agent-studio/{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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPut', path); - - const requestPath = '/agent-studio/{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); - }, - /** - * This method lets you send requests to the Algolia REST API. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPut - The customPut object. - * @param customPut.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPut for the plain version. - */ - customPutWithHTTPInfo( - { path, parameters, body }: CustomPutProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPutWithHTTPInfo', path); - - const requestPath = '/agent-studio/{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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Delete the specified agent. - * - * Required API Key ACLs: - * - editSettings - * @param deleteAgent - The deleteAgent object. - * @param deleteAgent.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - deleteAgent({ agentId }: DeleteAgentProps, requestOptions?: RequestOptions): Promise { - validateRequired('agentId', 'deleteAgent', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}'.replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Delete the specified agent. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param deleteAgent - The deleteAgent object. - * @param deleteAgent.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see deleteAgent for the plain version. - */ - deleteAgentWithHTTPInfo( - { agentId }: DeleteAgentProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'deleteAgentWithHTTPInfo', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}'.replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Deletes the conversations matching the given filers. - * - * Required API Key ACLs: - * - logs - * @param deleteAgentConversations - The deleteAgentConversations object. - * @param deleteAgentConversations.agentId - The agentId. - * @param deleteAgentConversations.startDate - Filter conversations created after this date (format: YYYY-MM-DD). - * @param deleteAgentConversations.endDate - Filter conversations created before this date (format: YYYY-MM-DD). - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - deleteAgentConversations( - { agentId, startDate, endDate }: DeleteAgentConversationsProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('agentId', 'deleteAgentConversations', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/conversations'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (startDate !== undefined) { - queryParameters['startDate'] = startDate.toString(); - } - - if (endDate !== undefined) { - queryParameters['endDate'] = endDate.toString(); - } - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Deletes the conversations matching the given filers. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - logs - * @param deleteAgentConversations - The deleteAgentConversations object. - * @param deleteAgentConversations.agentId - The agentId. - * @param deleteAgentConversations.startDate - Filter conversations created after this date (format: YYYY-MM-DD). - * @param deleteAgentConversations.endDate - Filter conversations created before this date (format: YYYY-MM-DD). - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see deleteAgentConversations for the plain version. - */ - deleteAgentConversationsWithHTTPInfo( - { agentId, startDate, endDate }: DeleteAgentConversationsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'deleteAgentConversationsWithHTTPInfo', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/conversations'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (startDate !== undefined) { - queryParameters['startDate'] = startDate.toString(); - } - - if (endDate !== undefined) { - queryParameters['endDate'] = endDate.toString(); - } - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Remove an allowed domain by id. - * - * Required API Key ACLs: - * - editSettings - * @param deleteAllowedDomain - The deleteAllowedDomain object. - * @param deleteAllowedDomain.domainId - The domainId. - * @param deleteAllowedDomain.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - deleteAllowedDomain( - { domainId, agentId }: DeleteAllowedDomainProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('domainId', 'deleteAllowedDomain', domainId); - - validateRequired('agentId', 'deleteAllowedDomain', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/allowed-domains/{domainId}' - .replace('{domainId}', encodeURIComponent(domainId)) - .replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Remove an allowed domain by id. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param deleteAllowedDomain - The deleteAllowedDomain object. - * @param deleteAllowedDomain.domainId - The domainId. - * @param deleteAllowedDomain.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see deleteAllowedDomain for the plain version. - */ - deleteAllowedDomainWithHTTPInfo( - { domainId, agentId }: DeleteAllowedDomainProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('domainId', 'deleteAllowedDomainWithHTTPInfo', domainId); - - validateRequired('agentId', 'deleteAllowedDomainWithHTTPInfo', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/allowed-domains/{domainId}' - .replace('{domainId}', encodeURIComponent(domainId)) - .replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Deletes the conversation with the given ID. - * - * Required API Key ACLs: - * - logs - * @param deleteConversation - The deleteConversation object. - * @param deleteConversation.conversationId - The conversationId. - * @param deleteConversation.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - deleteConversation( - { conversationId, agentId }: DeleteConversationProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('conversationId', 'deleteConversation', conversationId); - - validateRequired('agentId', 'deleteConversation', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/conversations/{conversationId}' - .replace('{conversationId}', encodeURIComponent(conversationId)) - .replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Deletes the conversation with the given ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - logs - * @param deleteConversation - The deleteConversation object. - * @param deleteConversation.conversationId - The conversationId. - * @param deleteConversation.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see deleteConversation for the plain version. - */ - deleteConversationWithHTTPInfo( - { conversationId, agentId }: DeleteConversationProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('conversationId', 'deleteConversationWithHTTPInfo', conversationId); - - validateRequired('agentId', 'deleteConversationWithHTTPInfo', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/conversations/{conversationId}' - .replace('{conversationId}', encodeURIComponent(conversationId)) - .replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Delete Provider. - * - * Required API Key ACLs: - * - editSettings - * @param deleteProvider - The deleteProvider object. - * @param deleteProvider.providerId - The providerId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - deleteProvider({ providerId }: DeleteProviderProps, requestOptions?: RequestOptions): Promise { - validateRequired('providerId', 'deleteProvider', providerId); - - const requestPath = '/agent-studio/1/providers/{providerId}'.replace( - '{providerId}', - encodeURIComponent(providerId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Delete Provider. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param deleteProvider - The deleteProvider object. - * @param deleteProvider.providerId - The providerId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see deleteProvider for the plain version. - */ - deleteProviderWithHTTPInfo( - { providerId }: DeleteProviderProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('providerId', 'deleteProviderWithHTTPInfo', providerId); - - const requestPath = '/agent-studio/1/providers/{providerId}'.replace( - '{providerId}', - encodeURIComponent(providerId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Delete Secret Key. - * - * Required API Key ACLs: - * - admin - * @param deleteSecretKey - The deleteSecretKey object. - * @param deleteSecretKey.secretKeyId - The secretKeyId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - deleteSecretKey({ secretKeyId }: DeleteSecretKeyProps, requestOptions?: RequestOptions): Promise { - validateRequired('secretKeyId', 'deleteSecretKey', secretKeyId); - - const requestPath = '/agent-studio/1/secret-keys/{secretKeyId}'.replace( - '{secretKeyId}', - encodeURIComponent(secretKeyId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Delete Secret Key. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - admin - * @param deleteSecretKey - The deleteSecretKey object. - * @param deleteSecretKey.secretKeyId - The secretKeyId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see deleteSecretKey for the plain version. - */ - deleteSecretKeyWithHTTPInfo( - { secretKeyId }: DeleteSecretKeyProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('secretKeyId', 'deleteSecretKeyWithHTTPInfo', secretKeyId); - - const requestPath = '/agent-studio/1/secret-keys/{secretKeyId}'.replace( - '{secretKeyId}', - encodeURIComponent(secretKeyId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Permanently deletes all messages for the given user token. Does not delete conversations. - * - * Required API Key ACLs: - * - logs - * @param deleteUserData - The deleteUserData object. - * @param deleteUserData.userToken - The userToken. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - deleteUserData({ userToken }: DeleteUserDataProps, requestOptions?: RequestOptions): Promise { - validateRequired('userToken', 'deleteUserData', userToken); - - const requestPath = '/agent-studio/1/user-data/{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); - }, - /** - * Permanently deletes all messages for the given user token. Does not delete conversations. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - logs - * @param deleteUserData - The deleteUserData object. - * @param deleteUserData.userToken - The userToken. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see deleteUserData for the plain version. - */ - deleteUserDataWithHTTPInfo( - { userToken }: DeleteUserDataProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('userToken', 'deleteUserDataWithHTTPInfo', userToken); - - const requestPath = '/agent-studio/1/user-data/{userToken}'.replace('{userToken}', encodeURIComponent(userToken)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Exports all conversations based on the passed filters. - * - * Required API Key ACLs: - * - logs - * @param exportConversations - The exportConversations object. - * @param exportConversations.agentId - The agentId. - * @param exportConversations.startDate - Filter conversations created after this date (format: YYYY-MM-DD). - * @param exportConversations.endDate - Filter conversations created before this date (format: YYYY-MM-DD). - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - exportConversations( - { agentId, startDate, endDate }: ExportConversationsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'exportConversations', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/conversations/export'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - 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); - }, - /** - * Exports all conversations based on the passed filters. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - logs - * @param exportConversations - The exportConversations object. - * @param exportConversations.agentId - The agentId. - * @param exportConversations.startDate - Filter conversations created after this date (format: YYYY-MM-DD). - * @param exportConversations.endDate - Filter conversations created before this date (format: YYYY-MM-DD). - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see exportConversations for the plain version. - */ - exportConversationsWithHTTPInfo( - { agentId, startDate, endDate }: ExportConversationsProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('agentId', 'exportConversationsWithHTTPInfo', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/conversations/export'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieve details of the specified agent. - * - * Required API Key ACLs: - * - settings - * @param getAgent - The getAgent object. - * @param getAgent.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - getAgent({ agentId }: GetAgentProps, requestOptions?: RequestOptions): Promise { - validateRequired('agentId', 'getAgent', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}'.replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Retrieve details of the specified agent. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param getAgent - The getAgent object. - * @param getAgent.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getAgent for the plain version. - */ - getAgentWithHTTPInfo( - { agentId }: GetAgentProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'getAgentWithHTTPInfo', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}'.replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Get a single allowed domain by id. - * - * Required API Key ACLs: - * - settings - * @param getAllowedDomain - The getAllowedDomain object. - * @param getAllowedDomain.domainId - The domainId. - * @param getAllowedDomain.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - getAllowedDomain( - { domainId, agentId }: GetAllowedDomainProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('domainId', 'getAllowedDomain', domainId); - - validateRequired('agentId', 'getAllowedDomain', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/allowed-domains/{domainId}' - .replace('{domainId}', encodeURIComponent(domainId)) - .replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Get a single allowed domain by id. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param getAllowedDomain - The getAllowedDomain object. - * @param getAllowedDomain.domainId - The domainId. - * @param getAllowedDomain.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getAllowedDomain for the plain version. - */ - getAllowedDomainWithHTTPInfo( - { domainId, agentId }: GetAllowedDomainProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('domainId', 'getAllowedDomainWithHTTPInfo', domainId); - - validateRequired('agentId', 'getAllowedDomainWithHTTPInfo', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/allowed-domains/{domainId}' - .replace('{domainId}', encodeURIComponent(domainId)) - .replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Get Configuration. - * - * Required API Key ACLs: - * - logs - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - getConfiguration(requestOptions?: RequestOptions | undefined): Promise { - const requestPath = '/agent-studio/1/configuration'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Get Configuration. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - logs - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getConfiguration for the plain version. - */ - getConfigurationWithHTTPInfo( - requestOptions?: RequestOptions | undefined, - ): Promise> { - const requestPath = '/agent-studio/1/configuration'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves the conversation and its messages for the given ID. - * - * Required API Key ACLs: - * - logs - * @param getConversation - The getConversation object. - * @param getConversation.conversationId - The conversationId. - * @param getConversation.agentId - The agentId. - * @param getConversation.includeFeedback - Include feedback for the conversation. - * @param getConversation.xAlgoliaSecureUserToken - The X-Algolia-Secure-User-Token. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - getConversation( - { conversationId, agentId, includeFeedback, xAlgoliaSecureUserToken }: GetConversationProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('conversationId', 'getConversation', conversationId); - - validateRequired('agentId', 'getConversation', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/conversations/{conversationId}' - .replace('{conversationId}', encodeURIComponent(conversationId)) - .replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (includeFeedback !== undefined) { - queryParameters['includeFeedback'] = includeFeedback.toString(); - } - - if (xAlgoliaSecureUserToken !== undefined) { - headers['X-Algolia-Secure-User-Token'] = xAlgoliaSecureUserToken.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Retrieves the conversation and its messages for the given ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - logs - * @param getConversation - The getConversation object. - * @param getConversation.conversationId - The conversationId. - * @param getConversation.agentId - The agentId. - * @param getConversation.includeFeedback - Include feedback for the conversation. - * @param getConversation.xAlgoliaSecureUserToken - The X-Algolia-Secure-User-Token. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getConversation for the plain version. - */ - getConversationWithHTTPInfo( - { conversationId, agentId, includeFeedback, xAlgoliaSecureUserToken }: GetConversationProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('conversationId', 'getConversationWithHTTPInfo', conversationId); - - validateRequired('agentId', 'getConversationWithHTTPInfo', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/conversations/{conversationId}' - .replace('{conversationId}', encodeURIComponent(conversationId)) - .replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (includeFeedback !== undefined) { - queryParameters['includeFeedback'] = includeFeedback.toString(); - } - - if (xAlgoliaSecureUserToken !== undefined) { - headers['X-Algolia-Secure-User-Token'] = xAlgoliaSecureUserToken.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Get Provider. - * - * Required API Key ACLs: - * - settings - * @param getProvider - The getProvider object. - * @param getProvider.providerId - The providerId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - getProvider( - { providerId }: GetProviderProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('providerId', 'getProvider', providerId); - - const requestPath = '/agent-studio/1/providers/{providerId}'.replace( - '{providerId}', - encodeURIComponent(providerId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Get Provider. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param getProvider - The getProvider object. - * @param getProvider.providerId - The providerId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getProvider for the plain version. - */ - getProviderWithHTTPInfo( - { providerId }: GetProviderProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('providerId', 'getProviderWithHTTPInfo', providerId); - - const requestPath = '/agent-studio/1/providers/{providerId}'.replace( - '{providerId}', - encodeURIComponent(providerId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Get Secret Key. - * - * Required API Key ACLs: - * - settings - * @param getSecretKey - The getSecretKey object. - * @param getSecretKey.secretKeyId - The secretKeyId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - getSecretKey({ secretKeyId }: GetSecretKeyProps, requestOptions?: RequestOptions): Promise { - validateRequired('secretKeyId', 'getSecretKey', secretKeyId); - - const requestPath = '/agent-studio/1/secret-keys/{secretKeyId}'.replace( - '{secretKeyId}', - encodeURIComponent(secretKeyId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Get Secret Key. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param getSecretKey - The getSecretKey object. - * @param getSecretKey.secretKeyId - The secretKeyId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getSecretKey for the plain version. - */ - getSecretKeyWithHTTPInfo( - { secretKeyId }: GetSecretKeyProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('secretKeyId', 'getSecretKeyWithHTTPInfo', secretKeyId); - - const requestPath = '/agent-studio/1/secret-keys/{secretKeyId}'.replace( - '{secretKeyId}', - encodeURIComponent(secretKeyId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves all memories, conversations and their messages for the given user token. - * - * Required API Key ACLs: - * - logs - * @param getUserData - The getUserData object. - * @param getUserData.userToken - The userToken. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - getUserData({ userToken }: GetUserDataProps, requestOptions?: RequestOptions): Promise { - validateRequired('userToken', 'getUserData', userToken); - - const requestPath = '/agent-studio/1/user-data/{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); - }, - /** - * Retrieves all memories, conversations and their messages for the given user token. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - logs - * @param getUserData - The getUserData object. - * @param getUserData.userToken - The userToken. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getUserData for the plain version. - */ - getUserDataWithHTTPInfo( - { userToken }: GetUserDataProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('userToken', 'getUserDataWithHTTPInfo', userToken); - - const requestPath = '/agent-studio/1/user-data/{userToken}'.replace('{userToken}', encodeURIComponent(userToken)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Invalidate cached completions for this agent. Filter with `before` (exclusive). - * - * Required API Key ACLs: - * - editSettings - * @param invalidateAgentCache - The invalidateAgentCache object. - * @param invalidateAgentCache.agentId - The agentId. - * @param invalidateAgentCache.before - Delete entries strictly before this date (exclusive, YYYY-MM-DD). - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - invalidateAgentCache( - { agentId, before }: InvalidateAgentCacheProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('agentId', 'invalidateAgentCache', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/cache'.replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (before !== undefined) { - queryParameters['before'] = before.toString(); - } - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Invalidate cached completions for this agent. Filter with `before` (exclusive). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param invalidateAgentCache - The invalidateAgentCache object. - * @param invalidateAgentCache.agentId - The agentId. - * @param invalidateAgentCache.before - Delete entries strictly before this date (exclusive, YYYY-MM-DD). - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see invalidateAgentCache for the plain version. - */ - invalidateAgentCacheWithHTTPInfo( - { agentId, before }: InvalidateAgentCacheProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'invalidateAgentCacheWithHTTPInfo', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/cache'.replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (before !== undefined) { - queryParameters['before'] = before.toString(); - } - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * List all allowed domain patterns for this agent. - * - * Required API Key ACLs: - * - settings - * @param listAgentAllowedDomains - The listAgentAllowedDomains object. - * @param listAgentAllowedDomains.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - listAgentAllowedDomains( - { agentId }: ListAgentAllowedDomainsProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('agentId', 'listAgentAllowedDomains', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/allowed-domains'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * List all allowed domain patterns for this agent. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param listAgentAllowedDomains - The listAgentAllowedDomains object. - * @param listAgentAllowedDomains.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see listAgentAllowedDomains for the plain version. - */ - listAgentAllowedDomainsWithHTTPInfo( - { agentId }: ListAgentAllowedDomainsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'listAgentAllowedDomainsWithHTTPInfo', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/allowed-domains'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves the conversations for the given agent ID. - * - * Required API Key ACLs: - * - logs - * @param listAgentConversations - The listAgentConversations object. - * @param listAgentConversations.agentId - The agentId. - * @param listAgentConversations.startDate - Filter conversations created after this date (format: YYYY-MM-DD). - * @param listAgentConversations.endDate - Filter conversations created before this date (format: YYYY-MM-DD). - * @param listAgentConversations.includeFeedback - Include feedback per conversation. - * @param listAgentConversations.feedbackVote - Filter by feedback value (requires includeFeedback=true). - * @param listAgentConversations.page - Page number. - * @param listAgentConversations.limit - Items per page. - * @param listAgentConversations.xAlgoliaSecureUserToken - The X-Algolia-Secure-User-Token. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - listAgentConversations( - { - agentId, - startDate, - endDate, - includeFeedback, - feedbackVote, - page, - limit, - xAlgoliaSecureUserToken, - }: ListAgentConversationsProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('agentId', 'listAgentConversations', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/conversations'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (startDate !== undefined) { - queryParameters['startDate'] = startDate.toString(); - } - - if (endDate !== undefined) { - queryParameters['endDate'] = endDate.toString(); - } - - if (includeFeedback !== undefined) { - queryParameters['includeFeedback'] = includeFeedback.toString(); - } - - if (feedbackVote !== undefined) { - queryParameters['feedbackVote'] = feedbackVote.toString(); - } - - if (page !== undefined) { - queryParameters['page'] = page.toString(); - } - - if (limit !== undefined) { - queryParameters['limit'] = limit.toString(); - } - - if (xAlgoliaSecureUserToken !== undefined) { - headers['X-Algolia-Secure-User-Token'] = xAlgoliaSecureUserToken.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Retrieves the conversations for the given agent ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - logs - * @param listAgentConversations - The listAgentConversations object. - * @param listAgentConversations.agentId - The agentId. - * @param listAgentConversations.startDate - Filter conversations created after this date (format: YYYY-MM-DD). - * @param listAgentConversations.endDate - Filter conversations created before this date (format: YYYY-MM-DD). - * @param listAgentConversations.includeFeedback - Include feedback per conversation. - * @param listAgentConversations.feedbackVote - Filter by feedback value (requires includeFeedback=true). - * @param listAgentConversations.page - Page number. - * @param listAgentConversations.limit - Items per page. - * @param listAgentConversations.xAlgoliaSecureUserToken - The X-Algolia-Secure-User-Token. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see listAgentConversations for the plain version. - */ - listAgentConversationsWithHTTPInfo( - { - agentId, - startDate, - endDate, - includeFeedback, - feedbackVote, - page, - limit, - xAlgoliaSecureUserToken, - }: ListAgentConversationsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'listAgentConversationsWithHTTPInfo', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/conversations'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (startDate !== undefined) { - queryParameters['startDate'] = startDate.toString(); - } - - if (endDate !== undefined) { - queryParameters['endDate'] = endDate.toString(); - } - - if (includeFeedback !== undefined) { - queryParameters['includeFeedback'] = includeFeedback.toString(); - } - - if (feedbackVote !== undefined) { - queryParameters['feedbackVote'] = feedbackVote.toString(); - } - - if (page !== undefined) { - queryParameters['page'] = page.toString(); - } - - if (limit !== undefined) { - queryParameters['limit'] = limit.toString(); - } - - if (xAlgoliaSecureUserToken !== undefined) { - headers['X-Algolia-Secure-User-Token'] = xAlgoliaSecureUserToken.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * List all agents with pagination and filtering. - * - * Required API Key ACLs: - * - settings - * @param listAgents - The listAgents object. - * @param listAgents.page - Page number. - * @param listAgents.limit - Items per page. - * @param listAgents.providerId - Filter by provider id. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - listAgents( - { page, limit, providerId }: ListAgentsProps = {}, - requestOptions: RequestOptions | undefined = undefined, - ): Promise { - const requestPath = '/agent-studio/1/agents'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (page !== undefined) { - queryParameters['page'] = page.toString(); - } - - if (limit !== undefined) { - queryParameters['limit'] = limit.toString(); - } - - if (providerId !== undefined) { - queryParameters['providerId'] = providerId.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * List all agents with pagination and filtering. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param listAgents - The listAgents object. - * @param listAgents.page - Page number. - * @param listAgents.limit - Items per page. - * @param listAgents.providerId - Filter by provider id. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see listAgents for the plain version. - */ - listAgentsWithHTTPInfo( - { page, limit, providerId }: ListAgentsProps = {}, - requestOptions: RequestOptions | undefined = undefined, - ): Promise> { - const requestPath = '/agent-studio/1/agents'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (page !== undefined) { - queryParameters['page'] = page.toString(); - } - - if (limit !== undefined) { - queryParameters['limit'] = limit.toString(); - } - - if (providerId !== undefined) { - queryParameters['providerId'] = providerId.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Get Provider Models. - * - * Required API Key ACLs: - * - settings - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - listModels(requestOptions?: RequestOptions | undefined): Promise<{ [key: string]: Array }> { - const requestPath = '/agent-studio/1/providers/models'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Get Provider Models. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see listModels for the plain version. - */ - listModelsWithHTTPInfo( - requestOptions?: RequestOptions | undefined, - ): Promise }>> { - const requestPath = '/agent-studio/1/providers/models'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Get available models for a specific provider. - * - * Required API Key ACLs: - * - settings - * @param listProviderModels - The listProviderModels object. - * @param listProviderModels.providerId - The providerId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - listProviderModels( - { providerId }: ListProviderModelsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('providerId', 'listProviderModels', providerId); - - const requestPath = '/agent-studio/1/providers/{providerId}/models'.replace( - '{providerId}', - encodeURIComponent(providerId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Get available models for a specific provider. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param listProviderModels - The listProviderModels object. - * @param listProviderModels.providerId - The providerId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see listProviderModels for the plain version. - */ - listProviderModelsWithHTTPInfo( - { providerId }: ListProviderModelsProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('providerId', 'listProviderModelsWithHTTPInfo', providerId); - - const requestPath = '/agent-studio/1/providers/{providerId}/models'.replace( - '{providerId}', - encodeURIComponent(providerId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * List Providers. - * - * Required API Key ACLs: - * - settings - * @param listProviders - The listProviders object. - * @param listProviders.page - Page number. - * @param listProviders.limit - Items per page. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - listProviders( - { page, limit }: ListProvidersProps = {}, - requestOptions: RequestOptions | undefined = undefined, - ): Promise { - const requestPath = '/agent-studio/1/providers'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (page !== undefined) { - queryParameters['page'] = page.toString(); - } - - if (limit !== undefined) { - queryParameters['limit'] = limit.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * List Providers. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param listProviders - The listProviders object. - * @param listProviders.page - Page number. - * @param listProviders.limit - Items per page. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see listProviders for the plain version. - */ - listProvidersWithHTTPInfo( - { page, limit }: ListProvidersProps = {}, - requestOptions: RequestOptions | undefined = undefined, - ): Promise> { - const requestPath = '/agent-studio/1/providers'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (page !== undefined) { - queryParameters['page'] = page.toString(); - } - - if (limit !== undefined) { - queryParameters['limit'] = limit.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * List Secret Keys. - * - * Required API Key ACLs: - * - settings - * @param listSecretKeys - The listSecretKeys object. - * @param listSecretKeys.page - Page number. - * @param listSecretKeys.limit - Items per page. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - listSecretKeys( - { page, limit }: ListSecretKeysProps = {}, - requestOptions: RequestOptions | undefined = undefined, - ): Promise { - const requestPath = '/agent-studio/1/secret-keys'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (page !== undefined) { - queryParameters['page'] = page.toString(); - } - - if (limit !== undefined) { - queryParameters['limit'] = limit.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * List Secret Keys. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param listSecretKeys - The listSecretKeys object. - * @param listSecretKeys.page - Page number. - * @param listSecretKeys.limit - Items per page. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see listSecretKeys for the plain version. - */ - listSecretKeysWithHTTPInfo( - { page, limit }: ListSecretKeysProps = {}, - requestOptions: RequestOptions | undefined = undefined, - ): Promise> { - const requestPath = '/agent-studio/1/secret-keys'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (page !== undefined) { - queryParameters['page'] = page.toString(); - } - - if (limit !== undefined) { - queryParameters['limit'] = limit.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Publish the specified agent. - * - * Required API Key ACLs: - * - editSettings - * @param publishAgent - The publishAgent object. - * @param publishAgent.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - publishAgent({ agentId }: PublishAgentProps, requestOptions?: RequestOptions): Promise { - validateRequired('agentId', 'publishAgent', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/publish'.replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Publish the specified agent. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param publishAgent - The publishAgent object. - * @param publishAgent.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see publishAgent for the plain version. - */ - publishAgentWithHTTPInfo( - { agentId }: PublishAgentProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'publishAgentWithHTTPInfo', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/publish'.replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Unpublish the specified agent. - * - * Required API Key ACLs: - * - editSettings - * @param unpublishAgent - The unpublishAgent object. - * @param unpublishAgent.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - unpublishAgent( - { agentId }: UnpublishAgentProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('agentId', 'unpublishAgent', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/unpublish'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Unpublish the specified agent. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param unpublishAgent - The unpublishAgent object. - * @param unpublishAgent.agentId - The agentId. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see unpublishAgent for the plain version. - */ - unpublishAgentWithHTTPInfo( - { agentId }: UnpublishAgentProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'unpublishAgentWithHTTPInfo', agentId); - - const requestPath = '/agent-studio/1/agents/{agentId}/unpublish'.replace( - '{agentId}', - encodeURIComponent(agentId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Update the specified agent. - * - * Required API Key ACLs: - * - editSettings - * @param updateAgent - The updateAgent object. - * @param updateAgent.agentId - The agentId. - * @param updateAgent.agentConfigUpdate - The agentConfigUpdate object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - updateAgent( - { agentId, agentConfigUpdate }: UpdateAgentProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('agentId', 'updateAgent', agentId); - - validateRequired('agentConfigUpdate', 'updateAgent', agentConfigUpdate); - - const requestPath = '/agent-studio/1/agents/{agentId}'.replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PATCH', - path: requestPath, - queryParameters, - headers, - data: agentConfigUpdate, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Update the specified agent. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param updateAgent - The updateAgent object. - * @param updateAgent.agentId - The agentId. - * @param updateAgent.agentConfigUpdate - The agentConfigUpdate object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see updateAgent for the plain version. - */ - updateAgentWithHTTPInfo( - { agentId, agentConfigUpdate }: UpdateAgentProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('agentId', 'updateAgentWithHTTPInfo', agentId); - - validateRequired('agentConfigUpdate', 'updateAgentWithHTTPInfo', agentConfigUpdate); - - const requestPath = '/agent-studio/1/agents/{agentId}'.replace('{agentId}', encodeURIComponent(agentId)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PATCH', - path: requestPath, - queryParameters, - headers, - data: agentConfigUpdate, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Patch Configuration. - * - * Required API Key ACLs: - * - logs - * @param applicationConfigPatch - The applicationConfigPatch object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - updateConfiguration( - applicationConfigPatch: ApplicationConfigPatch, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('applicationConfigPatch', 'updateConfiguration', applicationConfigPatch); - - const requestPath = '/agent-studio/1/configuration'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PATCH', - path: requestPath, - queryParameters, - headers, - data: applicationConfigPatch, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Patch Configuration. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - logs - * @param applicationConfigPatch - The applicationConfigPatch object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see updateConfiguration for the plain version. - */ - updateConfigurationWithHTTPInfo( - applicationConfigPatch: ApplicationConfigPatch, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('applicationConfigPatch', 'updateConfigurationWithHTTPInfo', applicationConfigPatch); - - const requestPath = '/agent-studio/1/configuration'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PATCH', - path: requestPath, - queryParameters, - headers, - data: applicationConfigPatch, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Update Provider. - * - * Required API Key ACLs: - * - editSettings - * @param updateProvider - The updateProvider object. - * @param updateProvider.providerId - The providerId. - * @param updateProvider.providerAuthenticationPatch - The providerAuthenticationPatch object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - updateProvider( - { providerId, providerAuthenticationPatch }: UpdateProviderProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('providerId', 'updateProvider', providerId); - - validateRequired('providerAuthenticationPatch', 'updateProvider', providerAuthenticationPatch); - - const requestPath = '/agent-studio/1/providers/{providerId}'.replace( - '{providerId}', - encodeURIComponent(providerId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PATCH', - path: requestPath, - queryParameters, - headers, - data: providerAuthenticationPatch, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Update Provider. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param updateProvider - The updateProvider object. - * @param updateProvider.providerId - The providerId. - * @param updateProvider.providerAuthenticationPatch - The providerAuthenticationPatch object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see updateProvider for the plain version. - */ - updateProviderWithHTTPInfo( - { providerId, providerAuthenticationPatch }: UpdateProviderProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('providerId', 'updateProviderWithHTTPInfo', providerId); - - validateRequired('providerAuthenticationPatch', 'updateProviderWithHTTPInfo', providerAuthenticationPatch); - - const requestPath = '/agent-studio/1/providers/{providerId}'.replace( - '{providerId}', - encodeURIComponent(providerId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PATCH', - path: requestPath, - queryParameters, - headers, - data: providerAuthenticationPatch, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Patch Secret Key. - * - * Required API Key ACLs: - * - admin - * @param updateSecretKey - The updateSecretKey object. - * @param updateSecretKey.secretKeyId - The secretKeyId. - * @param updateSecretKey.secretKeyPatch - The secretKeyPatch object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - updateSecretKey( - { secretKeyId, secretKeyPatch }: UpdateSecretKeyProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('secretKeyId', 'updateSecretKey', secretKeyId); - - validateRequired('secretKeyPatch', 'updateSecretKey', secretKeyPatch); - - const requestPath = '/agent-studio/1/secret-keys/{secretKeyId}'.replace( - '{secretKeyId}', - encodeURIComponent(secretKeyId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PATCH', - path: requestPath, - queryParameters, - headers, - data: secretKeyPatch, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Patch Secret Key. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - admin - * @param updateSecretKey - The updateSecretKey object. - * @param updateSecretKey.secretKeyId - The secretKeyId. - * @param updateSecretKey.secretKeyPatch - The secretKeyPatch object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see updateSecretKey for the plain version. - */ - updateSecretKeyWithHTTPInfo( - { secretKeyId, secretKeyPatch }: UpdateSecretKeyProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('secretKeyId', 'updateSecretKeyWithHTTPInfo', secretKeyId); - - validateRequired('secretKeyPatch', 'updateSecretKeyWithHTTPInfo', secretKeyPatch); - - const requestPath = '/agent-studio/1/secret-keys/{secretKeyId}'.replace( - '{secretKeyId}', - encodeURIComponent(secretKeyId), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PATCH', - path: requestPath, - queryParameters, - headers, - data: secretKeyPatch, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/agent-studio/tsconfig.json b/packages/agent-studio/tsconfig.json deleted file mode 100644 index 444e8bb64..000000000 --- a/packages/agent-studio/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src", "model", "builds"], - "exclude": ["dist", "node_modules"] -} diff --git a/packages/agent-studio/tsup.config.ts b/packages/agent-studio/tsup.config.ts deleted file mode 100644 index dfc35d947..000000000 --- a/packages/agent-studio/tsup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -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', - target: 'es2018', - 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: 'agentStudioClient', -}; - -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/algoliasearch/LICENSE b/packages/algoliasearch/LICENSE deleted file mode 100644 index fddf416f9..000000000 --- a/packages/algoliasearch/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 dbb8a656a..9e227e857 100644 --- a/packages/algoliasearch/README.md +++ b/packages/algoliasearch/README.md @@ -6,77 +6,77 @@

The perfect starting point to integrate Algolia within your JavaScript project

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

- Documentation • + DocumentationInstantSearchCommunity ForumStack OverflowReport a bug • - Support + 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 +- **UMD compatible**, you can use it with any module loader - Built with TypeScript ## 💡 Getting Started -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 +First, install Algolia JavaScript API Client via the [npm](https://www.npmjs.com/get-npm) package manager: ```bash -yarn add algoliasearch@5.56.0 -# or -npm install algoliasearch@5.56.0 -# or -pnpm add algoliasearch@5.56.0 +npm install algoliasearch ``` -### Without a package manager - -Add the following JavaScript snippet to the of your website: - -```html -// for the full client - +Then, create objects on your index: -// for the lite client - +```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); + }); ``` -### Usage - -You can now import the Algolia API client in your project and play with it. +Finally, let's actually search using the `search` method: ```js -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'); +index + .search("Fo") + .then(({ hits }) => { + console.log(hits); + }) + .catch(err => { + console.log(err); + }); ``` -For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/sdk/methods/search/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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) +For full documentation, visit the **[online documentation](https://www.algolia.com/doc/api-client/getting-started/install/javascript/)**. ## 📄 License -The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). +Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE.md). diff --git a/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts b/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts deleted file mode 100644 index d00d3999e..000000000 --- a/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -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', async () => { - const consoleInfo = vi.spyOn(console, 'info').mockImplementation(() => {}); - - const client = algoliasearch('APP_ID', 'API_KEY', { - logger: createConsoleLogger(LogLevelEnum.Debug), - // every host fails, exercising the retry logging path without a real request that could outlive the test - requester: { - send: () => Promise.resolve({ content: 'internal error', isTimedOut: false, status: 500 }), - }, - }); - - await expect(client.setSettings({ indexName: 'foo', indexSettings: {} })).rejects.toThrow(); - - expect(consoleInfo).toHaveBeenCalledWith('Retryable failure', expect.any(Object)); -}); diff --git a/packages/algoliasearch/__tests__/algoliasearch.common.test.ts b/packages/algoliasearch/__tests__/algoliasearch.common.test.ts deleted file mode 100644 index ccfa9a660..000000000 --- a/packages/algoliasearch/__tests__/algoliasearch.common.test.ts +++ /dev/null @@ -1,348 +0,0 @@ -import { describe, expect, test } from 'vitest'; - -import type { EndRequest, Requester } from '@algolia/client-common'; -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({ - requestIdChannel: 'queryParameters', - 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), - requestStream: expect.any(Function), - requestWithHttpInfo: expect.any(Function), - requester: { - send: expect.any(Function), - sendStream: 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('withHTTPInfo methods', () => { - test('exposes a `searchWithHTTPInfo` variant returning the full HTTP response information', async () => { - const response = await client.searchWithHTTPInfo({ requests: [{ indexName: 'theIndexName' }] }); - const req = response.data as unknown as EchoResponse; - - expect(response.status).toEqual(200); - expect(response.headers).toEqual(expect.objectContaining({ 'content-type': 'text/plain' })); - expect(JSON.parse(response.content)).toEqual(req); - expect(req.path).toEqual('/1/indexes/*/queries'); - expect(req.method).toEqual('POST'); - expect(req.data).toEqual({ requests: [{ indexName: 'theIndexName' }] }); - }); - }); - - describe('bridge methods', () => { - test('throws when missing transformationOptions.region', () => { - //@ts-expect-error - expect(() => algoliasearch('APP_ID', 'API_KEY', { transformationOptions: {} })).toThrow( - '`region` is required in `transformationOptions`.', - ); - }); - - test('throws when calling the transformation methods without init parameters', async () => { - await expect( - client.saveObjectsWithTransformation({ - indexName: 'foo', - objects: [{ objectID: 'bar', baz: 42 }], - waitForTasks: true, - }), - ).rejects.toThrow('`transformationOptions` must be set in the client config before calling this method.'); - - await expect( - client.partialUpdateObjectsWithTransformation({ - indexName: 'foo', - objects: [{ objectID: 'bar', baz: 42 }], - waitForTasks: true, - }), - ).rejects.toThrow('`transformationOptions` must be set in the client config before calling this method.'); - }); - }); -}); - -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', - 'x-algolia-request-id': expect.stringMatching(/^[0-9A-Za-z]{11}$/), - }); - }); - - 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', - 'x-algolia-request-id': expect.stringMatching(/^[0-9A-Za-z]{11}$/), - }); - }); - - 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', - 'x-algolia-request-id': expect.stringMatching(/^[0-9A-Za-z]{11}$/), - }); - }); -}); - -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', - 'x-algolia-request-id': expect.stringMatching(/^[0-9A-Za-z]{11}$/), - }); - - 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', - 'x-algolia-request-id': expect.stringMatching(/^[0-9A-Za-z]{11}$/), - }); - }); -}); - -describe('browseSynonyms', () => { - test('paginates until a non-full page and never re-fetches page 0 (CR-11727)', async () => { - const hitsPerPage = 1000; - const pagesRequested: number[] = []; - - const paginatingRequester: Requester = { - send(request: EndRequest) { - const body = (typeof request.data === 'string' ? JSON.parse(request.data) : {}) as { page?: number }; - const page = body.page ?? 0; - pagesRequested.push(page); - - // Full first page, then a partial page: a correct iterator walks page 0 then page 1 and stops. - const count = page === 0 ? hitsPerPage : 3; - const hits = Array.from({ length: count }, (_, i) => ({ objectID: `page${page}-hit${i}` })); - - return Promise.resolve({ - content: JSON.stringify({ hits, nbHits: hitsPerPage + 3 }), - isTimedOut: false, - status: 200, - }); - }, - }; - - const paginatingClient = algoliasearch('APP_ID', 'API_KEY', { requester: paginatingRequester }); - - const objectIDs: string[] = []; - await paginatingClient.browseSynonyms({ - indexName: 'my-index', - aggregator: (response) => { - for (const hit of response.hits) { - objectIDs.push(hit.objectID); - } - }, - }); - - expect(pagesRequested).toEqual([0, 1]); - expect(objectIDs).toHaveLength(hitsPerPage + 3); - expect(new Set(objectIDs).size).toEqual(hitsPerPage + 3); - }); -}); diff --git a/packages/algoliasearch/__tests__/algoliasearch.fetch.test.ts b/packages/algoliasearch/__tests__/algoliasearch.fetch.test.ts deleted file mode 100644 index 76379dfd8..000000000 --- a/packages/algoliasearch/__tests__/algoliasearch.fetch.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -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', async () => { - const consoleInfo = vi.spyOn(console, 'info').mockImplementation(() => {}); - - const client = algoliasearch('APP_ID', 'API_KEY', { - logger: createConsoleLogger(LogLevelEnum.Debug), - // every host fails, exercising the retry logging path without a real request that could outlive the test - requester: { - send: () => Promise.resolve({ content: 'internal error', isTimedOut: false, status: 500 }), - }, - }); - - await expect(client.setSettings({ indexName: 'foo', indexSettings: {} })).rejects.toThrow(); - - expect(consoleInfo).toHaveBeenCalledWith('Retryable failure', expect.any(Object)); -}); diff --git a/packages/algoliasearch/__tests__/algoliasearch.node.test.ts b/packages/algoliasearch/__tests__/algoliasearch.node.test.ts deleted file mode 100644 index b610fe2fa..000000000 --- a/packages/algoliasearch/__tests__/algoliasearch.node.test.ts +++ /dev/null @@ -1,147 +0,0 @@ -import { expect, test, vi } from 'vitest'; - -import type { EndRequest, Requester } from '../../client-common/src/types'; -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(); -}); - -function createRecordingRequester(): { requester: Requester; requests: EndRequest[] } { - const requests: EndRequest[] = []; - - return { - requests, - requester: { - send(request: EndRequest) { - requests.push(request); - let content = JSON.stringify({ taskID: 42, objectIDs: [], updatedAt: '2026-01-01T00:00:00Z' }); - if (request.url.includes('/task/')) { - content = JSON.stringify({ status: 'published', updatedAt: '2026-01-01T00:00:00Z' }); - } else if (request.url.includes('/push/')) { - content = JSON.stringify({ runID: 'run-1', eventID: 'event-1', message: 'pushed' }); - } else if (request.url.includes('/events/')) { - content = JSON.stringify({ - eventID: 'event-1', - runID: 'run-1', - status: 'succeeded', - type: 'record', - batchSize: 1, - publishedAt: '2026-01-01T00:00:00Z', - }); - } - - return Promise.resolve({ content, isTimedOut: false, status: 200 }); - }, - }, - }; -} - -test('chunkedBatch shares one request-id across its batch calls and task polls', async () => { - const { requester, requests } = createRecordingRequester(); - const client = algoliasearch('APP_ID', 'API_KEY', { requester }); - const objects = Array.from({ length: 1500 }, (_, i) => ({ objectID: `${i}` })); - - await client.chunkedBatch({ indexName: 'foo', objects, waitForTasks: true }); - - expect(requests).toHaveLength(4); - const ids = requests.map((request) => request.headers['request-id']); - expect(ids[0]).toMatch(/^[0-9A-Za-z]{11}$/); - expect(new Set(ids).size).toBe(1); -}); - -test('replaceAllObjects shares one request-id across copy, batch, wait and move', async () => { - const { requester, requests } = createRecordingRequester(); - const client = algoliasearch('APP_ID', 'API_KEY', { requester }); - - await client.replaceAllObjects({ indexName: 'foo', objects: [{ objectID: '1' }] }); - - expect(requests).toHaveLength(8); - const ids = requests.map((request) => request.headers['request-id']); - expect(ids[0]).toMatch(/^[0-9A-Za-z]{11}$/); - expect(new Set(ids).size).toBe(1); -}); - -test('replaceAllObjectsWithTransformation shares one request-id across its search calls and sends none to ingestion', async () => { - const { requester, requests } = createRecordingRequester(); - const client = algoliasearch('APP_ID', 'API_KEY', { - requester, - transformationOptions: { region: 'eu', requester }, - }); - - await client.replaceAllObjectsWithTransformation({ indexName: 'foo', objects: [{ objectID: '1' }] }); - - const searchRequests = requests.filter((request) => request.url.includes('algolia.net')); - const ingestionRequests = requests.filter((request) => request.url.includes('data.eu.algolia.com')); - - expect(requests).toHaveLength(8); - expect(searchRequests).toHaveLength(6); - expect(ingestionRequests).toHaveLength(2); - - const searchIds = searchRequests.map((request) => request.headers['request-id']); - expect(searchIds[0]).toMatch(/^[0-9A-Za-z]{11}$/); - expect(new Set(searchIds).size).toBe(1); - - for (const request of ingestionRequests) { - expect(request.headers['request-id']).toBeUndefined(); - expect(new URL(request.url).searchParams.get('x-algolia-request-id')).toBeNull(); - } -}); - -test('each helper invocation mints a fresh request-id', async () => { - const { requester, requests } = createRecordingRequester(); - const client = algoliasearch('APP_ID', 'API_KEY', { requester }); - - await client.chunkedBatch({ indexName: 'foo', objects: [{ objectID: '1' }] }); - await client.chunkedBatch({ indexName: 'foo', objects: [{ objectID: '1' }] }); - - expect(requests).toHaveLength(2); - expect(requests[0].headers['request-id']).not.toBe(requests[1].headers['request-id']); -}); - -test('a caller-supplied request-id flows through helpers untouched', async () => { - const { requester, requests } = createRecordingRequester(); - const client = algoliasearch('APP_ID', 'API_KEY', { requester }); - - await client.chunkedBatch( - { indexName: 'foo', objects: [{ objectID: '1' }], waitForTasks: true }, - { headers: { 'request-id': 'CallerChose' } }, - ); - - expect(requests).toHaveLength(2); - expect(requests.map((request) => request.headers['request-id'])).toEqual(['CallerChose', 'CallerChose']); -}); - -test('with logger', async () => { - const consoleInfo = vi.spyOn(console, 'info').mockImplementation(() => {}); - - const client = algoliasearch('APP_ID', 'API_KEY', { - logger: createConsoleLogger(LogLevelEnum.Debug), - // every host fails, exercising the retry logging path without a real request that could outlive the test - requester: { - send: () => Promise.resolve({ content: 'internal error', isTimedOut: false, status: 500 }), - }, - }); - - await expect(client.setSettings({ indexName: 'foo', indexSettings: {} })).rejects.toThrow(); - - expect(consoleInfo).toHaveBeenCalledWith('Retryable failure', expect.any(Object)); -}); diff --git a/packages/algoliasearch/__tests__/algoliasearch.worker.test.ts b/packages/algoliasearch/__tests__/algoliasearch.worker.test.ts deleted file mode 100644 index 2f4cfc6de..000000000 --- a/packages/algoliasearch/__tests__/algoliasearch.worker.test.ts +++ /dev/null @@ -1,54 +0,0 @@ -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', async () => { - const consoleInfo = vi.spyOn(console, 'info').mockImplementation(() => {}); - - const client = algoliasearch('APP_ID', 'API_KEY', { - logger: createConsoleLogger(LogLevelEnum.Debug), - // every host fails, exercising the retry logging path without a real request that could outlive the test - requester: { - send: () => Promise.resolve({ content: 'internal error', isTimedOut: false, status: 500 }), - }, - }); - - await expect(client.setSettings({ indexName: 'foo', indexSettings: {} })).rejects.toThrow(); - - expect(consoleInfo).toHaveBeenCalledWith('Retryable failure', expect.any(Object)); -}); diff --git a/packages/algoliasearch/__tests__/tsconfig.json b/packages/algoliasearch/__tests__/tsconfig.json deleted file mode 100644 index b719fa625..000000000 --- a/packages/algoliasearch/__tests__/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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 new file mode 100644 index 000000000..9488148a2 --- /dev/null +++ b/packages/algoliasearch/api-extractor-lite.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 000000000..6f029708c --- /dev/null +++ b/packages/algoliasearch/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 deleted file mode 100644 index dc143f1d3..000000000 --- a/packages/algoliasearch/builds/browser.ts +++ /dev/null @@ -1,397 +0,0 @@ -// Code generated by OpenAPI Generator (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, RequestOptions } from '@algolia/client-common'; -import { DEFAULT_REPLACE_ALL_OBJECTS_MAX_RETRIES, logWarning, withRequestId } from '@algolia/client-common'; - -import type { AbtestingV3Client } from '@algolia/abtesting'; -import { abtestingV3Client } from '@algolia/abtesting'; -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 { - PartialUpdateObjectsOptions, - ReplaceAllObjectsOptions, - ReplaceAllObjectsWithTransformationResponse, - SaveObjectsOptions, -} from '@algolia/client-search'; -import type { WatchResponse } from '@algolia/ingestion'; - -import type { - AbtestingRegionOptions, - AbtestingV3RegionOptions, - AnalyticsRegionOptions, - IngestionRegion, - IngestionRegionOptions, - InitClientOptions, - InsightsRegionOptions, - PersonalizationRegionOptions, - QuerySuggestionsRegionOptions, -} from './models'; - -export * from './models'; - -export type Algoliasearch = SearchClient & { - initAbtesting: (initOptions: InitClientOptions & AbtestingRegionOptions) => AbtestingClient; - initAbtestingV3: (initOptions: InitClientOptions & AbtestingV3RegionOptions) => AbtestingV3Client; - 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; - - // Bridge helpers to expose along with the search endpoints at the root of the API client - - /** - * Helper: Similar to the `saveObjects` method but requires a Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) to be created first, in order to transform records before indexing them to Algolia. The `region` must have been passed to the client instantiation method. - * - * @summary Save objects to an Algolia index by leveraging the Transformation pipeline setup using the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/). - * @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 saveObjects.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 saveObjects.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `push` method and merged with the transporter requestOptions. - */ - saveObjectsWithTransformation: ( - options: SaveObjectsOptions, - requestOptions?: RequestOptions | undefined, - ) => Promise>; - - /** - * Helper: Similar to the `partialUpdateObjects` method but requires a Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) to be created first, in order to transform records before indexing them to Algolia. The `region` must have been passed to the client instantiation method. - * - * @summary Save objects to an Algolia index by leveraging the Transformation pipeline setup in the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/). - * @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 partialUpdateObjects.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 partialUpdateObjects.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `push` method and merged with the transporter requestOptions. - */ - partialUpdateObjectsWithTransformation: ( - options: PartialUpdateObjectsOptions, - requestOptions?: RequestOptions | undefined, - ) => Promise>; - - /** - * Helper: Similar to the `replaceAllObjects` method but requires a Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) to be created first, in order to transform records before indexing them to Algolia. The `region` must have been passed to the client instantiation method. - * - * Warning: calling this method with an empty `objects` list replaces the index with an empty one, deleting all existing records. - * - * @summary Helper: Replaces all objects (records) in the given `index_name` by leveraging the Transformation pipeline setup in the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) 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 replaceAllObjects.maxRetries - The maximum number of retries when polling for task completion. 800 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `push`, `operationIndex` and `getEvent` method and merged with the transporter requestOptions. - */ - replaceAllObjectsWithTransformation: ( - options: ReplaceAllObjectsOptions, - requestOptions?: RequestOptions | undefined, - ) => Promise; -}; - -export type TransformationOptions = { - // When provided, a second transporter will be created in order to leverage the `*WithTransformation` methods exposed by the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/). - transformationOptions?: { - region: IngestionRegion; - } & ClientOptions; - - /** @deprecated Use `transformationOptions` instead. */ - transformation?: - | { - // The region of your Algolia application ID, used to target the correct hosts of the transformation service. - region: IngestionRegion; - } - | undefined; -}; - -export function algoliasearch( - appId: string, - apiKey: string, - options?: (ClientOptions & TransformationOptions) | undefined, -): 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); - - let transformationConfig: ({ region: IngestionRegion } & ClientOptions) | undefined; - - if (options?.transformationOptions) { - transformationConfig = options.transformationOptions; - } else if (options?.transformation) { - transformationConfig = { region: options.transformation.region }; - } - - let ingestionTransporter: IngestionClient | undefined; - if (transformationConfig) { - if (!transformationConfig.region) { - throw new Error( - '`region` is required in `transformationOptions`. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - const { region, ...ingestionOptions } = transformationConfig; - ingestionTransporter = ingestionClient(appId, apiKey, region, ingestionOptions); - } - - return { - ...client, - - async saveObjectsWithTransformation( - { indexName, objects, batchSize, waitForTasks, maxRetries }, - requestOptions, - ): Promise> { - if (!ingestionTransporter) { - throw new Error( - '`transformationOptions` must be set in the client config before calling this method. It defaults to the Ingestion API defaults. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - return ingestionTransporter.chunkedPush( - { indexName, objects, action: 'addObject', batchSize, waitForTasks, maxRetries }, - requestOptions, - ); - }, - - async partialUpdateObjectsWithTransformation( - { indexName, objects, createIfNotExists, batchSize, waitForTasks, maxRetries }, - requestOptions, - ): Promise> { - if (!ingestionTransporter) { - throw new Error( - '`transformationOptions` must be set in the client config before calling this method. It defaults to the Ingestion API defaults. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - return ingestionTransporter.chunkedPush( - { - indexName, - objects, - action: createIfNotExists ? 'partialUpdateObject' : 'partialUpdateObjectNoCreate', - batchSize, - waitForTasks, - maxRetries, - }, - requestOptions, - ); - }, - - async replaceAllObjectsWithTransformation( - { - indexName, - objects, - batchSize, - scopes, - maxRetries = DEFAULT_REPLACE_ALL_OBJECTS_MAX_RETRIES, - }: ReplaceAllObjectsOptions, - requestOptions?: RequestOptions | undefined, - ): Promise { - if (!ingestionTransporter) { - throw new Error( - '`transformationOptions` must be set in the client config before calling this method. It defaults to the Ingestion API defaults. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - const searchRequestOptions = withRequestId(client.transporter, requestOptions); - - if (objects.length === 0) { - logWarning( - client.transporter.logger, - `replaceAllObjectsWithTransformation was called with an empty list of objects, which will delete all records currently in the "${indexName}" index.`, - ); - } - - 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, - }, - }, - searchRequestOptions, - ); - - const watchResponses = await ingestionTransporter.chunkedPush( - { - indexName: tmpIndexName, - objects, - waitForTasks: true, - batchSize, - referenceIndexName: indexName, - maxRetries, - }, - requestOptions, - ); - - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: copyOperationResponse.taskID, - maxRetries, - }, - searchRequestOptions, - ); - - copyOperationResponse = await this.operationIndex( - { - indexName, - operationIndexParams: { - operation: 'copy', - destination: tmpIndexName, - scope: scopes, - }, - }, - searchRequestOptions, - ); - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: copyOperationResponse.taskID, - maxRetries, - }, - searchRequestOptions, - ); - - const moveOperationResponse = await this.operationIndex( - { - indexName: tmpIndexName, - operationIndexParams: { operation: 'move', destination: indexName }, - }, - searchRequestOptions, - ); - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: moveOperationResponse.taskID, - maxRetries, - }, - searchRequestOptions, - ); - - return { copyOperationResponse, watchResponses, moveOperationResponse }; - } catch (error) { - await this.deleteIndex({ indexName: tmpIndexName }, searchRequestOptions); - - throw error; - } - }, - - /** - * 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, - ); - }, - - initAbtestingV3: (initOptions: InitClientOptions & AbtestingV3RegionOptions): AbtestingV3Client => { - return abtestingV3Client( - 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 deleted file mode 100644 index dc143f1d3..000000000 --- a/packages/algoliasearch/builds/fetch.ts +++ /dev/null @@ -1,397 +0,0 @@ -// Code generated by OpenAPI Generator (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, RequestOptions } from '@algolia/client-common'; -import { DEFAULT_REPLACE_ALL_OBJECTS_MAX_RETRIES, logWarning, withRequestId } from '@algolia/client-common'; - -import type { AbtestingV3Client } from '@algolia/abtesting'; -import { abtestingV3Client } from '@algolia/abtesting'; -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 { - PartialUpdateObjectsOptions, - ReplaceAllObjectsOptions, - ReplaceAllObjectsWithTransformationResponse, - SaveObjectsOptions, -} from '@algolia/client-search'; -import type { WatchResponse } from '@algolia/ingestion'; - -import type { - AbtestingRegionOptions, - AbtestingV3RegionOptions, - AnalyticsRegionOptions, - IngestionRegion, - IngestionRegionOptions, - InitClientOptions, - InsightsRegionOptions, - PersonalizationRegionOptions, - QuerySuggestionsRegionOptions, -} from './models'; - -export * from './models'; - -export type Algoliasearch = SearchClient & { - initAbtesting: (initOptions: InitClientOptions & AbtestingRegionOptions) => AbtestingClient; - initAbtestingV3: (initOptions: InitClientOptions & AbtestingV3RegionOptions) => AbtestingV3Client; - 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; - - // Bridge helpers to expose along with the search endpoints at the root of the API client - - /** - * Helper: Similar to the `saveObjects` method but requires a Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) to be created first, in order to transform records before indexing them to Algolia. The `region` must have been passed to the client instantiation method. - * - * @summary Save objects to an Algolia index by leveraging the Transformation pipeline setup using the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/). - * @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 saveObjects.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 saveObjects.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `push` method and merged with the transporter requestOptions. - */ - saveObjectsWithTransformation: ( - options: SaveObjectsOptions, - requestOptions?: RequestOptions | undefined, - ) => Promise>; - - /** - * Helper: Similar to the `partialUpdateObjects` method but requires a Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) to be created first, in order to transform records before indexing them to Algolia. The `region` must have been passed to the client instantiation method. - * - * @summary Save objects to an Algolia index by leveraging the Transformation pipeline setup in the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/). - * @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 partialUpdateObjects.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 partialUpdateObjects.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `push` method and merged with the transporter requestOptions. - */ - partialUpdateObjectsWithTransformation: ( - options: PartialUpdateObjectsOptions, - requestOptions?: RequestOptions | undefined, - ) => Promise>; - - /** - * Helper: Similar to the `replaceAllObjects` method but requires a Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) to be created first, in order to transform records before indexing them to Algolia. The `region` must have been passed to the client instantiation method. - * - * Warning: calling this method with an empty `objects` list replaces the index with an empty one, deleting all existing records. - * - * @summary Helper: Replaces all objects (records) in the given `index_name` by leveraging the Transformation pipeline setup in the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) 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 replaceAllObjects.maxRetries - The maximum number of retries when polling for task completion. 800 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `push`, `operationIndex` and `getEvent` method and merged with the transporter requestOptions. - */ - replaceAllObjectsWithTransformation: ( - options: ReplaceAllObjectsOptions, - requestOptions?: RequestOptions | undefined, - ) => Promise; -}; - -export type TransformationOptions = { - // When provided, a second transporter will be created in order to leverage the `*WithTransformation` methods exposed by the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/). - transformationOptions?: { - region: IngestionRegion; - } & ClientOptions; - - /** @deprecated Use `transformationOptions` instead. */ - transformation?: - | { - // The region of your Algolia application ID, used to target the correct hosts of the transformation service. - region: IngestionRegion; - } - | undefined; -}; - -export function algoliasearch( - appId: string, - apiKey: string, - options?: (ClientOptions & TransformationOptions) | undefined, -): 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); - - let transformationConfig: ({ region: IngestionRegion } & ClientOptions) | undefined; - - if (options?.transformationOptions) { - transformationConfig = options.transformationOptions; - } else if (options?.transformation) { - transformationConfig = { region: options.transformation.region }; - } - - let ingestionTransporter: IngestionClient | undefined; - if (transformationConfig) { - if (!transformationConfig.region) { - throw new Error( - '`region` is required in `transformationOptions`. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - const { region, ...ingestionOptions } = transformationConfig; - ingestionTransporter = ingestionClient(appId, apiKey, region, ingestionOptions); - } - - return { - ...client, - - async saveObjectsWithTransformation( - { indexName, objects, batchSize, waitForTasks, maxRetries }, - requestOptions, - ): Promise> { - if (!ingestionTransporter) { - throw new Error( - '`transformationOptions` must be set in the client config before calling this method. It defaults to the Ingestion API defaults. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - return ingestionTransporter.chunkedPush( - { indexName, objects, action: 'addObject', batchSize, waitForTasks, maxRetries }, - requestOptions, - ); - }, - - async partialUpdateObjectsWithTransformation( - { indexName, objects, createIfNotExists, batchSize, waitForTasks, maxRetries }, - requestOptions, - ): Promise> { - if (!ingestionTransporter) { - throw new Error( - '`transformationOptions` must be set in the client config before calling this method. It defaults to the Ingestion API defaults. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - return ingestionTransporter.chunkedPush( - { - indexName, - objects, - action: createIfNotExists ? 'partialUpdateObject' : 'partialUpdateObjectNoCreate', - batchSize, - waitForTasks, - maxRetries, - }, - requestOptions, - ); - }, - - async replaceAllObjectsWithTransformation( - { - indexName, - objects, - batchSize, - scopes, - maxRetries = DEFAULT_REPLACE_ALL_OBJECTS_MAX_RETRIES, - }: ReplaceAllObjectsOptions, - requestOptions?: RequestOptions | undefined, - ): Promise { - if (!ingestionTransporter) { - throw new Error( - '`transformationOptions` must be set in the client config before calling this method. It defaults to the Ingestion API defaults. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - const searchRequestOptions = withRequestId(client.transporter, requestOptions); - - if (objects.length === 0) { - logWarning( - client.transporter.logger, - `replaceAllObjectsWithTransformation was called with an empty list of objects, which will delete all records currently in the "${indexName}" index.`, - ); - } - - 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, - }, - }, - searchRequestOptions, - ); - - const watchResponses = await ingestionTransporter.chunkedPush( - { - indexName: tmpIndexName, - objects, - waitForTasks: true, - batchSize, - referenceIndexName: indexName, - maxRetries, - }, - requestOptions, - ); - - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: copyOperationResponse.taskID, - maxRetries, - }, - searchRequestOptions, - ); - - copyOperationResponse = await this.operationIndex( - { - indexName, - operationIndexParams: { - operation: 'copy', - destination: tmpIndexName, - scope: scopes, - }, - }, - searchRequestOptions, - ); - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: copyOperationResponse.taskID, - maxRetries, - }, - searchRequestOptions, - ); - - const moveOperationResponse = await this.operationIndex( - { - indexName: tmpIndexName, - operationIndexParams: { operation: 'move', destination: indexName }, - }, - searchRequestOptions, - ); - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: moveOperationResponse.taskID, - maxRetries, - }, - searchRequestOptions, - ); - - return { copyOperationResponse, watchResponses, moveOperationResponse }; - } catch (error) { - await this.deleteIndex({ indexName: tmpIndexName }, searchRequestOptions); - - throw error; - } - }, - - /** - * 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, - ); - }, - - initAbtestingV3: (initOptions: InitClientOptions & AbtestingV3RegionOptions): AbtestingV3Client => { - return abtestingV3Client( - 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 deleted file mode 100644 index de0e4c4c0..000000000 --- a/packages/algoliasearch/builds/models.ts +++ /dev/null @@ -1,328 +0,0 @@ -// Code generated by OpenAPI Generator (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 AbtestingV3Region, RegionOptions as AbtestingV3RegionOptions } from '@algolia/abtesting'; -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 PersonalizationRegion, - RegionOptions as PersonalizationRegionOptions, -} from '@algolia/client-personalization'; -import type { - Region as QuerySuggestionsRegion, - RegionOptions as QuerySuggestionsRegionOptions, -} from '@algolia/client-query-suggestions'; -import type { Region as IngestionRegion, RegionOptions as IngestionRegionOptions } from '@algolia/ingestion'; - -import type { Direction } from '@algolia/client-analytics'; -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'; -import type { Event, EventStatus, WatchResponse } from '@algolia/ingestion'; - -import type { - ABTest, - ABTestConfiguration, - ABTestResponse, - AbTestsVariant, - AbTestsVariantSearchParams, - AddABTestsRequest, - AddABTestsVariant, - CustomSearchParams, - DeleteABTestProps, - EffectMetric, - EmptySearchFilter, - EstimateABTestRequest, - EstimateABTestResponse, - EstimateConfiguration, - FilterEffects, - GetABTestProps, - ListABTestsProps, - ListABTestsResponse, - MinimumDetectableEffect, - OutliersFilter, - Status, - StopABTestProps, - Variant, -} from '@algolia/client-abtesting'; - -export * from '@algolia/abtesting'; -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 - | AbtestingV3Region - | AnalyticsRegion - | IngestionRegion - | InsightsRegion - | PersonalizationRegion - | QuerySuggestionsRegion; -export type RegionOptions = - | AbtestingRegionOptions - | AbtestingV3RegionOptions - | AnalyticsRegionOptions - | IngestionRegionOptions - | InsightsRegionOptions - | PersonalizationRegionOptions - | QuerySuggestionsRegionOptions; - -export type { - AbtestingRegion, - AbtestingRegionOptions, - AbtestingV3Region, - AbtestingV3RegionOptions, - AnalyticsRegion, - AnalyticsRegionOptions, - EventType, - IngestionRegion, - IngestionRegionOptions, - InsightsRegion, - InsightsRegionOptions, - PersonalizationRegion, - PersonalizationRegionOptions, - QuerySuggestionsRegion, - QuerySuggestionsRegionOptions, - Status, -}; - -export type { - ABTest, - ABTestConfiguration, - ABTestResponse, - AbTestsVariant, - AbTestsVariantSearchParams, - Action, - AddABTestsRequest, - AddABTestsVariant, - 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, - CustomSearchParams, - DeleteABTestProps, - DeleteSourceProps, - DeletedAtResponse, - Direction, - Distinct, - Edit, - EditType, - EffectMetric, - EmptySearchFilter, - ErrorBase, - EstimateABTestRequest, - EstimateABTestResponse, - EstimateConfiguration, - Event, - EventStatus, - ExactOnSingleWordQuery, - Exhaustive, - FacetFilters, - FacetHits, - FacetOrdering, - FacetStats, - Facets, - FilterEffects, - GetABTestProps, - GetTaskProps, - HighlightResult, - HighlightResultOption, - Hit, - IgnorePlurals, - IndexSettingsAsSearchParams, - InsideBoundingBox, - Languages, - ListABTestsProps, - ListABTestsResponse, - MatchLevel, - MatchedGeoLocation, - MinimumDetectableEffect, - Mode, - NumericFilters, - OptionalFilters, - OptionalWords, - OutliersFilter, - 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, - StopABTestProps, - SupportedLanguage, - TagFilters, - TaskStatus, - TimeRange, - TypoTolerance, - TypoToleranceEnum, - Value, - Variant, - WatchResponse, - 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 deleted file mode 100644 index dc143f1d3..000000000 --- a/packages/algoliasearch/builds/node.ts +++ /dev/null @@ -1,397 +0,0 @@ -// Code generated by OpenAPI Generator (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, RequestOptions } from '@algolia/client-common'; -import { DEFAULT_REPLACE_ALL_OBJECTS_MAX_RETRIES, logWarning, withRequestId } from '@algolia/client-common'; - -import type { AbtestingV3Client } from '@algolia/abtesting'; -import { abtestingV3Client } from '@algolia/abtesting'; -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 { - PartialUpdateObjectsOptions, - ReplaceAllObjectsOptions, - ReplaceAllObjectsWithTransformationResponse, - SaveObjectsOptions, -} from '@algolia/client-search'; -import type { WatchResponse } from '@algolia/ingestion'; - -import type { - AbtestingRegionOptions, - AbtestingV3RegionOptions, - AnalyticsRegionOptions, - IngestionRegion, - IngestionRegionOptions, - InitClientOptions, - InsightsRegionOptions, - PersonalizationRegionOptions, - QuerySuggestionsRegionOptions, -} from './models'; - -export * from './models'; - -export type Algoliasearch = SearchClient & { - initAbtesting: (initOptions: InitClientOptions & AbtestingRegionOptions) => AbtestingClient; - initAbtestingV3: (initOptions: InitClientOptions & AbtestingV3RegionOptions) => AbtestingV3Client; - 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; - - // Bridge helpers to expose along with the search endpoints at the root of the API client - - /** - * Helper: Similar to the `saveObjects` method but requires a Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) to be created first, in order to transform records before indexing them to Algolia. The `region` must have been passed to the client instantiation method. - * - * @summary Save objects to an Algolia index by leveraging the Transformation pipeline setup using the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/). - * @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 saveObjects.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 saveObjects.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `push` method and merged with the transporter requestOptions. - */ - saveObjectsWithTransformation: ( - options: SaveObjectsOptions, - requestOptions?: RequestOptions | undefined, - ) => Promise>; - - /** - * Helper: Similar to the `partialUpdateObjects` method but requires a Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) to be created first, in order to transform records before indexing them to Algolia. The `region` must have been passed to the client instantiation method. - * - * @summary Save objects to an Algolia index by leveraging the Transformation pipeline setup in the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/). - * @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 partialUpdateObjects.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 partialUpdateObjects.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `push` method and merged with the transporter requestOptions. - */ - partialUpdateObjectsWithTransformation: ( - options: PartialUpdateObjectsOptions, - requestOptions?: RequestOptions | undefined, - ) => Promise>; - - /** - * Helper: Similar to the `replaceAllObjects` method but requires a Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) to be created first, in order to transform records before indexing them to Algolia. The `region` must have been passed to the client instantiation method. - * - * Warning: calling this method with an empty `objects` list replaces the index with an empty one, deleting all existing records. - * - * @summary Helper: Replaces all objects (records) in the given `index_name` by leveraging the Transformation pipeline setup in the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) 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 replaceAllObjects.maxRetries - The maximum number of retries when polling for task completion. 800 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `push`, `operationIndex` and `getEvent` method and merged with the transporter requestOptions. - */ - replaceAllObjectsWithTransformation: ( - options: ReplaceAllObjectsOptions, - requestOptions?: RequestOptions | undefined, - ) => Promise; -}; - -export type TransformationOptions = { - // When provided, a second transporter will be created in order to leverage the `*WithTransformation` methods exposed by the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/). - transformationOptions?: { - region: IngestionRegion; - } & ClientOptions; - - /** @deprecated Use `transformationOptions` instead. */ - transformation?: - | { - // The region of your Algolia application ID, used to target the correct hosts of the transformation service. - region: IngestionRegion; - } - | undefined; -}; - -export function algoliasearch( - appId: string, - apiKey: string, - options?: (ClientOptions & TransformationOptions) | undefined, -): 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); - - let transformationConfig: ({ region: IngestionRegion } & ClientOptions) | undefined; - - if (options?.transformationOptions) { - transformationConfig = options.transformationOptions; - } else if (options?.transformation) { - transformationConfig = { region: options.transformation.region }; - } - - let ingestionTransporter: IngestionClient | undefined; - if (transformationConfig) { - if (!transformationConfig.region) { - throw new Error( - '`region` is required in `transformationOptions`. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - const { region, ...ingestionOptions } = transformationConfig; - ingestionTransporter = ingestionClient(appId, apiKey, region, ingestionOptions); - } - - return { - ...client, - - async saveObjectsWithTransformation( - { indexName, objects, batchSize, waitForTasks, maxRetries }, - requestOptions, - ): Promise> { - if (!ingestionTransporter) { - throw new Error( - '`transformationOptions` must be set in the client config before calling this method. It defaults to the Ingestion API defaults. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - return ingestionTransporter.chunkedPush( - { indexName, objects, action: 'addObject', batchSize, waitForTasks, maxRetries }, - requestOptions, - ); - }, - - async partialUpdateObjectsWithTransformation( - { indexName, objects, createIfNotExists, batchSize, waitForTasks, maxRetries }, - requestOptions, - ): Promise> { - if (!ingestionTransporter) { - throw new Error( - '`transformationOptions` must be set in the client config before calling this method. It defaults to the Ingestion API defaults. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - return ingestionTransporter.chunkedPush( - { - indexName, - objects, - action: createIfNotExists ? 'partialUpdateObject' : 'partialUpdateObjectNoCreate', - batchSize, - waitForTasks, - maxRetries, - }, - requestOptions, - ); - }, - - async replaceAllObjectsWithTransformation( - { - indexName, - objects, - batchSize, - scopes, - maxRetries = DEFAULT_REPLACE_ALL_OBJECTS_MAX_RETRIES, - }: ReplaceAllObjectsOptions, - requestOptions?: RequestOptions | undefined, - ): Promise { - if (!ingestionTransporter) { - throw new Error( - '`transformationOptions` must be set in the client config before calling this method. It defaults to the Ingestion API defaults. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - const searchRequestOptions = withRequestId(client.transporter, requestOptions); - - if (objects.length === 0) { - logWarning( - client.transporter.logger, - `replaceAllObjectsWithTransformation was called with an empty list of objects, which will delete all records currently in the "${indexName}" index.`, - ); - } - - 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, - }, - }, - searchRequestOptions, - ); - - const watchResponses = await ingestionTransporter.chunkedPush( - { - indexName: tmpIndexName, - objects, - waitForTasks: true, - batchSize, - referenceIndexName: indexName, - maxRetries, - }, - requestOptions, - ); - - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: copyOperationResponse.taskID, - maxRetries, - }, - searchRequestOptions, - ); - - copyOperationResponse = await this.operationIndex( - { - indexName, - operationIndexParams: { - operation: 'copy', - destination: tmpIndexName, - scope: scopes, - }, - }, - searchRequestOptions, - ); - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: copyOperationResponse.taskID, - maxRetries, - }, - searchRequestOptions, - ); - - const moveOperationResponse = await this.operationIndex( - { - indexName: tmpIndexName, - operationIndexParams: { operation: 'move', destination: indexName }, - }, - searchRequestOptions, - ); - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: moveOperationResponse.taskID, - maxRetries, - }, - searchRequestOptions, - ); - - return { copyOperationResponse, watchResponses, moveOperationResponse }; - } catch (error) { - await this.deleteIndex({ indexName: tmpIndexName }, searchRequestOptions); - - throw error; - } - }, - - /** - * 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, - ); - }, - - initAbtestingV3: (initOptions: InitClientOptions & AbtestingV3RegionOptions): AbtestingV3Client => { - return abtestingV3Client( - 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 deleted file mode 100644 index dc143f1d3..000000000 --- a/packages/algoliasearch/builds/worker.ts +++ /dev/null @@ -1,397 +0,0 @@ -// Code generated by OpenAPI Generator (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, RequestOptions } from '@algolia/client-common'; -import { DEFAULT_REPLACE_ALL_OBJECTS_MAX_RETRIES, logWarning, withRequestId } from '@algolia/client-common'; - -import type { AbtestingV3Client } from '@algolia/abtesting'; -import { abtestingV3Client } from '@algolia/abtesting'; -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 { - PartialUpdateObjectsOptions, - ReplaceAllObjectsOptions, - ReplaceAllObjectsWithTransformationResponse, - SaveObjectsOptions, -} from '@algolia/client-search'; -import type { WatchResponse } from '@algolia/ingestion'; - -import type { - AbtestingRegionOptions, - AbtestingV3RegionOptions, - AnalyticsRegionOptions, - IngestionRegion, - IngestionRegionOptions, - InitClientOptions, - InsightsRegionOptions, - PersonalizationRegionOptions, - QuerySuggestionsRegionOptions, -} from './models'; - -export * from './models'; - -export type Algoliasearch = SearchClient & { - initAbtesting: (initOptions: InitClientOptions & AbtestingRegionOptions) => AbtestingClient; - initAbtestingV3: (initOptions: InitClientOptions & AbtestingV3RegionOptions) => AbtestingV3Client; - 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; - - // Bridge helpers to expose along with the search endpoints at the root of the API client - - /** - * Helper: Similar to the `saveObjects` method but requires a Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) to be created first, in order to transform records before indexing them to Algolia. The `region` must have been passed to the client instantiation method. - * - * @summary Save objects to an Algolia index by leveraging the Transformation pipeline setup using the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/). - * @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 saveObjects.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 saveObjects.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `push` method and merged with the transporter requestOptions. - */ - saveObjectsWithTransformation: ( - options: SaveObjectsOptions, - requestOptions?: RequestOptions | undefined, - ) => Promise>; - - /** - * Helper: Similar to the `partialUpdateObjects` method but requires a Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) to be created first, in order to transform records before indexing them to Algolia. The `region` must have been passed to the client instantiation method. - * - * @summary Save objects to an Algolia index by leveraging the Transformation pipeline setup in the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/). - * @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 partialUpdateObjects.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 partialUpdateObjects.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `push` method and merged with the transporter requestOptions. - */ - partialUpdateObjectsWithTransformation: ( - options: PartialUpdateObjectsOptions, - requestOptions?: RequestOptions | undefined, - ) => Promise>; - - /** - * Helper: Similar to the `replaceAllObjects` method but requires a Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) to be created first, in order to transform records before indexing them to Algolia. The `region` must have been passed to the client instantiation method. - * - * Warning: calling this method with an empty `objects` list replaces the index with an empty one, deleting all existing records. - * - * @summary Helper: Replaces all objects (records) in the given `index_name` by leveraging the Transformation pipeline setup in the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/) 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 replaceAllObjects.maxRetries - The maximum number of retries when polling for task completion. 800 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `push`, `operationIndex` and `getEvent` method and merged with the transporter requestOptions. - */ - replaceAllObjectsWithTransformation: ( - options: ReplaceAllObjectsOptions, - requestOptions?: RequestOptions | undefined, - ) => Promise; -}; - -export type TransformationOptions = { - // When provided, a second transporter will be created in order to leverage the `*WithTransformation` methods exposed by the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/). - transformationOptions?: { - region: IngestionRegion; - } & ClientOptions; - - /** @deprecated Use `transformationOptions` instead. */ - transformation?: - | { - // The region of your Algolia application ID, used to target the correct hosts of the transformation service. - region: IngestionRegion; - } - | undefined; -}; - -export function algoliasearch( - appId: string, - apiKey: string, - options?: (ClientOptions & TransformationOptions) | undefined, -): 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); - - let transformationConfig: ({ region: IngestionRegion } & ClientOptions) | undefined; - - if (options?.transformationOptions) { - transformationConfig = options.transformationOptions; - } else if (options?.transformation) { - transformationConfig = { region: options.transformation.region }; - } - - let ingestionTransporter: IngestionClient | undefined; - if (transformationConfig) { - if (!transformationConfig.region) { - throw new Error( - '`region` is required in `transformationOptions`. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - const { region, ...ingestionOptions } = transformationConfig; - ingestionTransporter = ingestionClient(appId, apiKey, region, ingestionOptions); - } - - return { - ...client, - - async saveObjectsWithTransformation( - { indexName, objects, batchSize, waitForTasks, maxRetries }, - requestOptions, - ): Promise> { - if (!ingestionTransporter) { - throw new Error( - '`transformationOptions` must be set in the client config before calling this method. It defaults to the Ingestion API defaults. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - return ingestionTransporter.chunkedPush( - { indexName, objects, action: 'addObject', batchSize, waitForTasks, maxRetries }, - requestOptions, - ); - }, - - async partialUpdateObjectsWithTransformation( - { indexName, objects, createIfNotExists, batchSize, waitForTasks, maxRetries }, - requestOptions, - ): Promise> { - if (!ingestionTransporter) { - throw new Error( - '`transformationOptions` must be set in the client config before calling this method. It defaults to the Ingestion API defaults. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - return ingestionTransporter.chunkedPush( - { - indexName, - objects, - action: createIfNotExists ? 'partialUpdateObject' : 'partialUpdateObjectNoCreate', - batchSize, - waitForTasks, - maxRetries, - }, - requestOptions, - ); - }, - - async replaceAllObjectsWithTransformation( - { - indexName, - objects, - batchSize, - scopes, - maxRetries = DEFAULT_REPLACE_ALL_OBJECTS_MAX_RETRIES, - }: ReplaceAllObjectsOptions, - requestOptions?: RequestOptions | undefined, - ): Promise { - if (!ingestionTransporter) { - throw new Error( - '`transformationOptions` must be set in the client config before calling this method. It defaults to the Ingestion API defaults. See https://www.algolia.com/doc/libraries/sdk/methods/ingestion/', - ); - } - - const searchRequestOptions = withRequestId(client.transporter, requestOptions); - - if (objects.length === 0) { - logWarning( - client.transporter.logger, - `replaceAllObjectsWithTransformation was called with an empty list of objects, which will delete all records currently in the "${indexName}" index.`, - ); - } - - 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, - }, - }, - searchRequestOptions, - ); - - const watchResponses = await ingestionTransporter.chunkedPush( - { - indexName: tmpIndexName, - objects, - waitForTasks: true, - batchSize, - referenceIndexName: indexName, - maxRetries, - }, - requestOptions, - ); - - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: copyOperationResponse.taskID, - maxRetries, - }, - searchRequestOptions, - ); - - copyOperationResponse = await this.operationIndex( - { - indexName, - operationIndexParams: { - operation: 'copy', - destination: tmpIndexName, - scope: scopes, - }, - }, - searchRequestOptions, - ); - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: copyOperationResponse.taskID, - maxRetries, - }, - searchRequestOptions, - ); - - const moveOperationResponse = await this.operationIndex( - { - indexName: tmpIndexName, - operationIndexParams: { operation: 'move', destination: indexName }, - }, - searchRequestOptions, - ); - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: moveOperationResponse.taskID, - maxRetries, - }, - searchRequestOptions, - ); - - return { copyOperationResponse, watchResponses, moveOperationResponse }; - } catch (error) { - await this.deleteIndex({ indexName: tmpIndexName }, searchRequestOptions); - - throw error; - } - }, - - /** - * 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, - ); - }, - - initAbtestingV3: (initOptions: InitClientOptions & AbtestingV3RegionOptions): AbtestingV3Client => { - return abtestingV3Client( - 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 e81a1cd3e..f3e17624b 100644 --- a/packages/algoliasearch/index.d.ts +++ b/packages/algoliasearch/index.d.ts @@ -1 +1,3 @@ -export * from './dist/node'; +/* eslint-disable import/no-unresolved*/ +export * from './dist/algoliasearch'; +export { default } from './dist/algoliasearch'; diff --git a/packages/algoliasearch/index.js b/packages/algoliasearch/index.js index 4a9cdb9ef..14ca1ec18 100644 --- a/packages/algoliasearch/index.js +++ b/packages/algoliasearch/index.js @@ -1 +1,15 @@ -module.exports = require('./dist/node.cjs'); +/* 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; diff --git a/packages/algoliasearch/lite.d.ts b/packages/algoliasearch/lite.d.ts index ea765f3bc..41a19612f 100644 --- a/packages/algoliasearch/lite.d.ts +++ b/packages/algoliasearch/lite.d.ts @@ -1 +1,3 @@ -export * from './dist/lite/node'; +/* eslint-disable import/no-unresolved*/ +export * from './dist/algoliasearch-lite'; +export { default } from './dist/algoliasearch-lite'; diff --git a/packages/algoliasearch/lite.js b/packages/algoliasearch/lite.js index ef1f99093..cdbfa358a 100644 --- a/packages/algoliasearch/lite.js +++ b/packages/algoliasearch/lite.js @@ -1 +1,2 @@ -module.exports = require('./dist/lite/builds/node.cjs'); +// eslint-disable-next-line functional/immutable-data, import/no-commonjs +module.exports = require('./index'); diff --git a/packages/algoliasearch/lite/builds/browser.ts b/packages/algoliasearch/lite/builds/browser.ts deleted file mode 100644 index 640e6c72f..000000000 --- a/packages/algoliasearch/lite/builds/browser.ts +++ /dev/null @@ -1,52 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -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 | undefined): LiteClient { - if (!appId || typeof appId !== 'string') { - throw new Error('`appId` is missing.'); - } - - if (!apiKey || typeof apiKey !== 'string') { - throw new Error('`apiKey` is missing.'); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - return createLiteClient({ - appId, - apiKey, - timeouts: { - connect: 1000, - read: 2000, - write: 30000, - }, - logger: createNullLogger(), - requester: createXhrRequester(), - algoliaAgents: [{ segment: 'Browser' }], - authMode: 'WithinQueryParameters', - requestIdChannel: 'queryParameters', - responsesCache: createMemoryCache(), - requestsCache: createMemoryCache({ serializable: false }), - hostsCache: createFallbackableCache({ - caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], - }), - ...browserOptions, - }); -} - -export type LiteClient = ReturnType; diff --git a/packages/algoliasearch/lite/builds/node.ts b/packages/algoliasearch/lite/builds/node.ts deleted file mode 100644 index 28f46595a..000000000 --- a/packages/algoliasearch/lite/builds/node.ts +++ /dev/null @@ -1,45 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { gzipSync } from 'node:zlib'; - -export type LiteClient = ReturnType; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -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 | undefined): 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 }], - requestIdChannel: 'headers', - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }); -} diff --git a/packages/algoliasearch/lite/model/acl.ts b/packages/algoliasearch/lite/model/acl.ts deleted file mode 100644 index 6e8d01b27..000000000 --- a/packages/algoliasearch/lite/model/acl.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Code generated by 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' - | 'nluWriteProject' - | 'nluReadProject' - | 'nluWriteEntity' - | 'nluReadEntity' - | 'nluWriteIntent' - | 'nluReadIntent' - | 'nluPrediction' - | 'nluReadAnswers'; diff --git a/packages/algoliasearch/lite/model/advancedSyntaxFeatures.ts b/packages/algoliasearch/lite/model/advancedSyntaxFeatures.ts deleted file mode 100644 index 61e577d48..000000000 --- a/packages/algoliasearch/lite/model/advancedSyntaxFeatures.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index b4d50c7a5..000000000 --- a/packages/algoliasearch/lite/model/alternativesAsExact.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 76fe812bd..000000000 --- a/packages/algoliasearch/lite/model/apiKey.ts +++ /dev/null @@ -1,48 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - /** - * Maximum number of results this API key can retrieve in one query. By default, there\'s no limit. - */ - maxHitsPerQuery?: number | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Duration (in seconds) after which the API key expires. By default, API keys don\'t expire. - */ - validity?: number | undefined; -}; diff --git a/packages/algoliasearch/lite/model/aroundPrecision.ts b/packages/algoliasearch/lite/model/aroundPrecision.ts deleted file mode 100644 index 79ff0cd59..000000000 --- a/packages/algoliasearch/lite/model/aroundPrecision.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 8198f1e75..000000000 --- a/packages/algoliasearch/lite/model/aroundRadius.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index e5f107060..000000000 --- a/packages/algoliasearch/lite/model/aroundRadiusAll.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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/autoFilteringFilterEntry.ts b/packages/algoliasearch/lite/model/autoFilteringFilterEntry.ts deleted file mode 100644 index 1a514ca6d..000000000 --- a/packages/algoliasearch/lite/model/autoFilteringFilterEntry.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 AutoFilteringFilterEntry = string | Array; diff --git a/packages/algoliasearch/lite/model/autoFilteringResult.ts b/packages/algoliasearch/lite/model/autoFilteringResult.ts deleted file mode 100644 index 09bea7eda..000000000 --- a/packages/algoliasearch/lite/model/autoFilteringResult.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AutoFilteringFilterEntry } from './autoFilteringFilterEntry'; - -/** - * Result of automatic filtering applied by Query Categorization. - */ -export type AutoFilteringResult = { - /** - * Whether automatic filtering was applied to this query. - */ - enabled?: boolean | undefined; - - /** - * Maximum category hierarchy depth used for filtering. - */ - maxDepth?: number | undefined; - - /** - * Facet filters automatically applied to the query. - */ - facetFilters?: Array | undefined; - - /** - * Optional filters automatically applied to boost relevant categories. - */ - optionalFilters?: Array | undefined; -}; diff --git a/packages/algoliasearch/lite/model/automaticFacetFilter.ts b/packages/algoliasearch/lite/model/automaticFacetFilter.ts deleted file mode 100644 index 9162f0ff7..000000000 --- a/packages/algoliasearch/lite/model/automaticFacetFilter.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Whether the filter is disjunctive or conjunctive. If true the filter has multiple matches, multiple occurrences are combined with the logical `OR` operation. If false, multiple occurrences are combined with the logical `AND` operation. - */ - disjunctive?: boolean | undefined; -}; diff --git a/packages/algoliasearch/lite/model/automaticFacetFilters.ts b/packages/algoliasearch/lite/model/automaticFacetFilters.ts deleted file mode 100644 index 6fdc07bc7..000000000 --- a/packages/algoliasearch/lite/model/automaticFacetFilters.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 8eaa250e7..000000000 --- a/packages/algoliasearch/lite/model/banner.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - link?: BannerLink | undefined; -}; diff --git a/packages/algoliasearch/lite/model/bannerImage.ts b/packages/algoliasearch/lite/model/bannerImage.ts deleted file mode 100644 index a41d758ff..000000000 --- a/packages/algoliasearch/lite/model/bannerImage.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - title?: string | undefined; -}; diff --git a/packages/algoliasearch/lite/model/bannerImageUrl.ts b/packages/algoliasearch/lite/model/bannerImageUrl.ts deleted file mode 100644 index 25454a0b9..000000000 --- a/packages/algoliasearch/lite/model/bannerImageUrl.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/bannerLink.ts b/packages/algoliasearch/lite/model/bannerLink.ts deleted file mode 100644 index a9161c475..000000000 --- a/packages/algoliasearch/lite/model/bannerLink.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/baseGetApiKeyResponse.ts b/packages/algoliasearch/lite/model/baseGetApiKeyResponse.ts deleted file mode 100644 index 55547ef1e..000000000 --- a/packages/algoliasearch/lite/model/baseGetApiKeyResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index e5f1d2d96..000000000 --- a/packages/algoliasearch/lite/model/baseIndexSettings.ts +++ /dev/null @@ -1,105 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Attributes for which to split [camel case](https://wikipedia.org/wiki/Camel_case) words. Attribute names are case-sensitive. - */ - camelCaseAttributes?: Array | undefined; - - /** - * 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 | undefined; - - /** - * Languages for language-specific processing steps, such as word detection and dictionary settings. **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 | undefined; - - /** - * 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 | undefined; - - /** - * Whether arrays with exclusively non-negative integers should be compressed for better performance. If true, the compressed arrays may be reordered. - */ - allowCompressionOfIntegerArray?: boolean | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * An object with custom data. You can store up to 32kB as custom data. - */ - userData?: any | null | undefined; - - /** - * 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 } } | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/baseRecommendIndexSettings.ts b/packages/algoliasearch/lite/model/baseRecommendIndexSettings.ts deleted file mode 100644 index 84130da14..000000000 --- a/packages/algoliasearch/lite/model/baseRecommendIndexSettings.ts +++ /dev/null @@ -1,167 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * HTML tag to insert before the highlighted parts in all highlighted results and snippets. - */ - highlightPreTag?: string | undefined; - - /** - * HTML tag to insert after the highlighted parts in all highlighted results and snippets. - */ - highlightPostTag?: string | undefined; - - /** - * String used as an ellipsis indicator when a snippet is truncated. - */ - snippetEllipsisText?: string | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - typoTolerance?: TypoTolerance | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - ignorePlurals?: IgnorePlurals | undefined; - - removeStopWords?: RemoveStopWords | undefined; - - /** - * 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, place the CJK language **first**. **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 | undefined; - - /** - * 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 | undefined; - - /** - * Whether to enable Personalization. - */ - enablePersonalization?: boolean | undefined; - - queryType?: QueryType | undefined; - - removeWordsIfNoResults?: RemoveWordsIfNoResults | undefined; - - /** - * Whether to support phrase matching and excluding words from search queries Use the `advancedSyntaxFeatures` parameter to control which feature is supported. - */ - advancedSyntax?: boolean | undefined; - - optionalWords?: OptionalWords | null | undefined; - - /** - * 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 | undefined; - - exactOnSingleWordQuery?: ExactOnSingleWordQuery | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - distinct?: Distinct | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Maximum number of facet values to return for each facet. - */ - maxValuesPerFacet?: number | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - renderingContent?: RenderingContent | undefined; - - /** - * 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 | undefined; - - reRankingApplyFilter?: ReRankingApplyFilter | null | undefined; -}; diff --git a/packages/algoliasearch/lite/model/baseRecommendRequest.ts b/packages/algoliasearch/lite/model/baseRecommendRequest.ts deleted file mode 100644 index e1605ebf7..000000000 --- a/packages/algoliasearch/lite/model/baseRecommendRequest.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - queryParameters?: RecommendSearchParams | undefined; -}; diff --git a/packages/algoliasearch/lite/model/baseRecommendSearchParams.ts b/packages/algoliasearch/lite/model/baseRecommendSearchParams.ts deleted file mode 100644 index ae3b4e4ee..000000000 --- a/packages/algoliasearch/lite/model/baseRecommendSearchParams.ts +++ /dev/null @@ -1,123 +0,0 @@ -// Code generated by OpenAPI Generator (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 { 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 | undefined; - - /** - * 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 if the facet attribute name or facet value contains 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 | undefined; - - optionalFilters?: OptionalFilters | undefined; - - numericFilters?: NumericFilters | undefined; - - tagFilters?: TagFilters | undefined; - - /** - * 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 | undefined; - - /** - * Restricts a search to a subset of your searchable attributes. Attribute names are case-sensitive. - */ - restrictSearchableAttributes?: Array | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Whether to obtain the coordinates from the request\'s IP address. - */ - aroundLatLngViaIP?: boolean | undefined; - - aroundRadius?: AroundRadius | undefined; - - aroundPrecision?: AroundPrecision | undefined; - - /** - * Minimum radius (in meters) for a search around a location when `aroundRadius` isn\'t set. - */ - minimumAroundRadius?: number | undefined; - - insideBoundingBox?: InsideBoundingBox | null | undefined; - - /** - * 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> | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Whether the search response should include detailed ranking information. - */ - getRankingInfo?: boolean | undefined; - - /** - * Whether to take into account an index\'s synonyms for this search. - */ - synonyms?: boolean | undefined; - - /** - * 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/doc/guides/sending-events/getting-started). - */ - clickAnalytics?: boolean | undefined; - - /** - * Whether this search will be included in Analytics. - */ - analytics?: boolean | undefined; - - /** - * Tags to apply to the query for [segmenting analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments). - */ - analyticsTags?: Array | undefined; - - /** - * Whether to include this search when calculating processing-time percentiles. - */ - percentileComputation?: boolean | undefined; -}; diff --git a/packages/algoliasearch/lite/model/baseSearchParams.ts b/packages/algoliasearch/lite/model/baseSearchParams.ts deleted file mode 100644 index 030809e05..000000000 --- a/packages/algoliasearch/lite/model/baseSearchParams.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index bd4e1b55f..000000000 --- a/packages/algoliasearch/lite/model/baseSearchParamsWithoutQuery.ts +++ /dev/null @@ -1,146 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 if the facet attribute name or facet value contains 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 | undefined; - - facetFilters?: FacetFilters | undefined; - - optionalFilters?: OptionalFilters | undefined; - - numericFilters?: NumericFilters | undefined; - - tagFilters?: TagFilters | undefined; - - /** - * 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 | undefined; - - /** - * Restricts a search to a subset of your searchable attributes. Attribute names are case-sensitive. - */ - restrictSearchableAttributes?: Array | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Page of search results to retrieve. - */ - page?: number | undefined; - - /** - * Position of the first hit to retrieve. - */ - offset?: number | undefined; - - /** - * Number of hits to retrieve (used in combination with `offset`). - */ - length?: number | undefined; - - /** - * 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 | undefined; - - /** - * Whether to obtain the coordinates from the request\'s IP address. - */ - aroundLatLngViaIP?: boolean | undefined; - - aroundRadius?: AroundRadius | undefined; - - aroundPrecision?: AroundPrecision | undefined; - - /** - * Minimum radius (in meters) for a search around a location when `aroundRadius` isn\'t set. - */ - minimumAroundRadius?: number | undefined; - - insideBoundingBox?: InsideBoundingBox | null | undefined; - - /** - * 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> | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Whether the search response should include detailed ranking information. - */ - getRankingInfo?: boolean | undefined; - - /** - * Whether to take into account an index\'s synonyms for this search. - */ - synonyms?: boolean | undefined; - - /** - * 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/doc/guides/sending-events/getting-started). - */ - clickAnalytics?: boolean | undefined; - - /** - * Whether this search will be included in Analytics. - */ - analytics?: boolean | undefined; - - /** - * Tags to apply to the query for [segmenting analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments). - */ - analyticsTags?: Array | undefined; - - /** - * Whether to include this search when calculating processing-time percentiles. - */ - percentileComputation?: boolean | undefined; - - /** - * Whether to enable A/B testing for this search. - */ - enableABTest?: boolean | undefined; -}; diff --git a/packages/algoliasearch/lite/model/baseSearchResponse.ts b/packages/algoliasearch/lite/model/baseSearchResponse.ts deleted file mode 100644 index b6598e49a..000000000 --- a/packages/algoliasearch/lite/model/baseSearchResponse.ts +++ /dev/null @@ -1,129 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Variant ID. This is only included in the response for indices that are part of an A/B test. - */ - abTestVariantID?: number | undefined; - - /** - * Computed geographical location. - */ - aroundLatLng?: string | undefined; - - /** - * Distance from a central coordinate provided by `aroundLatLng`. - */ - automaticRadius?: string | undefined; - - exhaustive?: Exhaustive | undefined; - - /** - * Rules applied to the query. - */ - appliedRules?: Array> | undefined; - - /** - * See the `facetsCount` field of the `exhaustive` object in the response. - */ - exhaustiveFacetsCount?: boolean | undefined; - - /** - * See the `nbHits` field of the `exhaustive` object in the response. - */ - exhaustiveNbHits?: boolean | undefined; - - /** - * See the `typo` field of the `exhaustive` object in the response. - */ - exhaustiveTypo?: boolean | undefined; - - /** - * Facet counts. - */ - facets?: { [key: string]: { [key: string]: number } } | undefined; - - /** - * Statistics for numerical facets. - */ - facets_stats?: { [key: string]: FacetStats } | undefined; - - /** - * Index name used for the query. - */ - index?: string | undefined; - - /** - * Index name used for the query. During A/B testing, the targeted index isn\'t always the index used by the query. - */ - indexUsed?: string | undefined; - - /** - * Warnings about the query. - */ - message?: string | undefined; - - /** - * Number of hits selected and sorted by the relevant sort algorithm. - */ - nbSortedHits?: number | undefined; - - /** - * 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 | undefined; - - /** - * Time the server took to process the request, in milliseconds. - */ - processingTimeMS?: number | undefined; - - /** - * Experimental. List of processing steps and their times, in milliseconds. You can use this list to investigate performance issues. - */ - processingTimingsMS?: Record | undefined; - - /** - * Markup text indicating which parts of the original query have been removed to retrieve a non-empty result set. - */ - queryAfterRemoval?: string | undefined; - - redirect?: Redirect | undefined; - - renderingContent?: RenderingContent | undefined; - - /** - * Time the server took to process the request, in milliseconds. - */ - serverTimeMS?: number | undefined; - - /** - * Host name of the server that processed the request. - */ - serverUsed?: string | undefined; - - /** - * An object with custom data. You can store up to 32kB as custom data. - */ - userData?: any | null | undefined; - - /** - * Unique identifier for the query. This is used for [click analytics](https://www.algolia.com/doc/guides/analytics/click-analytics). - */ - queryID?: string | undefined; - - /** - * Whether automatic events collection is enabled for the application. - */ - _automaticInsights?: boolean | undefined; -}; diff --git a/packages/algoliasearch/lite/model/booleanString.ts b/packages/algoliasearch/lite/model/booleanString.ts deleted file mode 100644 index 4cf1fb196..000000000 --- a/packages/algoliasearch/lite/model/booleanString.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 19c909cb9..000000000 --- a/packages/algoliasearch/lite/model/boughtTogetherQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index abc6b8c81..000000000 --- a/packages/algoliasearch/lite/model/browsePagination.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Number of results (hits). - */ - nbHits?: number | undefined; - - /** - * Number of pages of results. - */ - nbPages?: number | undefined; - - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; -}; diff --git a/packages/algoliasearch/lite/model/browseParamsObject.ts b/packages/algoliasearch/lite/model/browseParamsObject.ts deleted file mode 100644 index 340270dcf..000000000 --- a/packages/algoliasearch/lite/model/browseParamsObject.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index b1bd5513c..000000000 --- a/packages/algoliasearch/lite/model/browseResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by OpenAPI Generator (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/categoryPrediction.ts b/packages/algoliasearch/lite/model/categoryPrediction.ts deleted file mode 100644 index 181cfb2d9..000000000 --- a/packages/algoliasearch/lite/model/categoryPrediction.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { CategoryPredictionBin } from './categoryPredictionBin'; -import type { HierarchyPathEntry } from './hierarchyPathEntry'; - -export type CategoryPrediction = { - bin?: CategoryPredictionBin | undefined; - - /** - * Ordered list of category levels from root to the predicted category. - */ - hierarchyPath?: Array | undefined; -}; diff --git a/packages/algoliasearch/lite/model/categoryPredictionBin.ts b/packages/algoliasearch/lite/model/categoryPredictionBin.ts deleted file mode 100644 index 6adb03208..000000000 --- a/packages/algoliasearch/lite/model/categoryPredictionBin.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Confidence level of the category prediction. - */ -export type CategoryPredictionBin = 'certain' | 'very high' | 'high' | 'low' | 'very low'; diff --git a/packages/algoliasearch/lite/model/clientMethodProps.ts b/packages/algoliasearch/lite/model/clientMethodProps.ts deleted file mode 100644 index d3ea0277b..000000000 --- a/packages/algoliasearch/lite/model/clientMethodProps.ts +++ /dev/null @@ -1,63 +0,0 @@ -// Code generated by OpenAPI Generator (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, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * 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 deleted file mode 100644 index 94b26e7fc..000000000 --- a/packages/algoliasearch/lite/model/consequenceParams.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 28d8722a3..000000000 --- a/packages/algoliasearch/lite/model/consequenceQuery.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 530522544..000000000 --- a/packages/algoliasearch/lite/model/consequenceQueryObject.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Changes to make to the search query. - */ - edits?: Array | undefined; -}; diff --git a/packages/algoliasearch/lite/model/cursor.ts b/packages/algoliasearch/lite/model/cursor.ts deleted file mode 100644 index 8bc863a92..000000000 --- a/packages/algoliasearch/lite/model/cursor.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/distinct.ts b/packages/algoliasearch/lite/model/distinct.ts deleted file mode 100644 index dc87dfb00..000000000 --- a/packages/algoliasearch/lite/model/distinct.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index d881cd0cf..000000000 --- a/packages/algoliasearch/lite/model/edit.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Text or patterns to remove from the query string. - */ - delete?: string | undefined; - - /** - * Text to be added in place of the deleted text inside the query string. - */ - insert?: string | undefined; -}; diff --git a/packages/algoliasearch/lite/model/editType.ts b/packages/algoliasearch/lite/model/editType.ts deleted file mode 100644 index 27ed9b621..000000000 --- a/packages/algoliasearch/lite/model/editType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index f31be6046..000000000 --- a/packages/algoliasearch/lite/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/exactOnSingleWordQuery.ts b/packages/algoliasearch/lite/model/exactOnSingleWordQuery.ts deleted file mode 100644 index d01b358f6..000000000 --- a/packages/algoliasearch/lite/model/exactOnSingleWordQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index c528c89bc..000000000 --- a/packages/algoliasearch/lite/model/exhaustive.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Code generated by 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/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate). - */ - facetsCount?: boolean | undefined; - - /** - * The value is `false` if not all facet values are retrieved. - */ - facetValues?: boolean | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/facetFilters.ts b/packages/algoliasearch/lite/model/facetFilters.ts deleted file mode 100644 index 0dc5e336e..000000000 --- a/packages/algoliasearch/lite/model/facetFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 5b8f092aa..000000000 --- a/packages/algoliasearch/lite/model/facetHits.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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/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 deleted file mode 100644 index 52d5a82fe..000000000 --- a/packages/algoliasearch/lite/model/facetOrdering.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Order of facet values. One object for each facet. - */ - values?: { [key: string]: Value } | undefined; -}; diff --git a/packages/algoliasearch/lite/model/facetStats.ts b/packages/algoliasearch/lite/model/facetStats.ts deleted file mode 100644 index 706a459a2..000000000 --- a/packages/algoliasearch/lite/model/facetStats.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Maximum value in the results. - */ - max?: number | undefined; - - /** - * Average facet value in the results. - */ - avg?: number | undefined; - - /** - * Sum of all values in the results. - */ - sum?: number | undefined; -}; diff --git a/packages/algoliasearch/lite/model/fallbackParams.ts b/packages/algoliasearch/lite/model/fallbackParams.ts deleted file mode 100644 index ed845cd76..000000000 --- a/packages/algoliasearch/lite/model/fallbackParams.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 to use for a fallback request if there aren\'t enough recommendations. - */ -export type FallbackParams = BaseRecommendSearchParams & - SearchParamsQuery & - RecommendIndexSettings & - Record; diff --git a/packages/algoliasearch/lite/model/fbtModel.ts b/packages/algoliasearch/lite/model/fbtModel.ts deleted file mode 100644 index 29ee3206e..000000000 --- a/packages/algoliasearch/lite/model/fbtModel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 5d392b0fa..000000000 --- a/packages/algoliasearch/lite/model/frequentlyBoughtTogether.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 { FbtModel } from './fbtModel'; - -export type FrequentlyBoughtTogether = { - model: FbtModel; - - /** - * Unique record identifier. - */ - objectID: string; - - fallbackParameters?: FallbackParams | undefined; -}; diff --git a/packages/algoliasearch/lite/model/getApiKeyResponse.ts b/packages/algoliasearch/lite/model/getApiKeyResponse.ts deleted file mode 100644 index f88d1005d..000000000 --- a/packages/algoliasearch/lite/model/getApiKeyResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 55b34d5bc..000000000 --- a/packages/algoliasearch/lite/model/getRecommendationsParams.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a25c511f4..000000000 --- a/packages/algoliasearch/lite/model/getRecommendationsResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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/hierarchyPathEntry.ts b/packages/algoliasearch/lite/model/hierarchyPathEntry.ts deleted file mode 100644 index 6823eac4d..000000000 --- a/packages/algoliasearch/lite/model/hierarchyPathEntry.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 HierarchyPathEntry = { - /** - * Facet attribute name at this hierarchy level, for example, `categories.lvl0`. - */ - facetName?: string | undefined; - - /** - * Facet value at this level of the category hierarchy. - */ - facetValue?: string | undefined; - - /** - * Depth level in the category hierarchy, starting at 0. - */ - depth?: number | undefined; -}; diff --git a/packages/algoliasearch/lite/model/highlightResult.ts b/packages/algoliasearch/lite/model/highlightResult.ts deleted file mode 100644 index 102271a17..000000000 --- a/packages/algoliasearch/lite/model/highlightResult.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 8c7a4b532..000000000 --- a/packages/algoliasearch/lite/model/highlightResultOption.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/hit.ts b/packages/algoliasearch/lite/model/hit.ts deleted file mode 100644 index 5104780e9..000000000 --- a/packages/algoliasearch/lite/model/hit.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Code generated by OpenAPI Generator (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 } | undefined; - - /** - * Snippets that show the context around a matching search query. - */ - _snippetResult?: { [key: string]: SnippetResult } | undefined; - - _rankingInfo?: RankingInfo | undefined; - - _distinctSeqID?: number | undefined; -}; diff --git a/packages/algoliasearch/lite/model/ignorePlurals.ts b/packages/algoliasearch/lite/model/ignorePlurals.ts deleted file mode 100644 index 2eef62270..000000000 --- a/packages/algoliasearch/lite/model/ignorePlurals.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (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. 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 deleted file mode 100644 index 5c9979739..000000000 --- a/packages/algoliasearch/lite/model/index.ts +++ /dev/null @@ -1,138 +0,0 @@ -// Code generated by 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 './autoFilteringFilterEntry'; -export * from './autoFilteringResult'; -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 './categoryPrediction'; -export * from './categoryPredictionBin'; -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 './hierarchyPathEntry'; -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 './queryCategorization'; -export * from './queryCategorizationType'; -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 './responseExtensions'; -export * from './searchExtensions'; -export * from './searchExtensionsQueryCategorization'; -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 './searchResponsePartial'; -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 deleted file mode 100644 index 7f2e9acde..000000000 --- a/packages/algoliasearch/lite/model/indexSettings.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 1261f9c89..000000000 --- a/packages/algoliasearch/lite/model/indexSettingsAsSearchParams.ts +++ /dev/null @@ -1,188 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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, 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * HTML tag to insert before the highlighted parts in all highlighted results and snippets. - */ - highlightPreTag?: string | undefined; - - /** - * HTML tag to insert after the highlighted parts in all highlighted results and snippets. - */ - highlightPostTag?: string | undefined; - - /** - * String used as an ellipsis indicator when a snippet is truncated. - */ - snippetEllipsisText?: string | undefined; - - /** - * 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 | undefined; - - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - typoTolerance?: TypoTolerance | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - ignorePlurals?: IgnorePlurals | undefined; - - removeStopWords?: RemoveStopWords | undefined; - - /** - * 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, place the CJK language **first**. **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 | undefined; - - /** - * 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 | undefined; - - /** - * Whether to enable rules. - */ - enableRules?: boolean | undefined; - - /** - * Whether to enable Personalization. - */ - enablePersonalization?: boolean | undefined; - - queryType?: QueryType | undefined; - - removeWordsIfNoResults?: RemoveWordsIfNoResults | undefined; - - mode?: Mode | undefined; - - semanticSearch?: SemanticSearch | undefined; - - /** - * Whether to support phrase matching and excluding words from search queries Use the `advancedSyntaxFeatures` parameter to control which feature is supported. - */ - advancedSyntax?: boolean | undefined; - - optionalWords?: OptionalWords | null | undefined; - - /** - * 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 | undefined; - - exactOnSingleWordQuery?: ExactOnSingleWordQuery | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - distinct?: Distinct | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Maximum number of facet values to return for each facet. - */ - maxValuesPerFacet?: number | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - renderingContent?: RenderingContent | undefined; - - /** - * 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 | undefined; - - reRankingApplyFilter?: ReRankingApplyFilter | null | undefined; -}; diff --git a/packages/algoliasearch/lite/model/indexSettingsFacets.ts b/packages/algoliasearch/lite/model/indexSettingsFacets.ts deleted file mode 100644 index 65956b664..000000000 --- a/packages/algoliasearch/lite/model/indexSettingsFacets.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/insideBoundingBox.ts b/packages/algoliasearch/lite/model/insideBoundingBox.ts deleted file mode 100644 index 8a498532f..000000000 --- a/packages/algoliasearch/lite/model/insideBoundingBox.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index a24caf321..000000000 --- a/packages/algoliasearch/lite/model/lookingSimilar.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/lookingSimilarModel.ts b/packages/algoliasearch/lite/model/lookingSimilarModel.ts deleted file mode 100644 index 8b2d4a769..000000000 --- a/packages/algoliasearch/lite/model/lookingSimilarModel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index dc94e36a3..000000000 --- a/packages/algoliasearch/lite/model/lookingSimilarQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 2cb9f4d21..000000000 --- a/packages/algoliasearch/lite/model/matchLevel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index c0ec6611e..000000000 --- a/packages/algoliasearch/lite/model/matchedGeoLocation.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Longitude of the matched location. - */ - lng?: number | undefined; - - /** - * Distance between the matched location and the search location (in meters). - */ - distance?: number | undefined; -}; diff --git a/packages/algoliasearch/lite/model/mode.ts b/packages/algoliasearch/lite/model/mode.ts deleted file mode 100644 index 36561b89e..000000000 --- a/packages/algoliasearch/lite/model/mode.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 6129dc5d3..000000000 --- a/packages/algoliasearch/lite/model/numericFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 965eef7be..000000000 --- a/packages/algoliasearch/lite/model/optionalFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 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. - On virtual replicas, optional filters are applied _after_ the replica\'s [relevant sort](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/relevant-sort). - */ -export type OptionalFilters = Array | string; diff --git a/packages/algoliasearch/lite/model/optionalWords.ts b/packages/algoliasearch/lite/model/optionalWords.ts deleted file mode 100644 index e2f58ed97..000000000 --- a/packages/algoliasearch/lite/model/optionalWords.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 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 optional, 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 fewer 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 2,000 need 2 matched words. - If `optionalWords` has 10 or more words, the required number of matched words increases by the number of optional words divided by 5 (rounded down). Example: with 18 optional words, results 1 to 1,000 require 1 matched word; results 1,001 to 2,000 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 deleted file mode 100644 index a92d00e00..000000000 --- a/packages/algoliasearch/lite/model/params.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - automaticFacetFilters?: AutomaticFacetFilters | undefined; - - automaticOptionalFacetFilters?: AutomaticFacetFilters | undefined; - - renderingContent?: RenderingContent | undefined; -}; diff --git a/packages/algoliasearch/lite/model/personalization.ts b/packages/algoliasearch/lite/model/personalization.ts deleted file mode 100644 index 2c91ff1ea..000000000 --- a/packages/algoliasearch/lite/model/personalization.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * The score of the ranking. - */ - rankingScore?: number | undefined; - - /** - * The score of the event. - */ - score?: number | undefined; -}; diff --git a/packages/algoliasearch/lite/model/queryCategorization.ts b/packages/algoliasearch/lite/model/queryCategorization.ts deleted file mode 100644 index 0e374c5b2..000000000 --- a/packages/algoliasearch/lite/model/queryCategorization.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AutoFilteringResult } from './autoFilteringResult'; -import type { CategoryPrediction } from './categoryPrediction'; -import type { QueryCategorizationType } from './queryCategorizationType'; - -/** - * Query Categorization prediction returned by the AI model. This field is empty when the model cannot categorize the query. See [Query Categorization](https://www.algolia.com/doc/guides/algolia-ai/query-categorization/). - */ -export type QueryCategorization = { - /** - * Processed and normalized version of the original search query. - */ - normalizedQuery?: string | undefined; - - /** - * Number of times this normalized query was observed during the training window. - */ - count?: number | undefined; - - type?: QueryCategorizationType | undefined; - - /** - * List of category predictions with confidence levels. - */ - categories?: Array | undefined; - - autofiltering?: AutoFilteringResult | undefined; -}; diff --git a/packages/algoliasearch/lite/model/queryCategorizationType.ts b/packages/algoliasearch/lite/model/queryCategorizationType.ts deleted file mode 100644 index be985940a..000000000 --- a/packages/algoliasearch/lite/model/queryCategorizationType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Classification of the query scope. - */ -export type QueryCategorizationType = 'narrow' | 'broad' | 'ambiguous' | 'none'; diff --git a/packages/algoliasearch/lite/model/queryType.ts b/packages/algoliasearch/lite/model/queryType.ts deleted file mode 100644 index 5c33be4a6..000000000 --- a/packages/algoliasearch/lite/model/queryType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index bbe8841d0..000000000 --- a/packages/algoliasearch/lite/model/range.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Upper boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. - */ - value?: number | undefined; -}; diff --git a/packages/algoliasearch/lite/model/rankingInfo.ts b/packages/algoliasearch/lite/model/rankingInfo.ts deleted file mode 100644 index 47a6e5a93..000000000 --- a/packages/algoliasearch/lite/model/rankingInfo.ts +++ /dev/null @@ -1,68 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - matchedGeoLocation?: MatchedGeoLocation | undefined; - - personalization?: Personalization | undefined; - - /** - * 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 | undefined; - - /** - * Number of words between multiple matches in the query plus 1. For single word queries, `proximityDistance` is 0. - */ - proximityDistance?: number | undefined; - - /** - * Overall ranking of the record, expressed as a single integer. This attribute is internal. - */ - userScore: number; - - /** - * Number of matched words. - */ - words?: number | undefined; - - /** - * Whether the record is re-ranked. - */ - promotedByReRanking?: boolean | undefined; -}; diff --git a/packages/algoliasearch/lite/model/reRankingApplyFilter.ts b/packages/algoliasearch/lite/model/reRankingApplyFilter.ts deleted file mode 100644 index 2cbcc86ef..000000000 --- a/packages/algoliasearch/lite/model/reRankingApplyFilter.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index b2043736c..000000000 --- a/packages/algoliasearch/lite/model/recommendHit.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Code generated by OpenAPI Generator (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 } | undefined; - - /** - * Snippets that show the context around a matching search query. - */ - _snippetResult?: { [key: string]: SnippetResult } | undefined; - - _rankingInfo?: RankingInfo | undefined; - - _distinctSeqID?: number | undefined; - - /** - * Recommendation score. - */ - _score?: number | undefined; -}; diff --git a/packages/algoliasearch/lite/model/recommendIndexSettings.ts b/packages/algoliasearch/lite/model/recommendIndexSettings.ts deleted file mode 100644 index 197c5e592..000000000 --- a/packages/algoliasearch/lite/model/recommendIndexSettings.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 660e1547f..000000000 --- a/packages/algoliasearch/lite/model/recommendSearchParams.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 & - Record; diff --git a/packages/algoliasearch/lite/model/recommendationsHit.ts b/packages/algoliasearch/lite/model/recommendationsHit.ts deleted file mode 100644 index 7873cd3f7..000000000 --- a/packages/algoliasearch/lite/model/recommendationsHit.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 832b0acc6..000000000 --- a/packages/algoliasearch/lite/model/recommendationsHits.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index bf204d340..000000000 --- a/packages/algoliasearch/lite/model/recommendationsRequest.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index c9145a4b8..000000000 --- a/packages/algoliasearch/lite/model/recommendationsResults.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index dfa9312a3..000000000 --- a/packages/algoliasearch/lite/model/redirect.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/redirectRuleIndexData.ts b/packages/algoliasearch/lite/model/redirectRuleIndexData.ts deleted file mode 100644 index fbb7ea140..000000000 --- a/packages/algoliasearch/lite/model/redirectRuleIndexData.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 33802fc69..000000000 --- a/packages/algoliasearch/lite/model/redirectRuleIndexMetadata.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 58725edd4..000000000 --- a/packages/algoliasearch/lite/model/redirectURL.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/relatedModel.ts b/packages/algoliasearch/lite/model/relatedModel.ts deleted file mode 100644 index 97761da60..000000000 --- a/packages/algoliasearch/lite/model/relatedModel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 4fac33e53..000000000 --- a/packages/algoliasearch/lite/model/relatedProducts.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/relatedQuery.ts b/packages/algoliasearch/lite/model/relatedQuery.ts deleted file mode 100644 index 4a8672a2d..000000000 --- a/packages/algoliasearch/lite/model/relatedQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 0a467cb35..000000000 --- a/packages/algoliasearch/lite/model/removeStopWords.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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. 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 deleted file mode 100644 index 70e1aa5e7..000000000 --- a/packages/algoliasearch/lite/model/removeWordsIfNoResults.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index a10b97d74..000000000 --- a/packages/algoliasearch/lite/model/renderingContent.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - redirect?: RedirectURL | undefined; - - widgets?: Widgets | undefined; -}; diff --git a/packages/algoliasearch/lite/model/responseExtensions.ts b/packages/algoliasearch/lite/model/responseExtensions.ts deleted file mode 100644 index a9c8de2f9..000000000 --- a/packages/algoliasearch/lite/model/responseExtensions.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { QueryCategorization } from './queryCategorization'; - -/** - * AI-generated metadata returned alongside search results. Present when Algolia AI features such as [Query Categorization](https://www.algolia.com/doc/guides/algolia-ai/query-categorization/) are enabled. - */ -export type ResponseExtensions = { - queryCategorization?: QueryCategorization | undefined; -}; diff --git a/packages/algoliasearch/lite/model/searchExtensions.ts b/packages/algoliasearch/lite/model/searchExtensions.ts deleted file mode 100644 index fc8927976..000000000 --- a/packages/algoliasearch/lite/model/searchExtensions.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { SearchExtensionsQueryCategorization } from './searchExtensionsQueryCategorization'; - -/** - * Additional parameters for Algolia AI features. Used to enable [Query Categorization](https://www.algolia.com/doc/guides/algolia-ai/query-categorization/) and other AI-powered capabilities. - */ -export type SearchExtensions = { - queryCategorization?: SearchExtensionsQueryCategorization | undefined; -}; diff --git a/packages/algoliasearch/lite/model/searchExtensionsQueryCategorization.ts b/packages/algoliasearch/lite/model/searchExtensionsQueryCategorization.ts deleted file mode 100644 index 337190faa..000000000 --- a/packages/algoliasearch/lite/model/searchExtensionsQueryCategorization.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Parameters for the [Query Categorization](https://www.algolia.com/doc/guides/algolia-ai/query-categorization/) AI feature. - */ -export type SearchExtensionsQueryCategorization = { - /** - * Whether to retrieve category predictions in the response `extensions.queryCategorization` field. - */ - enableCategoriesRetrieval?: boolean | undefined; - - /** - * Whether to automatically apply category-based filters and boosts to search results. - */ - enableAutoFiltering?: boolean | undefined; -}; diff --git a/packages/algoliasearch/lite/model/searchForFacetValuesResponse.ts b/packages/algoliasearch/lite/model/searchForFacetValuesResponse.ts deleted file mode 100644 index 902bc09d8..000000000 --- a/packages/algoliasearch/lite/model/searchForFacetValuesResponse.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by OpenAPI Generator (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/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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/searchForFacets.ts b/packages/algoliasearch/lite/model/searchForFacets.ts deleted file mode 100644 index 00b710fff..000000000 --- a/packages/algoliasearch/lite/model/searchForFacets.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a8f55a7c3..000000000 --- a/packages/algoliasearch/lite/model/searchForFacetsOptions.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - type: SearchTypeFacet; -}; diff --git a/packages/algoliasearch/lite/model/searchForHits.ts b/packages/algoliasearch/lite/model/searchForHits.ts deleted file mode 100644 index 91f65b1d8..000000000 --- a/packages/algoliasearch/lite/model/searchForHits.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a13fc7c47..000000000 --- a/packages/algoliasearch/lite/model/searchForHitsOptions.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { SearchExtensions } from './searchExtensions'; -import type { SearchTypeDefault } from './searchTypeDefault'; - -export type SearchForHitsOptions = { - /** - * Index name (case-sensitive). - */ - indexName: string; - - type?: SearchTypeDefault | undefined; - - extensions?: SearchExtensions | undefined; -} & { facet?: never | undefined; maxFacetHits?: never | undefined; facetQuery?: never | undefined }; diff --git a/packages/algoliasearch/lite/model/searchHits.ts b/packages/algoliasearch/lite/model/searchHits.ts deleted file mode 100644 index 863600648..000000000 --- a/packages/algoliasearch/lite/model/searchHits.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by OpenAPI Generator (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'; -import type { ResponseExtensions } from './responseExtensions'; - -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 | undefined; - - /** - * URL-encoded string of all search parameters. - */ - params?: string | undefined; - - extensions?: ResponseExtensions | undefined; -}; diff --git a/packages/algoliasearch/lite/model/searchMethodParams.ts b/packages/algoliasearch/lite/model/searchMethodParams.ts deleted file mode 100644 index 773751e0d..000000000 --- a/packages/algoliasearch/lite/model/searchMethodParams.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/searchPagination.ts b/packages/algoliasearch/lite/model/searchPagination.ts deleted file mode 100644 index fa39f783f..000000000 --- a/packages/algoliasearch/lite/model/searchPagination.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Number of results (hits). - */ - nbHits?: number | undefined; - - /** - * Number of pages of results. - */ - nbPages?: number | undefined; - - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; -}; diff --git a/packages/algoliasearch/lite/model/searchParams.ts b/packages/algoliasearch/lite/model/searchParams.ts deleted file mode 100644 index 38bf1b3bd..000000000 --- a/packages/algoliasearch/lite/model/searchParams.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index b79d4f8f3..000000000 --- a/packages/algoliasearch/lite/model/searchParamsObject.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index ffa28bb14..000000000 --- a/packages/algoliasearch/lite/model/searchParamsQuery.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/searchParamsString.ts b/packages/algoliasearch/lite/model/searchParamsString.ts deleted file mode 100644 index b1a773379..000000000 --- a/packages/algoliasearch/lite/model/searchParamsString.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/searchQuery.ts b/packages/algoliasearch/lite/model/searchQuery.ts deleted file mode 100644 index 27971258b..000000000 --- a/packages/algoliasearch/lite/model/searchQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index e6a626fd8..000000000 --- a/packages/algoliasearch/lite/model/searchResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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/searchResponsePartial.ts b/packages/algoliasearch/lite/model/searchResponsePartial.ts deleted file mode 100644 index 21eb5bfa1..000000000 --- a/packages/algoliasearch/lite/model/searchResponsePartial.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 { SearchPagination } from './searchPagination'; - -/** - * Partial search response returned when the `responseFields` parameter excludes fields like `hits`. Contains all possible search response properties but none are required, so it acts as an unconditional fallback during oneOf deserialization. - */ -export type SearchResponsePartial> = BaseSearchResponse & - SearchPagination & { [key: string]: any }; diff --git a/packages/algoliasearch/lite/model/searchResponses.ts b/packages/algoliasearch/lite/model/searchResponses.ts deleted file mode 100644 index 8510fb9cf..000000000 --- a/packages/algoliasearch/lite/model/searchResponses.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 40ff9ba2f..000000000 --- a/packages/algoliasearch/lite/model/searchResult.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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'; -import type { SearchResponsePartial } from './searchResponsePartial'; - -export type SearchResult> = - SearchResponse | SearchForFacetValuesResponse | SearchResponsePartial; diff --git a/packages/algoliasearch/lite/model/searchStrategy.ts b/packages/algoliasearch/lite/model/searchStrategy.ts deleted file mode 100644 index 1bda46977..000000000 --- a/packages/algoliasearch/lite/model/searchStrategy.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 7bba6c55d..000000000 --- a/packages/algoliasearch/lite/model/searchTypeDefault.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index a6168e735..000000000 --- a/packages/algoliasearch/lite/model/searchTypeFacet.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 17d94b987..000000000 --- a/packages/algoliasearch/lite/model/semanticSearch.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/settingsResponse.ts b/packages/algoliasearch/lite/model/settingsResponse.ts deleted file mode 100644 index 339a3a220..000000000 --- a/packages/algoliasearch/lite/model/settingsResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 0d9abff48..000000000 --- a/packages/algoliasearch/lite/model/snippetResult.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index daab65f2d..000000000 --- a/packages/algoliasearch/lite/model/snippetResultOption.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 85fc5bd88..000000000 --- a/packages/algoliasearch/lite/model/sortRemainingBy.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 85f2111cc..000000000 --- a/packages/algoliasearch/lite/model/supportedLanguage.ts +++ /dev/null @@ -1,74 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index b13f801cf..000000000 --- a/packages/algoliasearch/lite/model/tagFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 2830686c6..000000000 --- a/packages/algoliasearch/lite/model/trendingFacetHit.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * 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 deleted file mode 100644 index a3c9d144d..000000000 --- a/packages/algoliasearch/lite/model/trendingFacets.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { TrendingFacetsModel } from './trendingFacetsModel'; - -export type TrendingFacets = { - /** - * 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 | undefined; - - /** - * Facet attribute for which to retrieve trending facet values. - */ - facetName: string; - - model: TrendingFacetsModel; -}; diff --git a/packages/algoliasearch/lite/model/trendingFacetsModel.ts b/packages/algoliasearch/lite/model/trendingFacetsModel.ts deleted file mode 100644 index 424bd0bc2..000000000 --- a/packages/algoliasearch/lite/model/trendingFacetsModel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index a984ab664..000000000 --- a/packages/algoliasearch/lite/model/trendingFacetsQuery.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { TrendingFacets } from './trendingFacets'; - -export type TrendingFacetsQuery = TrendingFacets; diff --git a/packages/algoliasearch/lite/model/trendingItems.ts b/packages/algoliasearch/lite/model/trendingItems.ts deleted file mode 100644 index af7de952f..000000000 --- a/packages/algoliasearch/lite/model/trendingItems.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Facet value. To be used in combination with `facetName`. If specified, only recommendations matching the facet filter will be returned. - */ - facetValue?: string | undefined; - - model: TrendingItemsModel; - - fallbackParameters?: FallbackParams | undefined; -}; diff --git a/packages/algoliasearch/lite/model/trendingItemsModel.ts b/packages/algoliasearch/lite/model/trendingItemsModel.ts deleted file mode 100644 index 79bd4740e..000000000 --- a/packages/algoliasearch/lite/model/trendingItemsModel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 86740e4bb..000000000 --- a/packages/algoliasearch/lite/model/trendingItemsQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index c825bee3b..000000000 --- a/packages/algoliasearch/lite/model/typoTolerance.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index fd97a0ed0..000000000 --- a/packages/algoliasearch/lite/model/typoToleranceEnum.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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' | 'true' | 'false'; diff --git a/packages/algoliasearch/lite/model/value.ts b/packages/algoliasearch/lite/model/value.ts deleted file mode 100644 index d8c72bc53..000000000 --- a/packages/algoliasearch/lite/model/value.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - sortRemainingBy?: SortRemainingBy | undefined; - - /** - * Hide facet values. - */ - hide?: Array | undefined; -}; diff --git a/packages/algoliasearch/lite/model/widgets.ts b/packages/algoliasearch/lite/model/widgets.ts deleted file mode 100644 index 12fe2bf4f..000000000 --- a/packages/algoliasearch/lite/model/widgets.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/algoliasearch/lite/model/withPrimary.ts b/packages/algoliasearch/lite/model/withPrimary.ts deleted file mode 100644 index 793945fc0..000000000 --- a/packages/algoliasearch/lite/model/withPrimary.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/algoliasearch/lite/src/liteClient.ts b/packages/algoliasearch/lite/src/liteClient.ts deleted file mode 100644 index ea7cc31da..000000000 --- a/packages/algoliasearch/lite/src/liteClient.ts +++ /dev/null @@ -1,438 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - CreateClientOptions, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, -} from '@algolia/client-common'; -import { createAuth, createTransporter, getAlgoliaAgent, shuffle, validateRequired } 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.56.0'; - -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 | undefined): 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 | undefined, - ): 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 | undefined, - ): 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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - 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.requestWithHttpInfo(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; - } - - validateRequired('getRecommendationsParams', 'getRecommendations', getRecommendationsParams); - - validateRequired('getRecommendationsParams.requests', 'getRecommendations', getRecommendationsParams.requests); - - 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); - }, - /** - * Retrieves recommendations from selected AI models. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getRecommendations for the plain version. - */ - getRecommendationsWithHTTPInfo( - getRecommendationsParams: GetRecommendationsParams | LegacyGetRecommendationsParams, - requestOptions?: RequestOptions, - ): Promise> { - if (getRecommendationsParams && Array.isArray(getRecommendationsParams)) { - const newSignatureRequest: GetRecommendationsParams = { - requests: getRecommendationsParams, - }; - - getRecommendationsParams = newSignatureRequest; - } - - validateRequired('getRecommendationsParams', 'getRecommendationsWithHTTPInfo', getRecommendationsParams); - - validateRequired( - 'getRecommendationsParams.requests', - 'getRecommendationsWithHTTPInfo', - getRecommendationsParams.requests, - ); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Runs multiple search queries against one or more indices in a single API request. Use cases include: - Searching different indices, such as products and marketing content. - Run multiple queries on the same index with different parameters or filters. If you know the expected result type, use the `searchForHits` or `searchForFacets` helper to simplify the response format. - * - * Required API Key ACLs: - * - search - * @param searchMethodParams - Multi-query 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; - } - - validateRequired('searchMethodParams', 'search', searchMethodParams); - - validateRequired('searchMethodParams.requests', 'search', searchMethodParams.requests); - - 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); - }, - /** - * Runs multiple search queries against one or more indices in a single API request. Use cases include: - Searching different indices, such as products and marketing content. - Run multiple queries on the same index with different parameters or filters. If you know the expected result type, use the `searchForHits` or `searchForFacets` helper to simplify the response format. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - search - * @param searchMethodParams - Multi-query 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. - * @see search for the plain version. - */ - searchWithHTTPInfo( - 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; - } - - validateRequired('searchMethodParams', 'searchWithHTTPInfo', searchMethodParams); - - validateRequired('searchMethodParams.requests', 'searchWithHTTPInfo', searchMethodParams.requests); - - 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.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/algoliasearch/lite/tsconfig.json b/packages/algoliasearch/lite/tsconfig.json deleted file mode 100644 index 82d026413..000000000 --- a/packages/algoliasearch/lite/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 19e4447e1..f2e8b5e56 100644 --- a/packages/algoliasearch/package.json +++ b/packages/algoliasearch/package.json @@ -1,81 +1,22 @@ { - "version": "5.56.0", + "name": "algoliasearch", + "version": "4.17.2", + "private": false, + "description": "A fully-featured and blazing-fast JavaScript API client to interact with Algolia API.", "repository": { "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git://github.com/algolia/algoliasearch-client-javascript.git" }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/packages/algoliasearch#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": "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": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/browser.js" - }, - "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": { - "react-native": { - "types": "./dist/lite/browser.d.ts", - "default": "./dist/lite/builds/browser.js" - }, - "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/*.js": "./dist/*.js", - "./dist/lite/builds/*": "./dist/lite/builds/*.js", - "./dist/lite/builds/*.js": "./dist/lite/builds/*.js" - }, + "sideEffects": false, + "main": "index.js", "jsdelivr": "./dist/algoliasearch.umd.js", "unpkg": "./dist/algoliasearch.umd.js", - "react-native": { - ".": "./dist/browser.js", - "./lite": "./dist/lite/builds/browser.js" + "browser": { + "./index.js": "./dist/algoliasearch.umd.js", + "./lite.js": "./dist/algoliasearch-lite.umd.js" }, + "types": "index.d.ts", "files": [ "dist", "index.js", @@ -84,35 +25,19 @@ "lite.d.ts" ], "dependencies": { - "@algolia/abtesting": "1.22.0", - "@algolia/client-abtesting": "5.56.0", - "@algolia/client-analytics": "5.56.0", - "@algolia/client-common": "5.56.0", - "@algolia/client-insights": "5.56.0", - "@algolia/client-personalization": "5.56.0", - "@algolia/client-query-suggestions": "5.56.0", - "@algolia/client-search": "5.56.0", - "@algolia/ingestion": "1.56.0", - "@algolia/monitoring": "1.56.0", - "@algolia/recommend": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@algolia/requester-testing": "5.56.0", - "@arethetypeswrong/cli": "0.18.5", - "@cloudflare/vitest-pool-workers": "0.20.1", - "@cloudflare/workers-types": "5.20260801.1", - "@types/node": "26.1.2", - "jsdom": "30.0.1", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3", - "vitest": "4.1.10" - }, - "engines": { - "node": ">= 14.0.0" + "@algolia/cache-browser-local-storage": "4.17.2", + "@algolia/cache-common": "4.17.2", + "@algolia/cache-in-memory": "4.17.2", + "@algolia/client-account": "4.17.2", + "@algolia/client-analytics": "4.17.2", + "@algolia/client-common": "4.17.2", + "@algolia/client-personalization": "4.17.2", + "@algolia/client-search": "4.17.2", + "@algolia/logger-common": "4.17.2", + "@algolia/logger-console": "4.17.2", + "@algolia/requester-browser-xhr": "4.17.2", + "@algolia/requester-common": "4.17.2", + "@algolia/requester-node-http": "4.17.2", + "@algolia/transporter": "4.17.2" } } diff --git a/packages/algoliasearch/rollup.config.js b/packages/algoliasearch/rollup.config.js deleted file mode 100644 index ae4e88749..000000000 --- a/packages/algoliasearch/rollup.config.js +++ /dev/null @@ -1,31 +0,0 @@ -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 new file mode 100644 index 000000000..a321dc477 --- /dev/null +++ b/packages/algoliasearch/src/__tests__/default.test.ts @@ -0,0 +1,175 @@ +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 new file mode 100644 index 000000000..4586f4396 --- /dev/null +++ b/packages/algoliasearch/src/__tests__/lite.test.ts @@ -0,0 +1,73 @@ +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 new file mode 100644 index 000000000..55b836db3 --- /dev/null +++ b/packages/algoliasearch/src/builds/browser.ts @@ -0,0 +1,694 @@ +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 new file mode 100644 index 000000000..3baa84310 --- /dev/null +++ b/packages/algoliasearch/src/builds/browserLite.ts @@ -0,0 +1,120 @@ +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 new file mode 100644 index 000000000..31ab4f35f --- /dev/null +++ b/packages/algoliasearch/src/builds/node.ts @@ -0,0 +1,702 @@ +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 new file mode 100644 index 000000000..e067cd20c --- /dev/null +++ b/packages/algoliasearch/src/index.ts @@ -0,0 +1,5 @@ +/** + * @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 new file mode 100644 index 000000000..70ee0522a --- /dev/null +++ b/packages/algoliasearch/src/types/AlgoliaSearchOptions.ts @@ -0,0 +1,29 @@ +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 new file mode 100644 index 000000000..10c49a730 --- /dev/null +++ b/packages/algoliasearch/src/types/index.ts @@ -0,0 +1,5 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './AlgoliaSearchOptions'; diff --git a/packages/algoliasearch/tsconfig.json b/packages/algoliasearch/tsconfig.json index e1cd65291..39df687c5 100644 --- a/packages/algoliasearch/tsconfig.json +++ b/packages/algoliasearch/tsconfig.json @@ -1,14 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "types": [ - "node", - "@cloudflare/workers-types", - "@cloudflare/vitest-pool-workers", - "vitest/globals" - ], - "outDir": "dist" - }, - "include": ["src", "model", "builds"], - "exclude": ["dist", "node_modules"] + "declaration": true, + "noEmit": false, + "allowJs": false, + "emitDeclarationOnly": true, + "outFile": "dist/types.d.ts" + } } diff --git a/packages/algoliasearch/tsup.config.ts b/packages/algoliasearch/tsup.config.ts deleted file mode 100644 index 4e4c95d2b..000000000 --- a/packages/algoliasearch/tsup.config.ts +++ /dev/null @@ -1,110 +0,0 @@ -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', - target: 'es2018', - name: `node ${pkg.name} cjs`, - }, - { - ...nodeOptions, - format: 'esm', - name: `node ${pkg.name} esm`, - }, - { - ...nodeOptions, - format: 'cjs', - target: 'es2018', - 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.config.ts b/packages/algoliasearch/vitest.config.ts deleted file mode 100644 index b8e1795c4..000000000 --- a/packages/algoliasearch/vitest.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { cloudflareTest } from '@cloudflare/vitest-pool-workers'; -import { defineConfig } from 'vitest/config'; - -const compatibilityDate = '2026-04-08'; - -export default defineConfig({ - test: { - projects: [ - { - resolve: { - alias: { - '@algolia/client-search': '../../client-search/builds/node', - }, - }, - test: { - include: ['__tests__/algoliasearch.node.test.ts'], - name: 'node', - environment: 'node', - }, - }, - { - resolve: { - alias: { - '@algolia/abtesting': '../../abtesting/builds/browser', - '@algolia/client-abtesting': '../../client-abtesting/builds/browser', - '@algolia/client-analytics': '../../client-analytics/builds/browser', - '@algolia/client-insights': '../../client-insights/builds/browser', - '@algolia/client-personalization': '../../client-personalization/builds/browser', - '@algolia/client-query-suggestions': '../../client-query-suggestions/builds/browser', - '@algolia/client-search': '../../client-search/builds/browser', - '@algolia/ingestion': '../../ingestion/builds/browser', - '@algolia/monitoring': '../../monitoring/builds/browser', - '@algolia/recommend': '../../recommend/builds/browser', - }, - }, - test: { - include: ['__tests__/algoliasearch.browser.test.ts', '__tests__/algoliasearch.common.test.ts'], - name: 'jsdom', - environment: 'jsdom', - }, - }, - { - plugins: [cloudflareTest({ miniflare: { compatibilityDate } })], - resolve: { - alias: { - '@algolia/client-search': '../../client-search/builds/fetch', - }, - }, - test: { - include: ['__tests__/algoliasearch.fetch.test.ts'], - name: 'miniflare fetch', - }, - }, - { - plugins: [cloudflareTest({ miniflare: { compatibilityDate } })], - resolve: { - alias: { - '@algolia/client-search': '../../client-search/builds/worker', - }, - }, - test: { - include: ['__tests__/algoliasearch.worker.test.ts'], - name: 'miniflare worker', - }, - }, - ], - }, -}); diff --git a/packages/cache-browser-local-storage/api-extractor.json b/packages/cache-browser-local-storage/api-extractor.json new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/cache-browser-local-storage/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 000000000..618c06181 --- /dev/null +++ b/packages/cache-browser-local-storage/index.js @@ -0,0 +1,2 @@ +// 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 new file mode 100644 index 000000000..b1e860a25 --- /dev/null +++ b/packages/cache-browser-local-storage/package.json @@ -0,0 +1,22 @@ +{ + "name": "@algolia/cache-browser-local-storage", + "version": "4.17.2", + "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.17.2" + } +} 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 new file mode 100644 index 000000000..1bef2d4e5 --- /dev/null +++ b/packages/cache-browser-local-storage/src/__tests__/unit/browser-local-storage-cache.test.ts @@ -0,0 +1,189 @@ +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('reads unexpired timeToLive keys', async () => { + const cache = createBrowserLocalStorageCache({ key: version, timeToLive: 5 }); + await cache.set({ key: 'foo' }, { bar: 1 }); + + const defaultValue = () => Promise.resolve({ bar: 2 }); + + const missMock = jest.fn(); + + expect( + await cache.get({ key: 'foo' }, defaultValue, { + miss: () => Promise.resolve(missMock()), + }) + ).toMatchObject({ bar: 1 }); + + expect(missMock.mock.calls.length).toBe(0); + }); + + 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('deletes expired keys', async () => { + const cache = createBrowserLocalStorageCache({ key: version, timeToLive: -1 }); + await cache.set({ key: 'foo' }, { bar: 1 }); + + 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(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(`algoliasearch-client-js-${version}`)).toEqual('{}'); + }); + + 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); + + const expectedValue = expect.objectContaining({ + [JSON.stringify(key)]: { + timestamp: expect.any(Number), + value, + }, + }); + + const localStorageValue = localStorage.getItem(`algoliasearch-client-js-${version}`); + + expect(JSON.parse(localStorageValue ? localStorageValue : '{}')).toEqual(expectedValue); + }); +}); diff --git a/packages/cache-browser-local-storage/src/createBrowserLocalStorageCache.ts b/packages/cache-browser-local-storage/src/createBrowserLocalStorageCache.ts new file mode 100644 index 000000000..1157bfc75 --- /dev/null +++ b/packages/cache-browser-local-storage/src/createBrowserLocalStorageCache.ts @@ -0,0 +1,110 @@ +import { Cache, CacheEvents } from '@algolia/cache-common'; + +import { BrowserLocalStorageCacheItem, 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) || '{}'); + }; + + const setNamespace = (namespace: Record) => { + getStorage().setItem(namespaceKey, JSON.stringify(namespace)); + }; + + const removeOutdatedCacheItems = () => { + 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: object | string, + defaultValue: () => Readonly>, + events: CacheEvents = { + miss: () => Promise.resolve(), + } + ): Readonly> { + return Promise.resolve() + .then(() => { + removeOutdatedCacheItems(); + + const keyAsString = JSON.stringify(key); + + return getNamespace>()[keyAsString]; + }) + .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: object | string, value: TValue): Readonly> { + return Promise.resolve().then(() => { + const namespace = getNamespace(); + + // eslint-disable-next-line functional/immutable-data + namespace[JSON.stringify(key)] = { + timestamp: new Date().getTime(), + 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 new file mode 100644 index 000000000..0ee7b2c24 --- /dev/null +++ b/packages/cache-browser-local-storage/src/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './createBrowserLocalStorageCache'; +export * from './types/index'; diff --git a/packages/cache-browser-local-storage/src/types/BrowserLocalStorageCacheItem.ts b/packages/cache-browser-local-storage/src/types/BrowserLocalStorageCacheItem.ts new file mode 100644 index 000000000..5bcf432a6 --- /dev/null +++ b/packages/cache-browser-local-storage/src/types/BrowserLocalStorageCacheItem.ts @@ -0,0 +1,11 @@ +export type BrowserLocalStorageCacheItem = { + /** + * The cache item creation timestamp. + */ + readonly timestamp: number; + + /** + * The cache item value + */ + readonly value: any; +}; diff --git a/packages/cache-browser-local-storage/src/types/BrowserLocalStorageOptions.ts b/packages/cache-browser-local-storage/src/types/BrowserLocalStorageOptions.ts new file mode 100644 index 000000000..6a6e1dfda --- /dev/null +++ b/packages/cache-browser-local-storage/src/types/BrowserLocalStorageOptions.ts @@ -0,0 +1,16 @@ +export type BrowserLocalStorageOptions = { + /** + * The cache key. + */ + readonly key: string; + + /** + * The time to live for each cached item in seconds. + */ + readonly timeToLive?: number; + + /** + * 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 new file mode 100644 index 000000000..5b1b6940f --- /dev/null +++ b/packages/cache-browser-local-storage/src/types/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './BrowserLocalStorageOptions'; +export * from './BrowserLocalStorageCacheItem'; diff --git a/packages/cache-common/api-extractor.json b/packages/cache-common/api-extractor.json new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/cache-common/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 000000000..b121ae501 --- /dev/null +++ b/packages/cache-common/index.js @@ -0,0 +1,2 @@ +// 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 new file mode 100644 index 000000000..b8cf735c7 --- /dev/null +++ b/packages/cache-common/package.json @@ -0,0 +1,19 @@ +{ + "name": "@algolia/cache-common", + "version": "4.17.2", + "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 new file mode 100644 index 000000000..d4c5d187a --- /dev/null +++ b/packages/cache-common/src/__tests__/unit/fallbackable-cache.test.ts @@ -0,0 +1,117 @@ +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 new file mode 100644 index 000000000..beffdd24b --- /dev/null +++ b/packages/cache-common/src/__tests__/unit/null-cache.test.ts @@ -0,0 +1,52 @@ +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 new file mode 100644 index 000000000..beba209eb --- /dev/null +++ b/packages/cache-common/src/createFallbackableCache.ts @@ -0,0 +1,44 @@ +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 new file mode 100644 index 000000000..6e3b17891 --- /dev/null +++ b/packages/cache-common/src/createNullCache.ts @@ -0,0 +1,31 @@ +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 new file mode 100644 index 000000000..de46255ed --- /dev/null +++ b/packages/cache-common/src/index.ts @@ -0,0 +1,7 @@ +/** + * @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 new file mode 100644 index 000000000..f88453e7e --- /dev/null +++ b/packages/cache-common/src/types/Cache.ts @@ -0,0 +1,27 @@ +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 new file mode 100644 index 000000000..0a3ae5e76 --- /dev/null +++ b/packages/cache-common/src/types/CacheEvents.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..a80aeb41d --- /dev/null +++ b/packages/cache-common/src/types/FallbackableCacheOptions.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..1c27dbefa --- /dev/null +++ b/packages/cache-common/src/types/index.ts @@ -0,0 +1,7 @@ +/** + * @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 new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/cache-in-memory/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 000000000..14ac87838 --- /dev/null +++ b/packages/cache-in-memory/index.js @@ -0,0 +1,2 @@ +// 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 new file mode 100644 index 000000000..618200f5c --- /dev/null +++ b/packages/cache-in-memory/package.json @@ -0,0 +1,22 @@ +{ + "name": "@algolia/cache-in-memory", + "version": "4.17.2", + "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.17.2" + } +} 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 new file mode 100644 index 000000000..3adb03fd8 --- /dev/null +++ b/packages/cache-in-memory/src/__tests__/unit/in-memory-cache.test.ts @@ -0,0 +1,106 @@ +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 new file mode 100644 index 000000000..085cd07b0 --- /dev/null +++ b/packages/cache-in-memory/src/createInMemoryCache.ts @@ -0,0 +1,51 @@ +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 new file mode 100644 index 000000000..d31542b11 --- /dev/null +++ b/packages/cache-in-memory/src/index.ts @@ -0,0 +1,6 @@ +/** + * @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 new file mode 100644 index 000000000..f6bbaf9a5 --- /dev/null +++ b/packages/cache-in-memory/src/types/InMemoryCacheOptions.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..0e5fd0665 --- /dev/null +++ b/packages/cache-in-memory/src/types/index.ts @@ -0,0 +1,5 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './InMemoryCacheOptions'; diff --git a/packages/client-abtesting/LICENSE b/packages/client-abtesting/LICENSE deleted file mode 100644 index fddf416f9..000000000 --- a/packages/client-abtesting/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index 66d8df26b..000000000 --- a/packages/client-abtesting/README.md +++ /dev/null @@ -1,76 +0,0 @@ -

- - 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 • - 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.56.0 -# or -npm install @algolia/client-abtesting@5.56.0 -# or -pnpm add @algolia/client-abtesting@5.56.0 -``` - -### 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/sdk/methods/abtesting/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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 deleted file mode 100644 index 5c806bd32..000000000 --- a/packages/client-abtesting/builds/browser.ts +++ /dev/null @@ -1,66 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -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 | undefined, - options?: ClientOptions | undefined, -): 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(', ')}`); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - 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()], - }), - ...browserOptions, - }); -} - -export type AbtestingClient = ReturnType; diff --git a/packages/client-abtesting/builds/fetch.ts b/packages/client-abtesting/builds/fetch.ts deleted file mode 100644 index 150b55fda..000000000 --- a/packages/client-abtesting/builds/fetch.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -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 | undefined, - options?: ClientOptions | undefined, -): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/client-abtesting/builds/node.ts b/packages/client-abtesting/builds/node.ts deleted file mode 100644 index add720bfa..000000000 --- a/packages/client-abtesting/builds/node.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -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 | undefined, - options?: ClientOptions | undefined, -): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/client-abtesting/builds/worker.ts b/packages/client-abtesting/builds/worker.ts deleted file mode 100644 index 858faeced..000000000 --- a/packages/client-abtesting/builds/worker.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Code generated by 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 | undefined, - options?: ClientOptions | undefined, -): 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(', ')}`); - } - - const { compression: _compression, ...workerOptions } = options || {}; - - 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(), - ...workerOptions, - }), - }; -} diff --git a/packages/client-abtesting/index.d.ts b/packages/client-abtesting/index.d.ts deleted file mode 100644 index e81a1cd3e..000000000 --- a/packages/client-abtesting/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/node'; diff --git a/packages/client-abtesting/index.js b/packages/client-abtesting/index.js deleted file mode 100644 index 21e26aad3..000000000 --- a/packages/client-abtesting/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/client-abtesting/model/aBTest.ts b/packages/client-abtesting/model/aBTest.ts deleted file mode 100644 index 94e3a8b73..000000000 --- a/packages/client-abtesting/model/aBTest.ts +++ /dev/null @@ -1,71 +0,0 @@ -// Code generated by OpenAPI Generator (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; - - /** - * A/B test significance calculated from click events. Values of 0.95 or higher can be considered significant, that is, the difference between A and B variants is _not_ due to random variations. Lower values have a. - */ - clickSignificance?: number | null | undefined; - - /** - * A/B test significance calculated from conversion events. Values of 0.95 or higher can be considered significant, that is, the difference between A and B variants is _not_ due to random variations. - */ - conversionSignificance?: number | null | undefined; - - /** - * A/B test significance calculated from add-to-cart events. Values of 0.95 or higher can be considered significant, that is, the difference between A and B variants is _not_ due to random variations. - */ - addToCartSignificance?: number | null | undefined; - - /** - * A/B test significance calculated from purchase events. Values of 0.95 or higher can be considered significant, that is, the difference between A and B variants is _not_ due to random variations. - */ - purchaseSignificance?: number | null | undefined; - - /** - * A/B test significance calculated from revenue data. Values of 0.95 or higher can be considered significant, that is, the difference between A and B variants is _not_ due to random variations. - */ - revenueSignificance?: { [key: string]: number } | null | undefined; - - /** - * 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; - - /** - * Date and time when the A/B test was stopped, in RFC 3339 format. - */ - stoppedAt?: string | null | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/client-abtesting/model/aBTestConfiguration.ts b/packages/client-abtesting/model/aBTestConfiguration.ts deleted file mode 100644 index bf3f7371d..000000000 --- a/packages/client-abtesting/model/aBTestConfiguration.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Code generated by OpenAPI Generator (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 { FeatureFilters } from './featureFilters'; -import type { MinimumDetectableEffect } from './minimumDetectableEffect'; -import type { Outliers } from './outliers'; - -/** - * A/B test configuration. - */ -export type ABTestConfiguration = { - featureFilters?: FeatureFilters | undefined; - - outliers?: Outliers | undefined; - - emptySearch?: EmptySearch | undefined; - - minimumDetectableEffect?: MinimumDetectableEffect | undefined; -}; diff --git a/packages/client-abtesting/model/aBTestResponse.ts b/packages/client-abtesting/model/aBTestResponse.ts deleted file mode 100644 index 024215fb7..000000000 --- a/packages/client-abtesting/model/aBTestResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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](https://www.algolia.com/doc/rest-api/search/get-task) and this task ID. - */ - taskID: number; -}; diff --git a/packages/client-abtesting/model/abTestsVariant.ts b/packages/client-abtesting/model/abTestsVariant.ts deleted file mode 100644 index a3d765141..000000000 --- a/packages/client-abtesting/model/abTestsVariant.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-abtesting/model/abTestsVariantSearchParams.ts b/packages/client-abtesting/model/abTestsVariantSearchParams.ts deleted file mode 100644 index 4cb0237d7..000000000 --- a/packages/client-abtesting/model/abTestsVariantSearchParams.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 99d22a2d4..000000000 --- a/packages/client-abtesting/model/addABTestsRequest.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 0b460fe51..000000000 --- a/packages/client-abtesting/model/addABTestsVariant.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 1259798bb..000000000 --- a/packages/client-abtesting/model/clientMethodProps.ts +++ /dev/null @@ -1,117 +0,0 @@ -// Code generated by 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, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customGet` method. - */ -export type CustomGetProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customPost` method. - */ -export type CustomPostProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `customPut` method. - */ -export type CustomPutProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * 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 | undefined; - /** - * Number of items to return. - */ - limit?: number | undefined; - /** - * Index name prefix. Only A/B tests for indices starting with this string are included in the response. - */ - indexPrefix?: string | undefined; - /** - * Index name suffix. Only A/B tests for indices ending with this string are included in the response. - */ - indexSuffix?: string | undefined; -}; - -/** - * 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 deleted file mode 100644 index a778f76f8..000000000 --- a/packages/client-abtesting/model/currency.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Revenue for this currency. - */ - revenue?: number | undefined; - - /** - * Mean for this currency. - */ - mean?: number | undefined; - - /** - * Standard deviation for this currency. - */ - standardDeviation?: number | undefined; - - /** - * The amount of revenue for this currency that was removed after capping purchase amounts to the 95th percentile. - */ - winsorizedAmount?: number | undefined; -}; diff --git a/packages/client-abtesting/model/customSearchParams.ts b/packages/client-abtesting/model/customSearchParams.ts deleted file mode 100644 index b113a4943..000000000 --- a/packages/client-abtesting/model/customSearchParams.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index dc7e6ee77..000000000 --- a/packages/client-abtesting/model/effectMetric.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 22ffbf7af..000000000 --- a/packages/client-abtesting/model/emptySearch.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-abtesting/model/emptySearchFilter.ts b/packages/client-abtesting/model/emptySearchFilter.ts deleted file mode 100644 index 0db0ac505..000000000 --- a/packages/client-abtesting/model/emptySearchFilter.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Number of tracked searches removed from the A/B test. - */ - trackedSearchesCount?: number | undefined; -}; diff --git a/packages/client-abtesting/model/errorBase.ts b/packages/client-abtesting/model/errorBase.ts deleted file mode 100644 index f31be6046..000000000 --- a/packages/client-abtesting/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-abtesting/model/estimateABTestRequest.ts b/packages/client-abtesting/model/estimateABTestRequest.ts deleted file mode 100644 index 1c5e6c3db..000000000 --- a/packages/client-abtesting/model/estimateABTestRequest.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 07438fffa..000000000 --- a/packages/client-abtesting/model/estimateABTestResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/client-abtesting/model/estimateConfiguration.ts b/packages/client-abtesting/model/estimateConfiguration.ts deleted file mode 100644 index 1388669d5..000000000 --- a/packages/client-abtesting/model/estimateConfiguration.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Code generated by OpenAPI Generator (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 { FeatureFilters } from './featureFilters'; -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 = { - featureFilters?: FeatureFilters | undefined; - - outliers?: Outliers | undefined; - - emptySearch?: EmptySearch | undefined; - - minimumDetectableEffect: MinimumDetectableEffect; -}; diff --git a/packages/client-abtesting/model/featureFilters.ts b/packages/client-abtesting/model/featureFilters.ts deleted file mode 100644 index e48cecb7a..000000000 --- a/packages/client-abtesting/model/featureFilters.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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 of feature-based filters applied to the A/B test population. - */ -export type FeatureFilters = { - /** - * Whether to apply Dynamic Re-Ranking feature filters. - */ - dynamicReRanking?: boolean | undefined; - - /** - * Whether to apply AI Personalization feature filters. - */ - aiPerso?: boolean | undefined; - - /** - * Whether to apply Multi-Signal Re-Ranking feature filters. - */ - multiSignalRanking?: boolean | undefined; -}; diff --git a/packages/client-abtesting/model/filterEffects.ts b/packages/client-abtesting/model/filterEffects.ts deleted file mode 100644 index 6e3cfb300..000000000 --- a/packages/client-abtesting/model/filterEffects.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - emptySearch?: EmptySearchFilter | undefined; -}; diff --git a/packages/client-abtesting/model/index.ts b/packages/client-abtesting/model/index.ts deleted file mode 100644 index ddcf6dec2..000000000 --- a/packages/client-abtesting/model/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by 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 './featureFilters'; -export * from './filterEffects'; -export * from './listABTestsResponse'; -export * from './minimumDetectableEffect'; -export * from './outliers'; -export * from './outliersFilter'; -export * from './status'; -export * from './variant'; diff --git a/packages/client-abtesting/model/listABTestsResponse.ts b/packages/client-abtesting/model/listABTestsResponse.ts deleted file mode 100644 index 9a021cc1b..000000000 --- a/packages/client-abtesting/model/listABTestsResponse.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index ecd87dcc1..000000000 --- a/packages/client-abtesting/model/minimumDetectableEffect.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 91d05c96c..000000000 --- a/packages/client-abtesting/model/outliers.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-abtesting/model/outliersFilter.ts b/packages/client-abtesting/model/outliersFilter.ts deleted file mode 100644 index 025977712..000000000 --- a/packages/client-abtesting/model/outliersFilter.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Number of tracked searches removed from the A/B test. - */ - trackedSearchesCount?: number | undefined; -}; diff --git a/packages/client-abtesting/model/status.ts b/packages/client-abtesting/model/status.ts deleted file mode 100644 index 3cccd8799..000000000 --- a/packages/client-abtesting/model/status.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index fd13f4907..000000000 --- a/packages/client-abtesting/model/variant.ts +++ /dev/null @@ -1,103 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * [Average click position](https://www.algolia.com/doc/guides/search-analytics/concepts/metrics/#click-position) for this variant. - */ - averageClickPosition?: number | null | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * A/B test currencies. - */ - currencies?: { [key: string]: Currency } | undefined; - - /** - * Description for this variant. - */ - description?: string | undefined; - - /** - * 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 | undefined; - - filterEffects?: FilterEffects | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 deleted file mode 100644 index ed863be79..000000000 --- a/packages/client-abtesting/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "version": "5.56.0", - "repository": { - "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" - }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/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": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/builds/browser.js" - }, - "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", - "./dist/builds/*.js": "./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.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "26.1.2", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" - } -} diff --git a/packages/client-abtesting/rollup.config.js b/packages/client-abtesting/rollup.config.js deleted file mode 100644 index ba6f27a30..000000000 --- a/packages/client-abtesting/rollup.config.js +++ /dev/null @@ -1,17 +0,0 @@ -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 deleted file mode 100644 index a09c88630..000000000 --- a/packages/client-abtesting/src/abtestingClient.ts +++ /dev/null @@ -1,752 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - CreateClientOptions, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, -} from '@algolia/client-common'; -import { createAuth, createTransporter, getAlgoliaAgent, validateRequired } 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 { - CustomDeleteProps, - CustomGetProps, - CustomPostProps, - CustomPutProps, - DeleteABTestProps, - GetABTestProps, - ListABTestsProps, - StopABTestProps, -} from '../model/clientMethodProps'; - -export const apiClientVersion = '5.56.0'; - -export const REGIONS = ['de', 'us'] as const; -export type Region = (typeof REGIONS)[number]; -export type RegionOptions = { region?: Region | undefined }; - -function getDefaultHosts(region?: Region | undefined): 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 | undefined): 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 { - validateRequired('addABTestsRequest', 'addABTests', addABTestsRequest); - - validateRequired('addABTestsRequest.name', 'addABTests', addABTestsRequest.name); - validateRequired('addABTestsRequest.variants', 'addABTests', addABTestsRequest.variants); - validateRequired('addABTestsRequest.endAt', 'addABTests', addABTestsRequest.endAt); - - 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); - }, - /** - * Creates a new A/B test. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see addABTests for the plain version. - */ - addABTestsWithHTTPInfo( - addABTestsRequest: AddABTestsRequest, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('addABTestsRequest', 'addABTestsWithHTTPInfo', addABTestsRequest); - - validateRequired('addABTestsRequest.name', 'addABTestsWithHTTPInfo', addABTestsRequest.name); - validateRequired('addABTestsRequest.variants', 'addABTestsWithHTTPInfo', addABTestsRequest.variants); - validateRequired('addABTestsRequest.endAt', 'addABTestsWithHTTPInfo', addABTestsRequest.endAt); - - const requestPath = '/2/abtests'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: addABTestsRequest, - }; - - return transporter.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customDelete', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customDelete - The customDelete object. - * @param customDelete.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customDelete for the plain version. - */ - customDeleteWithHTTPInfo( - { path, parameters }: CustomDeleteProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customDeleteWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customGet', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customGet - The customGet object. - * @param customGet.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customGet for the plain version. - */ - customGetWithHTTPInfo( - { path, parameters }: CustomGetProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customGetWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPut', path); - - 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); - }, - /** - * This method lets you send requests to the Algolia REST API. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPut - The customPut object. - * @param customPut.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPut for the plain version. - */ - customPutWithHTTPInfo( - { path, parameters, body }: CustomPutProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPutWithHTTPInfo', path); - - 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.requestWithHttpInfo(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 { - validateRequired('id', 'deleteABTest', id); - - 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); - }, - /** - * Deletes an A/B test by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteABTest for the plain version. - */ - deleteABTestWithHTTPInfo( - { id }: DeleteABTestProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('id', 'deleteABTestWithHTTPInfo', id); - - 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.requestWithHttpInfo(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 { - validateRequired('estimateABTestRequest', 'estimateABTest', estimateABTestRequest); - - validateRequired('estimateABTestRequest.configuration', 'estimateABTest', estimateABTestRequest.configuration); - validateRequired('estimateABTestRequest.variants', 'estimateABTest', estimateABTestRequest.variants); - - 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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see estimateABTest for the plain version. - */ - estimateABTestWithHTTPInfo( - estimateABTestRequest: EstimateABTestRequest, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('estimateABTestRequest', 'estimateABTestWithHTTPInfo', estimateABTestRequest); - - validateRequired( - 'estimateABTestRequest.configuration', - 'estimateABTestWithHTTPInfo', - estimateABTestRequest.configuration, - ); - validateRequired('estimateABTestRequest.variants', 'estimateABTestWithHTTPInfo', estimateABTestRequest.variants); - - const requestPath = '/2/abtests/estimate'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: estimateABTestRequest, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('id', 'getABTest', id); - - 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); - }, - /** - * Retrieves the details for an A/B test by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getABTest for the plain version. - */ - getABTestWithHTTPInfo( - { id }: GetABTestProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('id', 'getABTestWithHTTPInfo', id); - - 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.requestWithHttpInfo(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); - }, - /** - * Lists all A/B tests you configured for this application. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see listABTests for the plain version. - */ - listABTestsWithHTTPInfo( - { 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.requestWithHttpInfo(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 { - validateRequired('id', 'stopABTest', id); - - 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); - }, - /** - * Stops an A/B test by its ID. You can\'t restart stopped A/B tests. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see stopABTest for the plain version. - */ - stopABTestWithHTTPInfo( - { id }: StopABTestProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('id', 'stopABTestWithHTTPInfo', id); - - 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.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/client-abtesting/tsconfig.json b/packages/client-abtesting/tsconfig.json deleted file mode 100644 index 444e8bb64..000000000 --- a/packages/client-abtesting/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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 deleted file mode 100644 index 37be92132..000000000 --- a/packages/client-abtesting/tsup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -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', - target: 'es2018', - 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 new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/client-account/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 000000000..ea5e5605a --- /dev/null +++ b/packages/client-account/index.js @@ -0,0 +1,2 @@ +// 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 new file mode 100644 index 000000000..192280bd4 --- /dev/null +++ b/packages/client-account/package.json @@ -0,0 +1,23 @@ +{ + "name": "@algolia/client-account", + "version": "4.17.2", + "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.17.2", + "@algolia/client-search": "4.17.2", + "@algolia/transporter": "4.17.2" + } +} 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 new file mode 100644 index 000000000..8c8cb9af2 --- /dev/null +++ b/packages/client-account/src/__tests__/integration/account-copy-index.test.ts @@ -0,0 +1,122 @@ +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 new file mode 100644 index 000000000..193afa6bb --- /dev/null +++ b/packages/client-account/src/errors/createDestinationIndiceExistsError.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..6fdcea8f2 --- /dev/null +++ b/packages/client-account/src/errors/createIndicesInSameAppError.ts @@ -0,0 +1,9 @@ +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 new file mode 100644 index 000000000..2656cec3d --- /dev/null +++ b/packages/client-account/src/errors/index.ts @@ -0,0 +1,6 @@ +/** + * @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 new file mode 100644 index 000000000..61f10b209 --- /dev/null +++ b/packages/client-account/src/index.ts @@ -0,0 +1,7 @@ +/** + * @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 new file mode 100644 index 000000000..2df6a43d6 --- /dev/null +++ b/packages/client-account/src/methods/accountCopyIndex.ts @@ -0,0 +1,76 @@ +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 new file mode 100644 index 000000000..dc8bf10be --- /dev/null +++ b/packages/client-account/src/methods/index.ts @@ -0,0 +1,5 @@ +/** + * @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 new file mode 100644 index 000000000..478835723 --- /dev/null +++ b/packages/client-account/src/types/IndicesInSameAppError.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..19e81e25f --- /dev/null +++ b/packages/client-account/src/types/index.ts @@ -0,0 +1,5 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './IndicesInSameAppError'; diff --git a/packages/client-analytics/LICENSE b/packages/client-analytics/LICENSE deleted file mode 100644 index fddf416f9..000000000 --- a/packages/client-analytics/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index a00ceb5b4..000000000 --- a/packages/client-analytics/README.md +++ /dev/null @@ -1,76 +0,0 @@ -

- - 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 • - 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.56.0 -# or -npm install @algolia/client-analytics@5.56.0 -# or -pnpm add @algolia/client-analytics@5.56.0 -``` - -### 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/sdk/methods/analytics/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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 new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/client-analytics/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 deleted file mode 100644 index 453fddd8b..000000000 --- a/packages/client-analytics/builds/browser.ts +++ /dev/null @@ -1,66 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -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 | undefined, - options?: ClientOptions | undefined, -): 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(', ')}`); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - 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()], - }), - ...browserOptions, - }); -} - -export type AnalyticsClient = ReturnType; diff --git a/packages/client-analytics/builds/fetch.ts b/packages/client-analytics/builds/fetch.ts deleted file mode 100644 index 060d8c720..000000000 --- a/packages/client-analytics/builds/fetch.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -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 | undefined, - options?: ClientOptions | undefined, -): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/client-analytics/builds/node.ts b/packages/client-analytics/builds/node.ts deleted file mode 100644 index dd9eddae6..000000000 --- a/packages/client-analytics/builds/node.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -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 | undefined, - options?: ClientOptions | undefined, -): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/client-analytics/builds/worker.ts b/packages/client-analytics/builds/worker.ts deleted file mode 100644 index dbf97ae9f..000000000 --- a/packages/client-analytics/builds/worker.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Code generated by 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 | undefined, - options?: ClientOptions | undefined, -): 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(', ')}`); - } - - const { compression: _compression, ...workerOptions } = options || {}; - - 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(), - ...workerOptions, - }), - }; -} diff --git a/packages/client-analytics/index.d.ts b/packages/client-analytics/index.d.ts deleted file mode 100644 index e81a1cd3e..000000000 --- a/packages/client-analytics/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/node'; diff --git a/packages/client-analytics/index.js b/packages/client-analytics/index.js index 21e26aad3..3588503aa 100644 --- a/packages/client-analytics/index.js +++ b/packages/client-analytics/index.js @@ -1 +1,2 @@ -module.exports = require('./dist/builds/node.cjs'); +// eslint-disable-next-line functional/immutable-data, import/no-commonjs +module.exports = require('./dist/client-analytics.cjs.js'); diff --git a/packages/client-analytics/model/clickPosition.ts b/packages/client-analytics/model/clickPosition.ts deleted file mode 100644 index 1faa4c799..000000000 --- a/packages/client-analytics/model/clickPosition.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Number of times this search has been clicked at that position. - */ - clickCount?: number | undefined; -}; diff --git a/packages/client-analytics/model/clientMethodProps.ts b/packages/client-analytics/model/clientMethodProps.ts deleted file mode 100644 index 57099b4b8..000000000 --- a/packages/client-analytics/model/clientMethodProps.ts +++ /dev/null @@ -1,604 +0,0 @@ -// Code generated by OpenAPI Generator (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, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customGet` method. - */ -export type CustomGetProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customPost` method. - */ -export type CustomPostProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `customPut` method. - */ -export type CustomPutProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * Number of items to return. - */ - limit?: number | undefined; - /** - * Position of the first item to return. - */ - offset?: number | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * Number of items to return. - */ - limit?: number | undefined; - /** - * Position of the first item to return. - */ - offset?: number | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * Number of items to return. - */ - limit?: number | undefined; - /** - * Position of the first item to return. - */ - offset?: number | undefined; - /** - * 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 | undefined; -}; - -/** - * Properties for the `getTopFilterAttributes` method. - */ -export type GetTopFilterAttributesProps = { - /** - * Index name. - */ - index: string; - /** - * Search query. - */ - search?: string | undefined; - /** - * Start date of the period to analyze, in `YYYY-MM-DD` format. - */ - startDate?: string | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * Number of items to return. - */ - limit?: number | undefined; - /** - * Position of the first item to return. - */ - offset?: number | undefined; - /** - * 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 | undefined; -}; - -/** - * Properties for the `getTopFilterForAttribute` method. - */ -export type GetTopFilterForAttributeProps = { - /** - * Attribute name. - */ - attribute: string; - /** - * Index name. - */ - index: string; - /** - * Search query. - */ - search?: string | undefined; - /** - * Start date of the period to analyze, in `YYYY-MM-DD` format. - */ - startDate?: string | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * Number of items to return. - */ - limit?: number | undefined; - /** - * Position of the first item to return. - */ - offset?: number | undefined; - /** - * 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 | undefined; -}; - -/** - * Properties for the `getTopFiltersNoResults` method. - */ -export type GetTopFiltersNoResultsProps = { - /** - * Index name. - */ - index: string; - /** - * Search query. - */ - search?: string | undefined; - /** - * Start date of the period to analyze, in `YYYY-MM-DD` format. - */ - startDate?: string | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * Number of items to return. - */ - limit?: number | undefined; - /** - * Position of the first item to return. - */ - offset?: number | undefined; - /** - * 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 | undefined; -}; - -/** - * Properties for the `getTopHits` method. - */ -export type GetTopHitsProps = { - /** - * Index name. - */ - index: string; - /** - * Search query. - */ - search?: string | undefined; - /** - * Whether to include metrics related to click and conversion events in the response. - */ - clickAnalytics?: boolean | undefined; - /** - * Whether to include metrics related to revenue events in the response. - */ - revenueAnalytics?: boolean | undefined; - /** - * Start date of the period to analyze, in `YYYY-MM-DD` format. - */ - startDate?: string | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * Number of items to return. - */ - limit?: number | undefined; - /** - * Position of the first item to return. - */ - offset?: number | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * Whether to include metrics related to revenue events in the response. - */ - revenueAnalytics?: boolean | undefined; - /** - * Start date of the period to analyze, in `YYYY-MM-DD` format. - */ - startDate?: string | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * Attribute by which to order the response items. If the `clickAnalytics` parameter is false, only `searchCount` is available. - */ - orderBy?: OrderBy | undefined; - /** - * Sorting direction of the results: ascending or descending. - */ - direction?: Direction | undefined; - /** - * Number of items to return. - */ - limit?: number | undefined; - /** - * Position of the first item to return. - */ - offset?: number | undefined; - /** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * End date of the period to analyze, in `YYYY-MM-DD` format. - */ - endDate?: string | undefined; - /** - * 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 | undefined; -}; diff --git a/packages/client-analytics/model/currencyCode.ts b/packages/client-analytics/model/currencyCode.ts deleted file mode 100644 index 1b888d6f9..000000000 --- a/packages/client-analytics/model/currencyCode.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Revenue associated with this search in this currency. - */ - revenue?: number | undefined; -}; diff --git a/packages/client-analytics/model/dailyAddToCartRates.ts b/packages/client-analytics/model/dailyAddToCartRates.ts deleted file mode 100644 index 9b4d29066..000000000 --- a/packages/client-analytics/model/dailyAddToCartRates.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index fb9928685..000000000 --- a/packages/client-analytics/model/dailyAverageClicks.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index bec5f12ac..000000000 --- a/packages/client-analytics/model/dailyClickThroughRates.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index d1599a4ce..000000000 --- a/packages/client-analytics/model/dailyConversionRates.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 74addb9e1..000000000 --- a/packages/client-analytics/model/dailyNoClickRates.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index fb9148285..000000000 --- a/packages/client-analytics/model/dailyNoResultsRates.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 1c54a3798..000000000 --- a/packages/client-analytics/model/dailyPurchaseRates.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index cfdc08a9e..000000000 --- a/packages/client-analytics/model/dailyRevenue.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 12c7b7156..000000000 --- a/packages/client-analytics/model/dailySearches.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 378ce3664..000000000 --- a/packages/client-analytics/model/dailySearchesNoClicks.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 9e3dd5d38..000000000 --- a/packages/client-analytics/model/dailySearchesNoResults.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 77ba423b5..000000000 --- a/packages/client-analytics/model/dailyUsers.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 73073b314..000000000 --- a/packages/client-analytics/model/direction.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index f31be6046..000000000 --- a/packages/client-analytics/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-analytics/model/getAddToCartRateResponse.ts b/packages/client-analytics/model/getAddToCartRateResponse.ts deleted file mode 100644 index 7ee441596..000000000 --- a/packages/client-analytics/model/getAddToCartRateResponse.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 53264bd55..000000000 --- a/packages/client-analytics/model/getAverageClickPositionResponse.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 1f9d1b073..000000000 --- a/packages/client-analytics/model/getClickPositionsResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 1d11f2b53..000000000 --- a/packages/client-analytics/model/getClickThroughRateResponse.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a95863874..000000000 --- a/packages/client-analytics/model/getConversionRateResponse.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index d57236034..000000000 --- a/packages/client-analytics/model/getNoClickRateResponse.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index c6e4810e9..000000000 --- a/packages/client-analytics/model/getNoResultsRateResponse.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index f4ca5b889..000000000 --- a/packages/client-analytics/model/getPurchaseRateResponse.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 72be26323..000000000 --- a/packages/client-analytics/model/getRevenue.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 5c8ce8271..000000000 --- a/packages/client-analytics/model/getSearchesCountResponse.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index f4296a31e..000000000 --- a/packages/client-analytics/model/getSearchesNoClicksResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 33ca553c2..000000000 --- a/packages/client-analytics/model/getSearchesNoResultsResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 6237d59d2..000000000 --- a/packages/client-analytics/model/getStatusResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 4490f267b..000000000 --- a/packages/client-analytics/model/getTopCountriesResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 221c8f0b6..000000000 --- a/packages/client-analytics/model/getTopFilterAttribute.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index a79aa8028..000000000 --- a/packages/client-analytics/model/getTopFilterAttributesResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 1dbf29bfc..000000000 --- a/packages/client-analytics/model/getTopFilterForAttribute.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 6e4a3dc0d..000000000 --- a/packages/client-analytics/model/getTopFilterForAttributeResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index b3cc8d3e4..000000000 --- a/packages/client-analytics/model/getTopFiltersNoResultsResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 9ee048b36..000000000 --- a/packages/client-analytics/model/getTopFiltersNoResultsValue.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 852c9c229..000000000 --- a/packages/client-analytics/model/getTopFiltersNoResultsValues.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 735cf41db..000000000 --- a/packages/client-analytics/model/getTopHitsResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index e80a8c0e9..000000000 --- a/packages/client-analytics/model/getTopSearchesResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 226abcef0..000000000 --- a/packages/client-analytics/model/getUsersCountResponse.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 326185c4f..000000000 --- a/packages/client-analytics/model/index.ts +++ /dev/null @@ -1,58 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 71eb38cfc..000000000 --- a/packages/client-analytics/model/operator.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 0e354488f..000000000 --- a/packages/client-analytics/model/orderBy.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 4bf2db6b3..000000000 --- a/packages/client-analytics/model/topCountry.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 7f003f3d8..000000000 --- a/packages/client-analytics/model/topHit.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 7069ec8df..000000000 --- a/packages/client-analytics/model/topHitWithAnalytics.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 0edde9367..000000000 --- a/packages/client-analytics/model/topHitWithRevenueAnalytics.ts +++ /dev/null @@ -1,65 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index aa299f394..000000000 --- a/packages/client-analytics/model/topHitsResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 7a88efce5..000000000 --- a/packages/client-analytics/model/topHitsResponseWithAnalytics.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index e4716c74b..000000000 --- a/packages/client-analytics/model/topHitsResponseWithRevenueAnalytics.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a5de4f284..000000000 --- a/packages/client-analytics/model/topSearch.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 911769cb5..000000000 --- a/packages/client-analytics/model/topSearchWithAnalytics.ts +++ /dev/null @@ -1,55 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 55873c453..000000000 --- a/packages/client-analytics/model/topSearchWithRevenueAnalytics.ts +++ /dev/null @@ -1,81 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 0db8aac7a..000000000 --- a/packages/client-analytics/model/topSearchesResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a7f70ab23..000000000 --- a/packages/client-analytics/model/topSearchesResponseWithAnalytics.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index e69a68c26..000000000 --- a/packages/client-analytics/model/topSearchesResponseWithRevenueAnalytics.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 0a5416a83..f64286c96 100644 --- a/packages/client-analytics/package.json +++ b/packages/client-analytics/package.json @@ -1,73 +1,24 @@ { - "version": "5.56.0", + "name": "@algolia/client-analytics", + "version": "4.17.2", + "private": false, "repository": { "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git://github.com/algolia/algoliasearch-client-javascript.git" }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/packages/client-analytics#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-analytics", - "description": "JavaScript client for client-analytics", - "exports": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/builds/browser.js" - }, - "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", - "./dist/builds/*.js": "./dist/builds/*.js" - }, - "jsdelivr": "./dist/builds/browser.umd.js", - "unpkg": "./dist/builds/browser.umd.js", - "react-native": "./dist/builds/browser.js", + "sideEffects": false, + "main": "index.js", + "module": "dist/client-analytics.esm.js", + "types": "dist/client-analytics.d.ts", "files": [ - "dist", "index.js", - "index.d.ts" + "dist" ], "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "26.1.2", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" + "@algolia/client-common": "4.17.2", + "@algolia/client-search": "4.17.2", + "@algolia/requester-common": "4.17.2", + "@algolia/transporter": "4.17.2" } } diff --git a/packages/client-analytics/rollup.config.js b/packages/client-analytics/rollup.config.js deleted file mode 100644 index b6e4066eb..000000000 --- a/packages/client-analytics/rollup.config.js +++ /dev/null @@ -1,17 +0,0 @@ -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 new file mode 100644 index 000000000..8ee4918eb --- /dev/null +++ b/packages/client-analytics/src/__tests__/integration/ab-testing.test.ts @@ -0,0 +1,145 @@ +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 new file mode 100644 index 000000000..2020152cb --- /dev/null +++ b/packages/client-analytics/src/__tests__/unit/analytics-client.test.ts @@ -0,0 +1,19 @@ +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 deleted file mode 100644 index e3e5e9af2..000000000 --- a/packages/client-analytics/src/analyticsClient.ts +++ /dev/null @@ -1,2597 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - CreateClientOptions, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, -} from '@algolia/client-common'; -import { createAuth, createTransporter, getAlgoliaAgent, validateRequired } 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.56.0'; - -export const REGIONS = ['de', 'us'] as const; -export type Region = (typeof REGIONS)[number]; -export type RegionOptions = { region?: Region | undefined }; - -function getDefaultHosts(region?: Region | undefined): 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 | undefined): 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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customDelete', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customDelete - The customDelete object. - * @param customDelete.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customDelete for the plain version. - */ - customDeleteWithHTTPInfo( - { path, parameters }: CustomDeleteProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customDeleteWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customGet', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customGet - The customGet object. - * @param customGet.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customGet for the plain version. - */ - customGetWithHTTPInfo( - { path, parameters }: CustomGetProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customGetWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPut', path); - - 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); - }, - /** - * This method lets you send requests to the Algolia REST API. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPut - The customPut object. - * @param customPut.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPut for the plain version. - */ - customPutWithHTTPInfo( - { path, parameters, body }: CustomPutProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPutWithHTTPInfo', path); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getAddToCartRate', index); - - 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 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getAddToCartRate for the plain version. - */ - getAddToCartRateWithHTTPInfo( - { index, startDate, endDate, tags }: GetAddToCartRateProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getAddToCartRateWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getAverageClickPosition', index); - - 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 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getAverageClickPosition for the plain version. - */ - getAverageClickPositionWithHTTPInfo( - { index, startDate, endDate, tags }: GetAverageClickPositionProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getAverageClickPositionWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getClickPositions', index); - - 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 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getClickPositions for the plain version. - */ - getClickPositionsWithHTTPInfo( - { index, startDate, endDate, tags }: GetClickPositionsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getClickPositionsWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getClickThroughRate', index); - - 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 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getClickThroughRate for the plain version. - */ - getClickThroughRateWithHTTPInfo( - { index, startDate, endDate, tags }: GetClickThroughRateProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getClickThroughRateWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getConversionRate', index); - - 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 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getConversionRate for the plain version. - */ - getConversionRateWithHTTPInfo( - { index, startDate, endDate, tags }: GetConversionRateProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getConversionRateWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getNoClickRate', index); - - 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 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getNoClickRate for the plain version. - */ - getNoClickRateWithHTTPInfo( - { index, startDate, endDate, tags }: GetNoClickRateProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getNoClickRateWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getNoResultsRate', index); - - 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 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getNoResultsRate for the plain version. - */ - getNoResultsRateWithHTTPInfo( - { index, startDate, endDate, tags }: GetNoResultsRateProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getNoResultsRateWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 purchase conversion events divided by tracked searches. A search is tracked if it returns a query ID (`clickAnalytics` is `true`). This differs from the response\'s `count`, which includes searches 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. Algolia didn\'t receive any events, so the purchase rate is null. - **0** means 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 { - validateRequired('index', 'getPurchaseRate', index); - - 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 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 purchase conversion events divided by tracked searches. A search is tracked if it returns a query ID (`clickAnalytics` is `true`). This differs from the response\'s `count`, which includes searches 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. Algolia didn\'t receive any events, so the purchase rate is null. - **0** means there were queries but no [purchase conversion events](https://www.algolia.com/doc/guides/sending-events/getting-started) were received. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getPurchaseRate for the plain version. - */ - getPurchaseRateWithHTTPInfo( - { index, startDate, endDate, tags }: GetPurchaseRateProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getPurchaseRateWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getRevenue', index); - - 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 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getRevenue for the plain version. - */ - getRevenueWithHTTPInfo( - { index, startDate, endDate, tags }: GetRevenueProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getRevenueWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getSearchesCount', index); - - 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 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getSearchesCount for the plain version. - */ - getSearchesCountWithHTTPInfo( - { index, startDate, endDate, tags }: GetSearchesCountProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getSearchesCountWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getSearchesNoClicks', index); - - 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 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getSearchesNoClicks for the plain version. - */ - getSearchesNoClicksWithHTTPInfo( - { index, startDate, endDate, limit, offset, tags }: GetSearchesNoClicksProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getSearchesNoClicksWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getSearchesNoResults', index); - - 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 1,000 most frequent searches that produced zero results. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getSearchesNoResults for the plain version. - */ - getSearchesNoResultsWithHTTPInfo( - { index, startDate, endDate, limit, offset, tags }: GetSearchesNoResultsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getSearchesNoResultsWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getStatus', index); - - 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 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getStatus for the plain version. - */ - getStatusWithHTTPInfo( - { index }: GetStatusProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getStatusWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getTopCountries', index); - - 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 countries with the most searches in your index. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getTopCountries for the plain version. - */ - getTopCountriesWithHTTPInfo( - { index, startDate, endDate, limit, offset, tags }: GetTopCountriesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getTopCountriesWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getTopFilterAttributes', index); - - 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 frequently used filter attributes. These are attributes of your records that you included in the `attributesForFaceting` setting. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getTopFilterAttributes for the plain version. - */ - getTopFilterAttributesWithHTTPInfo( - { index, search, startDate, endDate, limit, offset, tags }: GetTopFilterAttributesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getTopFilterAttributesWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('attribute', 'getTopFilterForAttribute', attribute); - - validateRequired('index', 'getTopFilterForAttribute', index); - - 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 frequent filter (facet) values for a filter attribute. These are attributes of your records that you included in the `attributesForFaceting` setting. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getTopFilterForAttribute for the plain version. - */ - getTopFilterForAttributeWithHTTPInfo( - { attribute, index, search, startDate, endDate, limit, offset, tags }: GetTopFilterForAttributeProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('attribute', 'getTopFilterForAttributeWithHTTPInfo', attribute); - - validateRequired('index', 'getTopFilterForAttributeWithHTTPInfo', index); - - 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.requestWithHttpInfo(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](https://www.algolia.com/doc/rest-api/analytics/get-searches-no-results) 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 { - validateRequired('index', 'getTopFiltersNoResults', index); - - 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 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](https://www.algolia.com/doc/rest-api/analytics/get-searches-no-results) operation. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getTopFiltersNoResults for the plain version. - */ - getTopFiltersNoResultsWithHTTPInfo( - { index, search, startDate, endDate, limit, offset, tags }: GetTopFiltersNoResultsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getTopFiltersNoResultsWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 `clickAnalytics` set to `true`. This differs from the response\'s `count`, which includes searches 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. Algolia didn\'t receive any events, so rates 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 { - validateRequired('index', 'getTopHits', index); - - 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); - }, - /** - * 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 `clickAnalytics` set to `true`. This differs from the response\'s `count`, which includes searches 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. Algolia didn\'t receive any events, so rates 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getTopHits for the plain version. - */ - getTopHitsWithHTTPInfo( - { index, search, clickAnalytics, revenueAnalytics, startDate, endDate, limit, offset, tags }: GetTopHitsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getTopHitsWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 `clickAnalytics` set to `true`. This differs from the response\'s `count`, which includes searches 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. Algolia didn\'t receive any events, so rates 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 { - validateRequired('index', 'getTopSearches', index); - - 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); - }, - /** - * 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 `clickAnalytics` set to `true`. This differs from the response\'s `count`, which includes searches 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. Algolia didn\'t receive any events, so rates 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getTopSearches for the plain version. - */ - getTopSearchesWithHTTPInfo( - { - index, - clickAnalytics, - revenueAnalytics, - startDate, - endDate, - orderBy, - direction, - limit, - offset, - tags, - }: GetTopSearchesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getTopSearchesWithHTTPInfo', index); - - 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.requestWithHttpInfo(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 { - validateRequired('index', 'getUsersCount', index); - - 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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getUsersCount for the plain version. - */ - getUsersCountWithHTTPInfo( - { index, startDate, endDate, tags }: GetUsersCountProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('index', 'getUsersCountWithHTTPInfo', index); - - 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.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/client-analytics/src/createAnalyticsClient.ts b/packages/client-analytics/src/createAnalyticsClient.ts new file mode 100644 index 000000000..f946c33f5 --- /dev/null +++ b/packages/client-analytics/src/createAnalyticsClient.ts @@ -0,0 +1,37 @@ +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 new file mode 100644 index 000000000..a9612b550 --- /dev/null +++ b/packages/client-analytics/src/index.ts @@ -0,0 +1,7 @@ +/** + * @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 new file mode 100644 index 000000000..d061f1ce8 --- /dev/null +++ b/packages/client-analytics/src/methods/addABTest.ts @@ -0,0 +1,20 @@ +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 new file mode 100644 index 000000000..c0dca1286 --- /dev/null +++ b/packages/client-analytics/src/methods/deleteABTest.ts @@ -0,0 +1,20 @@ +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 new file mode 100644 index 000000000..5714fd4e7 --- /dev/null +++ b/packages/client-analytics/src/methods/getABTest.ts @@ -0,0 +1,20 @@ +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 new file mode 100644 index 000000000..0fee5ac20 --- /dev/null +++ b/packages/client-analytics/src/methods/getABTests.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..de10338c1 --- /dev/null +++ b/packages/client-analytics/src/methods/index.ts @@ -0,0 +1,9 @@ +/** + * @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 new file mode 100644 index 000000000..f26098de8 --- /dev/null +++ b/packages/client-analytics/src/methods/stopABTest.ts @@ -0,0 +1,20 @@ +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 new file mode 100644 index 000000000..c07fe41a2 --- /dev/null +++ b/packages/client-analytics/src/types/ABTest.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..4bee4bb3b --- /dev/null +++ b/packages/client-analytics/src/types/AddABTestResponse.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..eee908b6e --- /dev/null +++ b/packages/client-analytics/src/types/AnalyticsClient.ts @@ -0,0 +1,13 @@ +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 new file mode 100644 index 000000000..4df6eb551 --- /dev/null +++ b/packages/client-analytics/src/types/AnalyticsClientOptions.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..ea2e9b4a1 --- /dev/null +++ b/packages/client-analytics/src/types/DeleteABTestResponse.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..88e435998 --- /dev/null +++ b/packages/client-analytics/src/types/GetABTestResponse.ts @@ -0,0 +1,49 @@ +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 new file mode 100644 index 000000000..85a32f8ba --- /dev/null +++ b/packages/client-analytics/src/types/GetABTestsOptions.ts @@ -0,0 +1,23 @@ +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; + + /** + * Filters the returned ab tests by any indices starting with the + * provided prefix that are assigned to either variant of an ab test. + */ + readonly indexPrefix?: string; + + /** + * Filters the returned ab tests by any indices ending with the + * provided suffix that are assigned to either variant of an ab test. + */ + readonly indexSuffix?: string; +}; diff --git a/packages/client-analytics/src/types/GetABTestsResponse.ts b/packages/client-analytics/src/types/GetABTestsResponse.ts new file mode 100644 index 000000000..6e8be6b94 --- /dev/null +++ b/packages/client-analytics/src/types/GetABTestsResponse.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..8480a540a --- /dev/null +++ b/packages/client-analytics/src/types/StopABTestResponse.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..53a381c0d --- /dev/null +++ b/packages/client-analytics/src/types/Variant.ts @@ -0,0 +1,24 @@ +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 new file mode 100644 index 000000000..7826dcf0e --- /dev/null +++ b/packages/client-analytics/src/types/VariantResponse.ts @@ -0,0 +1,56 @@ +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 new file mode 100644 index 000000000..4457e4ade --- /dev/null +++ b/packages/client-analytics/src/types/index.ts @@ -0,0 +1,15 @@ +/** + * @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 deleted file mode 100644 index 444e8bb64..000000000 --- a/packages/client-analytics/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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 deleted file mode 100644 index 62b99d162..000000000 --- a/packages/client-analytics/tsup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -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', - target: 'es2018', - 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 new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/client-common/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 deleted file mode 100644 index 28986bfc5..000000000 --- a/packages/client-common/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/common'; diff --git a/packages/client-common/index.js b/packages/client-common/index.js index 4c570e1f7..ddbe0e4dc 100644 --- a/packages/client-common/index.js +++ b/packages/client-common/index.js @@ -1 +1,2 @@ -module.exports = require('./dist/common.cjs'); +// eslint-disable-next-line functional/immutable-data, import/no-commonjs +module.exports = require('./dist/client-common.cjs.js'); diff --git a/packages/client-common/package.json b/packages/client-common/package.json index cffb567a1..1deefed9f 100644 --- a/packages/client-common/package.json +++ b/packages/client-common/package.json @@ -1,50 +1,22 @@ { "name": "@algolia/client-common", - "version": "5.56.0", - "description": "Common package for the Algolia JavaScript API client.", + "version": "4.17.2", + "private": false, "repository": { "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git://github.com/algolia/algoliasearch-client-javascript.git" }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript#readme", "license": "MIT", - "author": "Algolia", - "type": "module", + "sideEffects": false, + "main": "index.js", + "module": "dist/client-common.esm.js", + "types": "dist/client-common.d.ts", "files": [ - "dist", "index.js", - "index.d.ts" + "dist" ], - "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.18.5", - "@types/node": "24.13.3", - "jsdom": "30.0.1", - "publint": "0.3.22", - "ts-node": "10.9.2", - "tsup": "8.5.1", - "typescript": "5.9.3", - "vitest": "4.1.10" - }, - "engines": { - "node": ">= 14.0.0" + "dependencies": { + "@algolia/requester-common": "4.17.2", + "@algolia/transporter": "4.17.2" } } diff --git a/packages/client-common/src/__tests__/TestSuite.ts b/packages/client-common/src/__tests__/TestSuite.ts new file mode 100644 index 000000000..b33f3a79b --- /dev/null +++ b/packages/client-common/src/__tests__/TestSuite.ts @@ -0,0 +1,155 @@ +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 deleted file mode 100644 index 684a0a02a..000000000 --- a/packages/client-common/src/__tests__/cache/browser-local-storage-cache.test.ts +++ /dev/null @@ -1,171 +0,0 @@ -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}`)).toBeNull(); - }); - - 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 deleted file mode 100644 index ec4a22ee7..000000000 --- a/packages/client-common/src/__tests__/cache/fallbackable-cache.test.ts +++ /dev/null @@ -1,126 +0,0 @@ -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 deleted file mode 100644 index 63ef1082a..000000000 --- a/packages/client-common/src/__tests__/cache/memory-cache.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -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 deleted file mode 100644 index ab3dafab6..000000000 --- a/packages/client-common/src/__tests__/cache/null-cache.test.ts +++ /dev/null @@ -1,47 +0,0 @@ -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 deleted file mode 100644 index 404311586..000000000 --- a/packages/client-common/src/__tests__/create-iterable-promise.test.ts +++ /dev/null @@ -1,256 +0,0 @@ -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 new file mode 100644 index 000000000..1e1fe3b86 --- /dev/null +++ b/packages/client-common/src/__tests__/createFaker.ts @@ -0,0 +1,28 @@ +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 new file mode 100644 index 000000000..494d4c3c4 --- /dev/null +++ b/packages/client-common/src/__tests__/helpers.ts @@ -0,0 +1,13 @@ +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/logWarning.test.ts b/packages/client-common/src/__tests__/logger/logWarning.test.ts deleted file mode 100644 index 1292db259..000000000 --- a/packages/client-common/src/__tests__/logger/logWarning.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { describe, expect, test, vi } from 'vitest'; - -import { createNullLogger, logWarning } from '../../logger'; - -describe('logWarning', () => { - test('prefers the logger warn method when implemented', () => { - vi.resetAllMocks(); - vi.spyOn(console, 'warn'); - - const warn = vi.fn().mockResolvedValue(undefined); - - logWarning({ ...createNullLogger(), warn }, 'foo'); - - expect(warn).toHaveBeenCalledWith('foo'); - expect(console.warn).toHaveBeenCalledTimes(0); - }); - - test('falls back to console.warn when the logger does not implement warn', () => { - vi.resetAllMocks(); - vi.spyOn(console, 'warn'); - - logWarning(createNullLogger(), 'foo'); - - expect(console.warn).toHaveBeenCalledWith('foo'); - }); -}); diff --git a/packages/client-common/src/__tests__/logger/null-logger.test.ts b/packages/client-common/src/__tests__/logger/null-logger.test.ts deleted file mode 100644 index b43f2ad73..000000000 --- a/packages/client-common/src/__tests__/logger/null-logger.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -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__/sse.test.ts b/packages/client-common/src/__tests__/sse.test.ts deleted file mode 100644 index 030d9c935..000000000 --- a/packages/client-common/src/__tests__/sse.test.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { describe, expect, test } from 'vitest'; - -import { iterSSEEvents, type ServerSentEvent } from '../sse'; - -// ─── Helpers ────────────────────────────────────────────────────────────────── - -/** Encode each string argument as a separate Uint8Array chunk in an AsyncIterable. */ -function toStream(...chunks: string[]): AsyncIterable { - const encoder = new TextEncoder(); - return { - async *[Symbol.asyncIterator]() { - for (const chunk of chunks) { - yield encoder.encode(chunk); - } - }, - }; -} - -/** Feed chunks through iterSSEEvents and collect all emitted events. */ -async function collectEvents(...chunks: string[]): Promise { - const events: ServerSentEvent[] = []; - for await (const event of iterSSEEvents(toStream(...chunks))) { - events.push(event); - } - return events; -} - -/** Base event with all defaults — spread to override specific fields. */ -const BASE: ServerSentEvent = { data: '', event: '', id: null, retry: null }; - -// ─── Tests ──────────────────────────────────────────────────────────────────── - -describe('iterSSEEvents', () => { - describe('WHATWG spec cases', () => { - test('1. single data event', async () => { - const events = await collectEvents('data: hello\n\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: 'hello' }); - }); - - test('2. multi-line data', async () => { - const events = await collectEvents('data: line1\ndata: line2\n\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: 'line1\nline2' }); - }); - - test('3. event type', async () => { - const events = await collectEvents('event: custom\ndata: hi\n\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, event: 'custom', data: 'hi' }); - }); - - test('4. comment ignored', async () => { - const events = await collectEvents(': comment\ndata: hi\n\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: 'hi' }); - }); - - test('5. empty data suppressed (no event dispatched)', async () => { - const events = await collectEvents('event: ping\n\n'); - expect(events).toHaveLength(0); - }); - - test('6. field with no colon', async () => { - const events = await collectEvents('data\n\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: '' }); - }); - - test('7. single space strip (two spaces in → one space out)', async () => { - const events = await collectEvents('data: hello\n\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: ' hello' }); - }); - - test('8. unknown field ignored', async () => { - const events = await collectEvents('foo: bar\ndata: hi\n\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: 'hi' }); - }); - - test('9. id persistence across dispatches', async () => { - const events = await collectEvents('id: 42\ndata: a\n\ndata: b\n\n'); - expect(events).toHaveLength(2); - expect(events[0]).toEqual({ ...BASE, data: 'a', id: '42' }); - expect(events[1]).toEqual({ ...BASE, data: 'b', id: '42' }); - }); - - test('10. id with NULL character ignored', async () => { - const events = await collectEvents('id: foo\0bar\ndata: hi\n\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: 'hi' }); - }); - - test('11. retry with digits only', async () => { - const events = await collectEvents('retry: 3000\ndata: hi\n\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: 'hi', retry: 3000 }); - }); - - test('12. retry with non-digits ignored', async () => { - const events = await collectEvents('retry: 3s\ndata: hi\n\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: 'hi' }); - }); - - test('13. CR line endings', async () => { - const events = await collectEvents('data: hello\r\r'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: 'hello' }); - }); - - test('14. CRLF line endings', async () => { - const events = await collectEvents('data: hello\r\n\r\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: 'hello' }); - }); - - test('15. mixed line endings', async () => { - const events = await collectEvents('data: a\rdata: b\n\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: 'a\nb' }); - }); - - test('16. stream ends mid-event (no dispatch)', async () => { - const events = await collectEvents('data: partial'); - expect(events).toHaveLength(0); - }); - }); - - describe('chunk boundary handling', () => { - test('17. trailingCR across chunk boundaries', async () => { - const events = await collectEvents('data: hello\r', '\ndata: world\r\n\r\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: 'hello\nworld' }); - }); - }); - - describe('safety limits', () => { - test('18. 10MB buffer cap throws', async () => { - const chunk = 'a'.repeat(2 * 1024 * 1024); // 2MB per chunk, no newlines - const chunks = Array(6).fill(chunk); // 12MB total > 10MB limit - await expect(collectEvents(...chunks)).rejects.toThrow('SSE line buffer exceeded 10MB'); - }); - }); - - describe('eventType reset', () => { - test('19. eventType resets on suppressed dispatch', async () => { - // First blank line: eventType="custom" but no data → suppressed, eventType resets to "" - // Second event: data="hi" with eventType="" (not "custom") - const events = await collectEvents('event: custom\n\ndata: hi\n\n'); - expect(events).toHaveLength(1); - expect(events[0]).toEqual({ ...BASE, data: 'hi', event: '' }); - }); - }); -}); diff --git a/packages/client-common/src/__tests__/transporter/cache.test.ts b/packages/client-common/src/__tests__/transporter/cache.test.ts deleted file mode 100644 index 08113fa21..000000000 --- a/packages/client-common/src/__tests__/transporter/cache.test.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { beforeEach, describe, expect, test } from 'vitest'; -import { createMemoryCache, createNullCache } from '../../cache'; -import { createNullLogger } from '../../logger'; -import { createTransporter } from '../../transporter'; -import type { AlgoliaAgent } from '../../types'; - -describe('transporter cache', () => { - let requestCount: number; - beforeEach(() => { - requestCount = 0; - }); - - const algoliaAgent: AlgoliaAgent = { - value: 'test', - add: () => algoliaAgent, - }; - - const transporter = createTransporter({ - hosts: [{ url: 'localhost', accept: 'readWrite', protocol: 'https' }], - hostsCache: createNullCache(), - baseHeaders: {}, - baseQueryParameters: {}, - algoliaAgent, - logger: createNullLogger(), - timeouts: { - connect: 1000, - read: 2000, - write: 3000, - }, - requester: { - send: async () => { - requestCount++; - return { - status: 200, - content: JSON.stringify({ value: requestCount }), - isTimedOut: false, - }; - }, - }, - requestsCache: createMemoryCache(), - responsesCache: createMemoryCache(), - }); - - test('uses cache for cacheable requests', async () => { - const firstResponse = await transporter.request<{ value: number }>( - { method: 'GET', path: '/test-1', queryParameters: {}, headers: {}, cacheable: true }, - {}, - ); - const secondResponse = await transporter.request<{ value: number }>( - { method: 'GET', path: '/test-1', queryParameters: {}, headers: {}, cacheable: true }, - {}, - ); - - // Should use cached response, so both values are the same and only 1 request made - expect(firstResponse).toEqual({ value: 1 }); - expect(secondResponse).toEqual({ value: 1 }); - expect(requestCount).toBe(1); - }); - - test('does not use cache for implicit non-cacheable requests', async () => { - const firstResponse = await transporter.request<{ value: number }>( - { method: 'POST', path: '/test-2', queryParameters: {}, headers: {} }, - {}, - ); - const secondResponse = await transporter.request<{ value: number }>( - { method: 'POST', path: '/test-2', queryParameters: {}, headers: {} }, - {}, - ); - - // Should NOT use cache, so each request increments the counter - expect(firstResponse).toEqual({ value: 1 }); - expect(secondResponse).toEqual({ value: 2 }); - expect(requestCount).toBe(2); - }); - - test('does not use cache for explicit non-cacheable requests', async () => { - const firstResponse = await transporter.request<{ value: number }>( - { method: 'POST', path: '/test-3', queryParameters: {}, headers: {}, cacheable: false }, - {}, - ); - const secondResponse = await transporter.request<{ value: number }>( - { method: 'POST', path: '/test-3', queryParameters: {}, headers: {}, cacheable: false }, - {}, - ); - - // Should NOT use cache, so each request increments the counter - expect(firstResponse).toEqual({ value: 1 }); - expect(secondResponse).toEqual({ value: 2 }); - expect(requestCount).toBe(2); - }); - - test('uses cache for POST requests marked as cacheable', async () => { - const firstResponse = await transporter.request<{ value: number }>( - { method: 'POST', path: '/test-4', queryParameters: {}, headers: {}, cacheable: true }, - {}, - ); - const secondResponse = await transporter.request<{ value: number }>( - { method: 'POST', path: '/test-4', queryParameters: {}, headers: {}, cacheable: true }, - {}, - ); - - // Should use cached response, so both values are the same and only 1 request made - expect(firstResponse).toEqual({ value: 1 }); - expect(secondResponse).toEqual({ value: 1 }); - expect(requestCount).toBe(1); - }); - - test('accepts cacheable from request options', async () => { - const firstResponse = await transporter.request<{ value: number }>( - { method: 'GET', path: '/test-5', queryParameters: {}, headers: {}, cacheable: false }, - { cacheable: true }, - ); - const secondResponse = await transporter.request<{ value: number }>( - { method: 'GET', path: '/test-5', queryParameters: {}, headers: {}, cacheable: false }, - { cacheable: true }, - ); - - // Should use cached response, so both values are the same and only 1 request made - expect(firstResponse).toEqual({ value: 1 }); - expect(secondResponse).toEqual({ value: 1 }); - expect(requestCount).toBe(1); - }); -}); diff --git a/packages/client-common/src/__tests__/transporter/compression.test.ts b/packages/client-common/src/__tests__/transporter/compression.test.ts deleted file mode 100644 index 302f83687..000000000 --- a/packages/client-common/src/__tests__/transporter/compression.test.ts +++ /dev/null @@ -1,177 +0,0 @@ -import { gunzipSync, gzipSync } from 'node:zlib'; -import { beforeEach, describe, expect, test, vi } from 'vitest'; -import { createMemoryCache, createNullCache } from '../../cache'; -import { createNullLogger } from '../../logger'; -import { createTransporter } from '../../transporter'; -import { COMPRESSION_THRESHOLD } from '../../transporter/compress'; -import type { AlgoliaAgent, EndRequest, Logger } from '../../types'; - -const largePayload = { data: 'x'.repeat(COMPRESSION_THRESHOLD + 1) }; - -const algoliaAgent: AlgoliaAgent = { - value: 'test', - add: () => algoliaAgent, -}; - -async function gzipCompress(data: string): Promise { - return gzipSync(Buffer.from(data)); -} - -function makeTransporter(opts: { - compress?: (data: string) => Promise; - compression?: 'gzip'; - logger?: Logger; - onRequest?: (req: EndRequest) => void; -}) { - return createTransporter({ - hosts: [{ url: 'localhost', accept: 'readWrite', protocol: 'https' }], - hostsCache: createNullCache(), - baseHeaders: {}, - baseQueryParameters: {}, - algoliaAgent, - logger: opts.logger ?? createNullLogger(), - timeouts: { connect: 1000, read: 2000, write: 3000 }, - ...(opts.compress ? { compress: opts.compress } : {}), - ...(opts.compression ? { compression: opts.compression } : {}), - requester: { - send: async (req) => { - opts.onRequest?.(req); - return { status: 200, content: '{}', isTimedOut: false }; - }, - }, - requestsCache: createMemoryCache(), - responsesCache: createMemoryCache(), - }); -} - -describe('compression', () => { - let captured: EndRequest | undefined; - - beforeEach(() => { - captured = undefined; - }); - - test('does not compress when compression is not enabled', async () => { - const transporter = makeTransporter({ - compress: gzipCompress, - onRequest: (req) => { - captured = req; - }, - }); - - await transporter.request({ method: 'POST', path: '/test', queryParameters: {}, headers: {}, data: largePayload }); - - expect(captured).toBeDefined(); - expect(captured!.headers['content-encoding']).toBeUndefined(); - expect(typeof captured!.data).toBe('string'); - }); - - test('compresses POST body when compression is gzip and compress is provided', async () => { - const transporter = makeTransporter({ - compress: gzipCompress, - compression: 'gzip', - onRequest: (req) => { - captured = req; - }, - }); - - await transporter.request({ method: 'POST', path: '/test', queryParameters: {}, headers: {}, data: largePayload }); - - expect(captured).toBeDefined(); - expect(captured!.headers['content-encoding']).toBe('gzip'); - expect(captured!.data).toBeInstanceOf(Uint8Array); - - const decompressed = gunzipSync(Buffer.from(captured!.data as Uint8Array)).toString(); - expect(decompressed).toBe(JSON.stringify(largePayload)); - }); - - test('compresses PUT body when compression is gzip and compress is provided', async () => { - const transporter = makeTransporter({ - compress: gzipCompress, - compression: 'gzip', - onRequest: (req) => { - captured = req; - }, - }); - - await transporter.request({ method: 'PUT', path: '/test', queryParameters: {}, headers: {}, data: largePayload }); - - expect(captured).toBeDefined(); - expect(captured!.headers['content-encoding']).toBe('gzip'); - expect(captured!.data).toBeInstanceOf(Uint8Array); - - const decompressed = gunzipSync(Buffer.from(captured!.data as Uint8Array)).toString(); - expect(decompressed).toBe(JSON.stringify(largePayload)); - }); - - test('does not compress POST when body is below threshold', async () => { - const transporter = makeTransporter({ - compress: gzipCompress, - compression: 'gzip', - onRequest: (req) => { - captured = req; - }, - }); - - await transporter.request({ - method: 'POST', - path: '/test', - queryParameters: {}, - headers: {}, - data: { foo: 'bar' }, - }); - - expect(captured).toBeDefined(); - expect(captured!.headers['content-encoding']).toBeUndefined(); - expect(typeof captured!.data).toBe('string'); - }); - - test('does not compress GET requests', async () => { - const transporter = makeTransporter({ - compress: gzipCompress, - compression: 'gzip', - onRequest: (req) => { - captured = req; - }, - }); - - await transporter.request({ method: 'GET', path: '/test', queryParameters: {}, headers: {} }); - - expect(captured).toBeDefined(); - expect(captured!.headers['content-encoding']).toBeUndefined(); - expect(captured!.data).toBeUndefined(); - }); - - test('logs warning when compression is gzip but compress method is missing', async () => { - const logger: Logger = { debug: vi.fn(), info: vi.fn(), error: vi.fn() }; - const transporter = makeTransporter({ - compression: 'gzip', - logger, - onRequest: (req) => { - captured = req; - }, - }); - - await transporter.request({ method: 'POST', path: '/test', queryParameters: {}, headers: {}, data: largePayload }); - - expect(captured).toBeDefined(); - expect(captured!.headers['content-encoding']).toBeUndefined(); - expect(typeof captured!.data).toBe('string'); - expect(logger.info).toHaveBeenCalledWith('Compression is disabled because no compress method is available.'); - }); - - test('silently sends uncompressed when compression is gzip, compress is missing, and null logger', async () => { - const transporter = makeTransporter({ - compression: 'gzip', - onRequest: (req) => { - captured = req; - }, - }); - - await transporter.request({ method: 'POST', path: '/test', queryParameters: {}, headers: {}, data: largePayload }); - - expect(captured).toBeDefined(); - expect(captured!.headers['content-encoding']).toBeUndefined(); - expect(typeof captured!.data).toBe('string'); - }); -}); diff --git a/packages/client-common/src/__tests__/transporter/correlationId.test.ts b/packages/client-common/src/__tests__/transporter/correlationId.test.ts deleted file mode 100644 index 3c602f7f2..000000000 --- a/packages/client-common/src/__tests__/transporter/correlationId.test.ts +++ /dev/null @@ -1,228 +0,0 @@ -import { describe, expect, test } from 'vitest'; -import { createMemoryCache, createNullCache } from '../../cache'; -import { createNullLogger } from '../../logger'; -import { ApiError, DeserializationError, DetailedApiError, RetryError, createTransporter } from '../../transporter'; -import type { AlgoliaAgent, Requester, Transporter } from '../../types'; - -describe('correlation ID on errors', () => { - const algoliaAgent: AlgoliaAgent = { - value: 'test', - add: () => algoliaAgent, - }; - - function createTestTransporter(requester: Requester, hostCount = 1): Transporter { - return createTransporter({ - hosts: Array.from({ length: hostCount }, (_, i) => ({ - url: `localhost-${i}`, - accept: 'readWrite', - protocol: 'https', - })), - hostsCache: createNullCache(), - baseHeaders: {}, - baseQueryParameters: {}, - algoliaAgent, - logger: createNullLogger(), - timeouts: { - connect: 1000, - read: 2000, - write: 3000, - }, - requester, - requestsCache: createMemoryCache(), - responsesCache: createMemoryCache(), - }); - } - - const request = { - method: 'GET', - path: '/test', - queryParameters: {}, - headers: {}, - } as const; - - test('exposes the correlation ID on 4xx errors and appends it to the message', async () => { - const transporter = createTestTransporter({ - send: async () => ({ - status: 403, - content: JSON.stringify({ message: 'Invalid API key', status: 403 }), - headers: { 'correlation-id': 'abc123def45' }, - isTimedOut: false, - }), - }); - - const error: ApiError = await transporter.request(request).then( - () => Promise.reject(new Error('should have thrown')), - (err) => err, - ); - - expect(error).toBeInstanceOf(ApiError); - expect(error.correlationId).toBe('abc123def45'); - expect(error.message).toBe('Invalid API key (Correlation-ID: abc123def45)'); - expect(error.status).toBe(403); - }); - - test('leaves errors byte-identical to today when the header is absent', async () => { - const transporter = createTestTransporter({ - send: async () => ({ - status: 403, - content: JSON.stringify({ message: 'Invalid API key', status: 403 }), - headers: {}, - isTimedOut: false, - }), - }); - - const error: ApiError = await transporter.request(request).then( - () => Promise.reject(new Error('should have thrown')), - (err) => err, - ); - - expect(error).toBeInstanceOf(ApiError); - expect(error.correlationId).toBeUndefined(); - expect(error.message).toBe('Invalid API key'); - }); - - test('reads the header case-insensitively from custom requesters', async () => { - const transporter = createTestTransporter({ - send: async () => ({ - status: 400, - content: JSON.stringify({ message: 'Bad request', status: 400 }), - headers: { 'Correlation-ID': 'abc123def45' }, - isTimedOut: false, - }), - }); - - await expect(transporter.request(request)).rejects.toMatchObject({ - correlationId: 'abc123def45', - }); - }); - - test('threads the correlation ID through detailed errors', async () => { - const transporter = createTestTransporter({ - send: async () => ({ - status: 400, - content: JSON.stringify({ message: 'Invalid request', status: 400, error: { code: 'invalid_request' } }), - headers: { 'correlation-id': 'abc123def45' }, - isTimedOut: false, - }), - }); - - const error: DetailedApiError = await transporter.request(request).then( - () => Promise.reject(new Error('should have thrown')), - (err) => err, - ); - - expect(error).toBeInstanceOf(DetailedApiError); - expect(error.correlationId).toBe('abc123def45'); - expect(error.error).toEqual({ code: 'invalid_request' }); - }); - - test('never reads the unrelated edge X-Algolia-RequestID header', async () => { - const transporter = createTestTransporter({ - send: async () => ({ - status: 403, - content: JSON.stringify({ message: 'Invalid API key', status: 403 }), - headers: { 'x-algolia-requestid': 'edge-pop-id' }, - isTimedOut: false, - }), - }); - - const error: ApiError = await transporter.request(request).then( - () => Promise.reject(new Error('should have thrown')), - (err) => err, - ); - - expect(error.correlationId).toBeUndefined(); - expect(error.message).toBe('Invalid API key'); - }); - - test('surfaces the last-seen correlation ID when all hosts are exhausted', async () => { - let attempt = 0; - const transporter = createTestTransporter( - { - send: async () => { - attempt++; - return { - status: 500, - content: JSON.stringify({ message: 'Internal error', status: 500 }), - headers: { 'correlation-id': `cid-attempt-${attempt}` }, - isTimedOut: false, - }; - }, - }, - 2, - ); - - const error: RetryError = await transporter.request(request).then( - () => Promise.reject(new Error('should have thrown')), - (err) => err, - ); - - expect(error).toBeInstanceOf(RetryError); - expect(attempt).toBe(2); - expect(error.correlationId).toBe('cid-attempt-2'); - expect(error.message).toContain('Unreachable hosts'); - expect(error.message).toContain('(Correlation-ID: cid-attempt-2)'); - }); - - test('carries no correlation ID when every attempt times out', async () => { - const transporter = createTestTransporter( - { - send: async () => ({ - status: 0, - content: '', - isTimedOut: true, - }), - }, - 2, - ); - - const error: RetryError = await transporter.request(request).then( - () => Promise.reject(new Error('should have thrown')), - (err) => err, - ); - - expect(error).toBeInstanceOf(RetryError); - expect(error.correlationId).toBeUndefined(); - expect(error.message).not.toContain('Correlation-ID'); - }); - - test('surfaces the correlation ID when a successful response body fails to parse', async () => { - const transporter = createTestTransporter({ - send: async () => ({ - status: 200, - content: 'not json', - headers: { 'correlation-id': 'abc123def45' }, - isTimedOut: false, - }), - }); - - const error: DeserializationError = await transporter.request(request).then( - () => Promise.reject(new Error('should have thrown')), - (err) => err, - ); - - expect(error).toBeInstanceOf(DeserializationError); - expect(error.correlationId).toBe('abc123def45'); - expect(error.message).toContain('(Correlation-ID: abc123def45)'); - }); - - test('omits the correlation ID from a parse failure when the header is absent', async () => { - const transporter = createTestTransporter({ - send: async () => ({ - status: 200, - content: 'not json', - headers: {}, - isTimedOut: false, - }), - }); - - const error: DeserializationError = await transporter.request(request).then( - () => Promise.reject(new Error('should have thrown')), - (err) => err, - ); - - expect(error).toBeInstanceOf(DeserializationError); - expect(error.correlationId).toBeUndefined(); - expect(error.message).not.toContain('Correlation-ID'); - }); -}); diff --git a/packages/client-common/src/__tests__/transporter/requestId.test.ts b/packages/client-common/src/__tests__/transporter/requestId.test.ts deleted file mode 100644 index db48c2a38..000000000 --- a/packages/client-common/src/__tests__/transporter/requestId.test.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { afterEach, describe, expect, test, vi } from 'vitest'; -import { generateRequestId, withRequestId } from '../../transporter'; - -describe('generateRequestId', () => { - afterEach(() => { - vi.unstubAllGlobals(); - }); - - test('matches the 11-char base62 format', () => { - for (let i = 0; i < 1000; i++) { - expect(generateRequestId()).toMatch(/^[0-9A-Za-z]{11}$/); - } - }); - - test('generates distinct values across calls', () => { - const ids = new Set(Array.from({ length: 10000 }, () => generateRequestId())); - - expect(ids.size).toBe(10000); - }); - - test('uses crypto.getRandomValues when available', () => { - const getRandomValues = vi.fn((bytes: Uint8Array) => bytes.fill(0)); - vi.stubGlobal('crypto', { getRandomValues }); - - expect(generateRequestId()).toBe('AAAAAAAAAAA'); - expect(getRandomValues).toHaveBeenCalledTimes(1); - }); - - test('falls back to Math.random when the crypto global is absent', () => { - vi.stubGlobal('crypto', undefined); - - for (let i = 0; i < 1000; i++) { - expect(generateRequestId()).toMatch(/^[0-9A-Za-z]{11}$/); - } - }); - - test('generates distinct values without the crypto global', () => { - vi.stubGlobal('crypto', undefined); - - const ids = new Set(Array.from({ length: 10000 }, () => generateRequestId())); - - expect(ids.size).toBe(10000); - }); -}); - -describe('withRequestId', () => { - const transporter = (requestIdChannel?: 'headers' | 'queryParameters') => ({ - requestIdChannel, - baseHeaders: {}, - baseQueryParameters: {}, - }); - - test('returns the options unchanged when the channel is off', () => { - const requestOptions = { headers: { 'x-custom': 'value' } }; - - expect(withRequestId(transporter(undefined), requestOptions)).toBe(requestOptions); - expect(withRequestId(transporter(undefined), undefined)).toBeUndefined(); - }); - - test('adds a request-id header on the headers channel', () => { - const requestOptions = withRequestId(transporter('headers'), { headers: { 'x-custom': 'value' } }); - - expect(requestOptions?.headers).toMatchObject({ - 'x-custom': 'value', - 'request-id': expect.stringMatching(/^[0-9A-Za-z]{11}$/), - }); - expect(requestOptions?.queryParameters).toBeUndefined(); - }); - - test('adds an x-algolia-request-id query parameter on the queryParameters channel', () => { - const requestOptions = withRequestId(transporter('queryParameters'), undefined); - - expect(requestOptions?.queryParameters).toMatchObject({ - 'x-algolia-request-id': expect.stringMatching(/^[0-9A-Za-z]{11}$/), - }); - expect(requestOptions?.headers).toBeUndefined(); - }); - - test('creates the options when none are given', () => { - expect(withRequestId(transporter('headers'), undefined)?.headers?.['request-id']).toMatch(/^[0-9A-Za-z]{11}$/); - }); - - test('preserves the other request options', () => { - const requestOptions = withRequestId(transporter('headers'), { - timeouts: { read: 10 }, - queryParameters: { forwardToReplicas: 'true' }, - cacheable: false, - }); - - expect(requestOptions).toMatchObject({ - timeouts: { read: 10 }, - queryParameters: { forwardToReplicas: 'true' }, - cacheable: false, - }); - }); - - test('generates a distinct ID per call', () => { - const first = withRequestId(transporter('headers'), undefined)?.headers?.['request-id']; - const second = withRequestId(transporter('headers'), undefined)?.headers?.['request-id']; - - expect(first).not.toBe(second); - }); - - test('keeps a caller-supplied request-id header, case-insensitively', () => { - const requestOptions = { headers: { 'Request-ID': 'CallerChose' } }; - - expect(withRequestId(transporter('headers'), requestOptions)).toBe(requestOptions); - expect(withRequestId(transporter('queryParameters'), requestOptions)).toBe(requestOptions); - }); - - test('keeps a caller-supplied x-algolia-request-id query parameter', () => { - const requestOptions = { queryParameters: { 'x-algolia-request-id': 'CallerChose' } }; - - expect(withRequestId(transporter('headers'), requestOptions)).toBe(requestOptions); - expect(withRequestId(transporter('queryParameters'), requestOptions)).toBe(requestOptions); - }); - - test('is a no-op on its own output, so nested helpers share one ID', () => { - const requestOptions = withRequestId(transporter('headers'), undefined); - - expect(withRequestId(transporter('headers'), requestOptions)).toBe(requestOptions); - }); - - test('respects a request-id set in the transporter base headers', () => { - const requestOptions = withRequestId( - { requestIdChannel: 'headers', baseHeaders: { 'Request-ID': 'BaseChose' }, baseQueryParameters: {} }, - undefined, - ); - - expect(requestOptions).toBeUndefined(); - }); - - test('respects an x-algolia-request-id set in the transporter base query parameters', () => { - const requestOptions = withRequestId( - { - requestIdChannel: 'queryParameters', - baseHeaders: {}, - baseQueryParameters: { 'x-algolia-request-id': 'BaseChose' }, - }, - undefined, - ); - - expect(requestOptions).toBeUndefined(); - }); -}); diff --git a/packages/client-common/src/__tests__/transporter/requestIdChannel.test.ts b/packages/client-common/src/__tests__/transporter/requestIdChannel.test.ts deleted file mode 100644 index 3df048447..000000000 --- a/packages/client-common/src/__tests__/transporter/requestIdChannel.test.ts +++ /dev/null @@ -1,233 +0,0 @@ -import { describe, expect, test } from 'vitest'; -import { createMemoryCache, createNullCache } from '../../cache'; -import { createNullLogger } from '../../logger'; -import { createTransporter } from '../../transporter'; -import type { AlgoliaAgent, EndRequest, Requester, TransporterOptions, TransporterWithHttpInfo } from '../../types'; - -const REQUEST_ID_FORMAT = /^[0-9A-Za-z]{11}$/; - -describe('request ID channel', () => { - const algoliaAgent: AlgoliaAgent = { - value: 'test', - add: () => algoliaAgent, - }; - - function createTestTransporter( - requester: Requester, - options: Partial = {}, - ): TransporterWithHttpInfo { - return createTransporter({ - hosts: [{ url: 'localhost', accept: 'readWrite', protocol: 'https' }], - hostsCache: createNullCache(), - baseHeaders: {}, - baseQueryParameters: {}, - algoliaAgent, - logger: createNullLogger(), - timeouts: { - connect: 1000, - read: 2000, - write: 3000, - }, - requester, - requestsCache: createMemoryCache({ serializable: false }), - responsesCache: createMemoryCache(), - ...options, - }); - } - - function createEchoRequester(): { requester: Requester; requests: EndRequest[] } { - const requests: EndRequest[] = []; - - return { - requests, - requester: { - send: async (endRequest) => { - requests.push(endRequest); - return { status: 200, content: '{}', isTimedOut: false }; - }, - }, - }; - } - - function sentQueryParameterId(endRequest: EndRequest): string | null { - return new URL(endRequest.url).searchParams.get('x-algolia-request-id'); - } - - const request = { - method: 'GET', - path: '/test', - queryParameters: {}, - headers: {}, - } as const; - - test('sends no request ID when no channel is configured', async () => { - const { requester, requests } = createEchoRequester(); - const transporter = createTestTransporter(requester); - - await transporter.request(request); - - expect(requests[0].headers['request-id']).toBeUndefined(); - expect(sentQueryParameterId(requests[0])).toBeNull(); - }); - - test('sends the request ID as a header on the headers channel', async () => { - const { requester, requests } = createEchoRequester(); - const transporter = createTestTransporter(requester, { requestIdChannel: 'headers' }); - - await transporter.request(request); - - expect(requests[0].headers['request-id']).toMatch(REQUEST_ID_FORMAT); - expect(sentQueryParameterId(requests[0])).toBeNull(); - }); - - test('sends the request ID as a query parameter on the queryParameters channel', async () => { - const { requester, requests } = createEchoRequester(); - const transporter = createTestTransporter(requester, { requestIdChannel: 'queryParameters' }); - - await transporter.request(request); - - expect(sentQueryParameterId(requests[0])).toMatch(REQUEST_ID_FORMAT); - expect(requests[0].headers['request-id']).toBeUndefined(); - }); - - test('reuses the ID across retry attempts and mints a fresh one per call', async () => { - const requests: EndRequest[] = []; - let sendCount = 0; - const requester: Requester = { - send: async (endRequest) => { - requests.push(endRequest); - sendCount++; - if (sendCount === 1) { - return { status: 500, content: JSON.stringify({ message: 'error', status: 500 }), isTimedOut: false }; - } - return { status: 200, content: '{}', isTimedOut: false }; - }, - }; - const transporter = createTestTransporter(requester, { - hosts: [ - { url: 'localhost-1', accept: 'readWrite', protocol: 'https' }, - { url: 'localhost-2', accept: 'readWrite', protocol: 'https' }, - ], - requestIdChannel: 'headers', - }); - - await transporter.request(request); - - expect(requests).toHaveLength(2); - const firstCallId = requests[0].headers['request-id']; - expect(firstCallId).toMatch(REQUEST_ID_FORMAT); - expect(requests[1].headers['request-id']).toBe(firstCallId); - - await transporter.request(request); - - expect(requests).toHaveLength(3); - expect(requests[2].headers['request-id']).toMatch(REQUEST_ID_FORMAT); - expect(requests[2].headers['request-id']).not.toBe(firstCallId); - }); - - test('preserves a caller-supplied Request-ID header', async () => { - const { requester, requests } = createEchoRequester(); - const transporter = createTestTransporter(requester, { requestIdChannel: 'headers' }); - - await transporter.request(request, { headers: { 'Request-ID': 'callerSuppl1' } }); - - expect(requests[0].headers['request-id']).toBe('callerSuppl1'); - }); - - test('never mints when the caller supplied a header, even on the queryParameters channel', async () => { - const { requester, requests } = createEchoRequester(); - const transporter = createTestTransporter(requester, { requestIdChannel: 'queryParameters' }); - - await transporter.request(request, { headers: { 'Request-ID': 'callerSuppl1' } }); - - expect(requests[0].headers['request-id']).toBe('callerSuppl1'); - expect(sentQueryParameterId(requests[0])).toBeNull(); - }); - - test('preserves a caller-supplied x-algolia-request-id query parameter', async () => { - const { requester, requests } = createEchoRequester(); - const transporter = createTestTransporter(requester, { requestIdChannel: 'queryParameters' }); - - await transporter.request(request, { queryParameters: { 'x-algolia-request-id': 'callerSuppl1' } }); - - expect(sentQueryParameterId(requests[0])).toBe('callerSuppl1'); - expect(requests[0].headers['request-id']).toBeUndefined(); - }); - - test('never mints when the caller supplied a query parameter, even on the headers channel', async () => { - const { requester, requests } = createEchoRequester(); - const transporter = createTestTransporter(requester, { requestIdChannel: 'headers' }); - - await transporter.request(request, { queryParameters: { 'x-algolia-request-id': 'callerSuppl1' } }); - - expect(requests[0].headers['request-id']).toBeUndefined(); - expect(sentQueryParameterId(requests[0])).toBe('callerSuppl1'); - }); - - test('detects a caller-supplied query parameter case-insensitively on the headers channel', async () => { - const { requester, requests } = createEchoRequester(); - const transporter = createTestTransporter(requester, { requestIdChannel: 'headers' }); - - await transporter.request(request, { queryParameters: { 'X-Algolia-Request-Id': 'callerSuppl1' } }); - - expect(requests[0].headers['request-id']).toBeUndefined(); - }); - - test('leaves the cache key unchanged so cacheable calls still hit the cache', async () => { - const { requester, requests } = createEchoRequester(); - const transporter = createTestTransporter(requester, { requestIdChannel: 'queryParameters' }); - const cacheableRequest = { ...request, cacheable: true }; - - await transporter.request(cacheableRequest); - await transporter.request(cacheableRequest); - - expect(requests).toHaveLength(1); - }); - - test('shares one wire request and one ID between deduplicated concurrent calls', async () => { - const requests: EndRequest[] = []; - const requester: Requester = { - send: async (endRequest) => { - requests.push(endRequest); - await new Promise((resolve) => setTimeout(resolve, 10)); - return { status: 200, content: '{}', isTimedOut: false }; - }, - }; - const transporter = createTestTransporter(requester, { requestIdChannel: 'headers' }); - const cacheableRequest = { ...request, cacheable: true }; - - await Promise.all([transporter.request(cacheableRequest), transporter.request(cacheableRequest)]); - - expect(requests).toHaveLength(1); - expect(requests[0].headers['request-id']).toMatch(REQUEST_ID_FORMAT); - }); - - test('sends the request ID on requestWithHttpInfo', async () => { - const { requester, requests } = createEchoRequester(); - const transporter = createTestTransporter(requester, { requestIdChannel: 'headers' }); - - await transporter.requestWithHttpInfo(request); - - expect(requests[0].headers['request-id']).toMatch(REQUEST_ID_FORMAT); - }); - - test('sends the request ID on streamed requests', async () => { - const requests: EndRequest[] = []; - const requester: Requester = { - send: async () => ({ status: 200, content: '{}', isTimedOut: false }), - sendStream: async (endRequest) => { - requests.push(endRequest); - return new ReadableStream({ - start(controller) { - controller.close(); - }, - }); - }, - }; - const transporter = createTestTransporter(requester, { requestIdChannel: 'headers' }); - - await transporter.requestStream(request).next(); - - expect(requests[0].headers['request-id']).toMatch(REQUEST_ID_FORMAT); - }); -}); diff --git a/packages/client-common/src/__tests__/transporter/withHttpInfo.test.ts b/packages/client-common/src/__tests__/transporter/withHttpInfo.test.ts deleted file mode 100644 index 32d4e2e5a..000000000 --- a/packages/client-common/src/__tests__/transporter/withHttpInfo.test.ts +++ /dev/null @@ -1,187 +0,0 @@ -import { describe, expect, test } from 'vitest'; -import { createMemoryCache, createNullCache } from '../../cache'; -import { createNullLogger } from '../../logger'; -import { DetailedApiError, createTransporter } from '../../transporter'; -import type { AlgoliaAgent, Requester, TransporterWithHttpInfo } from '../../types'; - -describe('transporter requestWithHttpInfo', () => { - const algoliaAgent: AlgoliaAgent = { - value: 'test', - add: () => algoliaAgent, - }; - - function createTestTransporter(requester: Requester): TransporterWithHttpInfo { - return createTransporter({ - hosts: [{ url: 'localhost', accept: 'readWrite', protocol: 'https' }], - hostsCache: createNullCache(), - baseHeaders: {}, - baseQueryParameters: {}, - algoliaAgent, - logger: createNullLogger(), - timeouts: { - connect: 1000, - read: 2000, - write: 3000, - }, - requester, - requestsCache: createMemoryCache(), - responsesCache: createMemoryCache(), - }); - } - - test('resolves with the status, headers, content and the same deserialized data as `request`', async () => { - const transporter = createTestTransporter({ - send: async () => ({ - status: 200, - content: JSON.stringify({ value: 42 }), - headers: { 'x-served-by': 'test-host' }, - isTimedOut: false, - }), - }); - - const response = await transporter.requestWithHttpInfo<{ value: number }>({ - method: 'GET', - path: '/test', - queryParameters: {}, - headers: {}, - }); - - expect(response).toEqual({ - status: 200, - headers: { 'x-served-by': 'test-host' }, - content: JSON.stringify({ value: 42 }), - data: { value: 42 }, - }); - - const data = await transporter.request<{ value: number }>({ - method: 'GET', - path: '/test', - queryParameters: {}, - headers: {}, - }); - - expect(response.data).toEqual(data); - }); - - test('leaves `headers` undefined when the requester does not capture them', async () => { - const transporter = createTestTransporter({ - send: async () => ({ - status: 200, - content: JSON.stringify({ value: 42 }), - isTimedOut: false, - }), - }); - - const response = await transporter.requestWithHttpInfo<{ value: number }>({ - method: 'GET', - path: '/test', - queryParameters: {}, - headers: {}, - }); - - expect(response.headers).toBeUndefined(); - }); - - test('resolves with `undefined` data on 204 empty responses', async () => { - const transporter = createTestTransporter({ - send: async () => ({ - status: 204, - content: '', - headers: {}, - isTimedOut: false, - }), - }); - - const response = await transporter.requestWithHttpInfo({ - method: 'DELETE', - path: '/test', - queryParameters: {}, - headers: {}, - }); - - expect(response.status).toBe(204); - expect(response.content).toBe(''); - expect(response.data).toBeUndefined(); - }); - - test('throws the same errors as `request` on non-2xx responses', async () => { - const transporter = createTestTransporter({ - send: async () => ({ - status: 403, - content: JSON.stringify({ message: 'Invalid API key', status: 403 }), - isTimedOut: false, - }), - }); - - const request = { - method: 'GET', - path: '/test', - queryParameters: {}, - headers: {}, - } as const; - - await expect(transporter.requestWithHttpInfo(request)).rejects.toMatchObject({ - name: 'ApiError', - message: 'Invalid API key', - status: 403, - }); - await expect(transporter.request(request)).rejects.toMatchObject({ - name: 'ApiError', - message: 'Invalid API key', - status: 403, - }); - }); - - test('throws detailed errors when the response contains one', async () => { - const transporter = createTestTransporter({ - send: async () => ({ - status: 400, - content: JSON.stringify({ message: 'Invalid request', status: 400, error: { code: 'invalid_request' } }), - isTimedOut: false, - }), - }); - - await expect( - transporter.requestWithHttpInfo({ - method: 'GET', - path: '/test', - queryParameters: {}, - headers: {}, - }), - ).rejects.toBeInstanceOf(DetailedApiError); - }); - - test('bypasses the requests and responses caches, even for cacheable requests', async () => { - let requestCount = 0; - const transporter = createTestTransporter({ - send: async () => { - requestCount++; - return { - status: 200, - content: JSON.stringify({ value: requestCount }), - isTimedOut: false, - }; - }, - }); - - const request = { - method: 'GET', - path: '/test', - queryParameters: {}, - headers: {}, - cacheable: true, - } as const; - - const firstResponse = await transporter.requestWithHttpInfo<{ value: number }>(request); - const secondResponse = await transporter.requestWithHttpInfo<{ value: number }>(request); - - // Each call hits the network, nothing is read from nor written to the caches - expect(firstResponse.data).toEqual({ value: 1 }); - expect(secondResponse.data).toEqual({ value: 2 }); - expect(requestCount).toBe(2); - - // The plain `request` does not see cache entries created by `requestWithHttpInfo` either - const cachedData = await transporter.request<{ value: number }>(request); - expect(cachedData).toEqual({ value: 3 }); - }); -}); diff --git a/packages/client-common/src/__tests__/unit/helpers.test.ts b/packages/client-common/src/__tests__/unit/helpers.test.ts new file mode 100644 index 000000000..14c267b0d --- /dev/null +++ b/packages/client-common/src/__tests__/unit/helpers.test.ts @@ -0,0 +1,40 @@ +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 new file mode 100644 index 000000000..4cde27807 --- /dev/null +++ b/packages/client-common/src/__tests__/unit/retryable-promise.test.ts @@ -0,0 +1,41 @@ +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 new file mode 100644 index 000000000..f4a77599c --- /dev/null +++ b/packages/client-common/src/__tests__/unit/waitable-promise.test.ts @@ -0,0 +1,37 @@ +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 deleted file mode 100644 index 9bdef003a..000000000 --- a/packages/client-common/src/cache/createBrowserLocalStorageCache.ts +++ /dev/null @@ -1,115 +0,0 @@ -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 yieldToMain(): Promise { - return new Promise((resolve) => setTimeout(resolve, 0)); - } - - function getFilteredNamespace(): { - namespace: Record; - changed: boolean; - } { - const timeToLive = options.timeToLive ? options.timeToLive * 1000 : null; - const namespace = getNamespace(); - const currentTime = new Date().getTime(); - let changed = false; - - const filtered = Object.fromEntries( - Object.entries(namespace).filter(([, cacheItem]) => { - if (!cacheItem || cacheItem.timestamp === undefined) { - changed = true; - return false; - } - - if (!timeToLive) { - return true; - } - - if (cacheItem.timestamp + timeToLive < currentTime) { - changed = true; - return false; - } - - return true; - }), - ); - - return { namespace: filtered, changed }; - } - - return { - get( - key: Record | string, - defaultValue: () => Promise, - events: CacheEvents = { - miss: () => Promise.resolve(), - }, - ): Promise { - return yieldToMain().then(() => { - const { namespace, changed } = getFilteredNamespace(); - const cachedItem = namespace[JSON.stringify(key)]; - - if (changed) { - setNamespace(namespace); - } - - if (cachedItem) { - return cachedItem.value as TValue; - } - - return defaultValue().then((value) => events.miss(value).then(() => value)); - }); - }, - - set(key: Record | string, value: TValue): Promise { - return yieldToMain().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 yieldToMain().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 deleted file mode 100644 index 8e34cefdb..000000000 --- a/packages/client-common/src/cache/createFallbackableCache.ts +++ /dev/null @@ -1,43 +0,0 @@ -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 deleted file mode 100644 index 8c0c89f9b..000000000 --- a/packages/client-common/src/cache/createMemoryCache.ts +++ /dev/null @@ -1,43 +0,0 @@ -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 deleted file mode 100644 index 1a950eb0a..000000000 --- a/packages/client-common/src/cache/createNullCache.ts +++ /dev/null @@ -1,29 +0,0 @@ -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 deleted file mode 100644 index ecb01b386..000000000 --- a/packages/client-common/src/cache/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -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 deleted file mode 100644 index 47354308f..000000000 --- a/packages/client-common/src/constants.ts +++ /dev/null @@ -1,9 +0,0 @@ -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; - -export const DEFAULT_REPLACE_ALL_OBJECTS_MAX_RETRIES = 800; diff --git a/packages/client-common/src/createAlgoliaAgent.ts b/packages/client-common/src/createAlgoliaAgent.ts deleted file mode 100644 index 5283054d8..000000000 --- a/packages/client-common/src/createAlgoliaAgent.ts +++ /dev/null @@ -1,18 +0,0 @@ -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 67c6c3816..071665aef 100644 --- a/packages/client-common/src/createAuth.ts +++ b/packages/client-common/src/createAuth.ts @@ -1,25 +1,18 @@ -import type { AuthMode, Headers, QueryParameters } from './types'; +import { Auth, AuthMode, AuthModeType } from '.'; -export function createAuth( - appId: string, - apiKey: string, - authMode: AuthMode = 'WithinHeaders', -): { - readonly headers: () => Headers; - readonly queryParameters: () => QueryParameters; -} { +export function createAuth(authMode: AuthModeType, appId: string, apiKey: string): Auth { const credentials = { 'x-algolia-api-key': apiKey, 'x-algolia-application-id': appId, }; return { - headers(): Headers { - return authMode === 'WithinHeaders' ? credentials : {}; + headers(): Readonly> { + return authMode === AuthMode.WithinHeaders ? credentials : {}; }, - queryParameters(): QueryParameters { - return authMode === 'WithinQueryParameters' ? credentials : {}; + queryParameters(): Readonly> { + return authMode === AuthMode.WithinQueryParameters ? credentials : {}; }, }; } diff --git a/packages/client-common/src/createIterablePromise.ts b/packages/client-common/src/createIterablePromise.ts deleted file mode 100644 index fc86f3dd3..000000000 --- a/packages/client-common/src/createIterablePromise.ts +++ /dev/null @@ -1,50 +0,0 @@ -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 | undefined): 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 new file mode 100644 index 000000000..0a92eef43 --- /dev/null +++ b/packages/client-common/src/createRetryablePromise.ts @@ -0,0 +1,17 @@ +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 new file mode 100644 index 000000000..92f8affcb --- /dev/null +++ b/packages/client-common/src/createWaitablePromise.ts @@ -0,0 +1,21 @@ +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 deleted file mode 100644 index b60397e94..000000000 --- a/packages/client-common/src/getAlgoliaAgent.ts +++ /dev/null @@ -1,19 +0,0 @@ -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 new file mode 100644 index 000000000..b3901bc75 --- /dev/null +++ b/packages/client-common/src/helpers.ts @@ -0,0 +1,47 @@ +// 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 bfb1f96d3..3acb69db0 100644 --- a/packages/client-common/src/index.ts +++ b/packages/client-common/src/index.ts @@ -1,11 +1,11 @@ -export * from './cache'; -export * from './constants'; -export * from './createAlgoliaAgent'; +/** + * @file Automatically generated by barrelsby. + */ + export * from './createAuth'; -export * from './createIterablePromise'; -export * from './getAlgoliaAgent'; -export * from './logger'; -export * from './sse'; -export * from './transporter'; -export * from './types'; -export * from './validateParam'; +export * from './createRetryablePromise'; +export * from './createWaitablePromise'; +export * from './helpers'; +export * from './version'; +export * from './methods/index'; +export * from './types/index'; diff --git a/packages/client-common/src/logger/createNullLogger.ts b/packages/client-common/src/logger/createNullLogger.ts deleted file mode 100644 index b9a1672a5..000000000 --- a/packages/client-common/src/logger/createNullLogger.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { Logger } from '../types/logger'; - -export function createNullLogger(): Logger { - return { - debug(_message: string, _args?: any | undefined): Promise { - return Promise.resolve(); - }, - info(_message: string, _args?: any | undefined): Promise { - return Promise.resolve(); - }, - error(_message: string, _args?: any | undefined): Promise { - return Promise.resolve(); - }, - }; -} diff --git a/packages/client-common/src/logger/index.ts b/packages/client-common/src/logger/index.ts deleted file mode 100644 index e0158b47c..000000000 --- a/packages/client-common/src/logger/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './createNullLogger'; -export * from './logWarning'; diff --git a/packages/client-common/src/logger/logWarning.ts b/packages/client-common/src/logger/logWarning.ts deleted file mode 100644 index b38fbe1b0..000000000 --- a/packages/client-common/src/logger/logWarning.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Logger } from '../types'; - -/** - * Prefers the logger's optional `warn` method and falls back to `console.warn`, so warnings stay visible with the default no-op logger. - */ -export function logWarning(logger: Logger, message: string): void { - if (logger.warn) { - // a rejecting custom `warn` must not become a fatal unhandled rejection - void Promise.resolve(logger.warn(message)).catch(() => {}); - } else { - console.warn(message); - } -} diff --git a/packages/client-common/src/methods/client/destroy.ts b/packages/client-common/src/methods/client/destroy.ts new file mode 100644 index 000000000..1e629ab3a --- /dev/null +++ b/packages/client-common/src/methods/client/destroy.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..6d42d5874 --- /dev/null +++ b/packages/client-common/src/methods/client/index.ts @@ -0,0 +1,5 @@ +/** + * @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 new file mode 100644 index 000000000..32085eb7f --- /dev/null +++ b/packages/client-common/src/methods/index.ts @@ -0,0 +1,5 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './client/index'; diff --git a/packages/client-common/src/sse.ts b/packages/client-common/src/sse.ts deleted file mode 100644 index 8976a220a..000000000 --- a/packages/client-common/src/sse.ts +++ /dev/null @@ -1,301 +0,0 @@ -/** - * WHATWG-compliant Server-Sent Events parser. - * - * Three-layer architecture: - * 1. iterLines() — byte chunking → line decoding - * 2. SSEDecoder — line → SSE event decoding - * 3. iterSSEEvents — top-level composer (exported) - * - * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation - */ - -const MAX_LINE_BUFFER_SIZE = 10 * 1024 * 1024; // 10MB - -// ─── Types ────────────────────────────────────────────────────────────────── - -export type ServerSentEvent = { - /** Concatenated data: field values, joined by '\n'. */ - data: string; - /** Event type from the event: field. Defaults to "" (empty string). */ - event: string; - /** Last event ID. Persists across dispatches until changed. */ - id: string | null; - /** Reconnection time in ms. Persists across dispatches until changed. */ - retry: number | null; -}; - -/** - * Wrapper for a parsed SSE event, yielded by the typed `*Stream` methods. - * - * - `data` is the JSON-parsed payload when parsing succeeds, `null` otherwise. - * - `raw` is the original {@link ServerSentEvent} (always present). - * - `error` is set when JSON parsing of `event.data` failed. - */ -export type StreamEvent> = { - /** Parsed data from the event, or `null` if parsing failed. */ - data: T | null; - /** The original, unparsed SSE event. */ - raw: ServerSentEvent; - /** The error that occurred while parsing `event.data`, if any. */ - error?: Error; -}; - -// ─── Helpers ──────────────────────────────────────────────────────────────── - -/** - * Converts a ReadableStream into an AsyncIterable via getReader(). - * Fallback for environments where ReadableStream lacks Symbol.asyncIterator. - */ -async function* readableStreamToAsyncIterable(stream: ReadableStream): AsyncGenerator { - const reader = stream.getReader(); - try { - while (true) { - const { done, value } = await reader.read(); - if (done) return; - yield value; - } - } finally { - reader.releaseLock(); - } -} - -/** - * Normalizes the input to an AsyncIterable. - * Prefers Symbol.asyncIterator if available; falls back to getReader(). - */ -function toAsyncIterable(stream: ReadableStream | AsyncIterable): AsyncIterable { - if (Symbol.asyncIterator in stream) { - return stream as AsyncIterable; - } - return readableStreamToAsyncIterable(stream as ReadableStream); -} - -// ─── Layer 1: Byte stream → Lines ────────────────────────────────────────── - -/** - * Yields individual lines from a byte stream. - * - * Handles \r, \n, and \r\n line endings, including \r\n split across chunks. - * Uses offset tracking within each decoded chunk to avoid O(n²) buffer growth. - * Strips BOM (U+FEFF) from the very first line. - * Throws if the internal line buffer exceeds 10MB. - */ -async function* iterLines(stream: ReadableStream | AsyncIterable): AsyncGenerator { - const decoder = new TextDecoder('utf-8'); - const buffer: string[] = []; - let bufferSize = 0; - let trailingCR = false; - let isFirstLine = true; - - for await (const chunk of toAsyncIterable(stream)) { - const text = decoder.decode(chunk, { stream: true }); - let offset = 0; - - // Handle \r\n split across chunks: if the previous chunk ended with \r - // and this one starts with \n, skip the \n (it's the second half of \r\n) - if (trailingCR) { - trailingCR = false; - if (text.length > 0 && text[0] === '\n') { - offset = 1; - } - } - - while (offset < text.length) { - const crIdx = text.indexOf('\r', offset); - const lfIdx = text.indexOf('\n', offset); - - // No more line endings in this chunk — buffer the rest - if (crIdx === -1 && lfIdx === -1) { - const remaining = text.slice(offset); - buffer.push(remaining); - bufferSize += remaining.length; - if (bufferSize > MAX_LINE_BUFFER_SIZE) { - throw new Error('SSE line buffer exceeded 10MB'); - } - break; - } - - let endIdx: number; - let skipLen: number; - - if (crIdx !== -1 && (lfIdx === -1 || crIdx < lfIdx)) { - // \r found before \n (or no \n at all) - endIdx = crIdx; - if (crIdx + 1 < text.length) { - // Peek ahead: \r\n or bare \r - skipLen = text[crIdx + 1] === '\n' ? 2 : 1; - } else { - // \r at end of chunk — might be \r\n split across chunks - trailingCR = true; - skipLen = 1; - } - } else { - // \n found before \r (or no \r at all) - // Safe: at least one of crIdx/lfIdx is != -1, and we're in the else - // branch, so lfIdx must be != -1 - endIdx = lfIdx; - skipLen = 1; - } - - const segment = text.slice(offset, endIdx); - buffer.push(segment); - - let line = buffer.length === 1 ? buffer[0]! : buffer.join(''); - buffer.length = 0; - bufferSize = 0; - - // Strip BOM from the very first line only - if (isFirstLine) { - if (line.startsWith('\uFEFF')) { - line = line.slice(1); - } - isFirstLine = false; - } - - yield line; - offset = endIdx + skipLen; - } - } - - // Flush TextDecoder (handles any remaining bytes from multi-byte sequences) - const remaining = decoder.decode(); - if (remaining) { - buffer.push(remaining); - } - - // Yield any remaining buffered content as the final line - if (buffer.length > 0) { - let line = buffer.join(''); - if (isFirstLine && line.startsWith('\uFEFF')) { - line = line.slice(1); - } - yield line; - } -} - -// ─── Layer 2: Lines → SSE Events ────────────────────────────────────────── - -/** - * Stateful SSE event decoder. Feed lines one at a time via decode(). - * Returns a ServerSentEvent on blank lines (dispatch), null otherwise. - * - * Per WHATWG spec §9.2.6: - * - lastEventId persists across dispatches - * - retry persists across dispatches (global reconnection setting) - * - eventType resets after every blank line (even when data is empty) - * - data buffer resets after dispatch - * - id field containing NULL (\0) is ignored entirely - * - retry field must be ASCII digits only - */ -class SSEDecoder { - private data: string[] = []; - private eventType = ''; - private lastEventId: string | null = null; - private retry: number | null = null; - - decode(line: string): ServerSentEvent | null { - // Blank line → dispatch event or reset - if (line === '') { - return this.dispatch(); - } - - // Comment line (starts with ':') - if (line[0] === ':') { - return null; - } - - // Parse field:value - const colonIdx = line.indexOf(':'); - let field: string; - let value: string; - - if (colonIdx === -1) { - // No colon → field is entire line, value is empty - field = line; - value = ''; - } else { - field = line.slice(0, colonIdx); - value = line.slice(colonIdx + 1); - // Strip exactly ONE leading space (if present) - if (value[0] === ' ') { - value = value.slice(1); - } - } - - switch (field) { - case 'data': - this.data.push(value); - break; - case 'event': - this.eventType = value; - break; - case 'id': - // Ignore if value contains NULL character (security: WHATWG spec) - if (!value.includes('\0')) { - this.lastEventId = value; - } - break; - case 'retry': - // Must consist of ASCII digits only (no negatives, no whitespace) - if (/^[0-9]+$/.test(value)) { - this.retry = parseInt(value, 10); - } - break; - // Unknown fields: ignore silently - } - - return null; - } - - private dispatch(): ServerSentEvent | null { - // eventType resets on every blank line per WHATWG spec, - // regardless of whether we actually dispatch an event - const currentEventType = this.eventType; - this.eventType = ''; - - // Suppress dispatch when no data: lines were received - if (this.data.length === 0) { - return null; - } - - const event: ServerSentEvent = { - data: this.data.join('\n'), - event: currentEventType, - id: this.lastEventId, - retry: this.retry, - }; - - // Reset data buffer; lastEventId and retry persist across dispatches - this.data = []; - - return event; - } -} - -// ─── Layer 3: Top-level composer ────────────────────────────────────────── - -/** - * Parses a byte stream as WHATWG Server-Sent Events. - * - * Accepts both ReadableStream (browser fetch) and - * AsyncIterable (Node.js streams / Buffer chunks). - * - * @example - * ```ts - * const response = await fetch(url); - * for await (const event of iterSSEEvents(response.body!)) { - * console.log(event.event, event.data); - * } - * ``` - */ -export async function* iterSSEEvents( - stream: ReadableStream | AsyncIterable, -): AsyncGenerator { - const decoder = new SSEDecoder(); - for await (const line of iterLines(stream)) { - const event = decoder.decode(line); - if (event !== null) { - yield event; - } - } -} diff --git a/packages/client-common/src/transporter/compress.ts b/packages/client-common/src/transporter/compress.ts deleted file mode 100644 index 029b5e5f3..000000000 --- a/packages/client-common/src/transporter/compress.ts +++ /dev/null @@ -1 +0,0 @@ -export const COMPRESSION_THRESHOLD = 750; diff --git a/packages/client-common/src/transporter/createStatefulHost.ts b/packages/client-common/src/transporter/createStatefulHost.ts deleted file mode 100644 index d78c5e00a..000000000 --- a/packages/client-common/src/transporter/createStatefulHost.ts +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index dcacf4446..000000000 --- a/packages/client-common/src/transporter/createTransporter.ts +++ /dev/null @@ -1,454 +0,0 @@ -import type { ServerSentEvent } from '../sse'; -import { iterSSEEvents } from '../sse'; -import type { - AlgoliaHttpResponse, - EndRequest, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, - Response, - StackFrame, - TransporterOptions, - TransporterWithHttpInfo, -} from '../types'; -import { COMPRESSION_THRESHOLD } from './compress'; -import { createStatefulHost } from './createStatefulHost'; -import { RetryError } from './errors'; -import { - deserializeFailure, - deserializeSuccess, - deserializeSuccessWithHttpInfo, - getLastCorrelationId, - serializeData, - serializeHeaders, - serializeUrl, -} from './helpers'; -import { generateRequestId } from './requestId'; -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, - compress, - compression, - requestIdChannel, -}: TransporterOptions): TransporterWithHttpInfo { - function injectRequestId(headers: Headers, queryParameters: QueryParameters): void { - if ( - requestIdChannel === undefined || - headers['request-id'] !== undefined || - Object.keys(queryParameters).some((parameter) => parameter.toLowerCase() === 'x-algolia-request-id') - ) { - return; - } - - if (requestIdChannel === 'headers') { - headers['request-id'] = generateRequestId(); - } else { - queryParameters['x-algolia-request-id'] = generateRequestId(); - } - } - - 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: boolean, - ): Promise { - const stackTrace: StackFrame[] = []; - - /** - * First we prepare the payload that do not depend from hosts. - */ - const serializedData = serializeData(request, requestOptions); - const headers = serializeHeaders(baseHeaders, request.headers, requestOptions.headers); - - const wantsCompression = - compression === 'gzip' && - serializedData !== undefined && - serializedData.length > COMPRESSION_THRESHOLD && - (request.method === 'POST' || request.method === 'PUT'); - - if (wantsCompression && compress === undefined) { - logger.info('Compression is disabled because no compress method is available.'); - } - - const shouldCompress = wantsCompression && compress !== undefined; - const data = shouldCompress ? await compress(serializedData) : serializedData; - if (shouldCompress) { - headers['content-encoding'] = 'gzip'; - } - - // 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(); - } - } - } - - injectRequestId(headers, queryParameters); - - 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), getLastCorrelationId(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 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 { - 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, isRead).then((response) => - deserializeSuccess(response), - ); - }; - - /** - * 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'; - - /** - * 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), - }, - ); - } - - function createRequestWithHttpInfo( - 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'; - - /** - * The HTTP info variant always hits the network: both the requests and - * the responses caches are bypassed, even for `cacheable` requests, so - * that the returned status code and headers reflect an actual API call. - */ - return retryableRequest(request, requestOptions, isRead).then((response) => - deserializeSuccessWithHttpInfo(response), - ); - } - - async function* requestStream( - request: Request, - requestOptions: RequestOptions = {}, - ): AsyncGenerator { - if (!requester.sendStream) { - throw new Error('This requester does not support streaming'); - } - - const data = serializeData(request, requestOptions); - const headers = serializeHeaders(baseHeaders, request.headers, requestOptions.headers); - headers['accept'] = 'text/event-stream'; - - // 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)) { - 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(); - } - } - } - - injectRequestId(headers, queryParameters); - - const isRead = request.useReadTransporter || request.method === 'GET'; - const compatibleHosts = hosts.filter( - (host) => host.accept === 'readWrite' || (isRead ? host.accept === 'read' : host.accept === 'write'), - ); - const options = await createRetryableOptions(compatibleHosts); - const host = options.hosts[0]; - if (!host) { - throw new RetryError([]); - } - - const timeout = { ...timeouts, ...requestOptions.timeouts }; - const payload: EndRequest = { - data, - headers, - method: request.method, - url: serializeUrl(host, request.path, queryParameters), - connectTimeout: timeout.connect, - responseTimeout: isRead ? timeout.read : timeout.write, - }; - - const stream = await requester.sendStream(payload); - yield* iterSSEEvents(stream); - } - - return { - hostsCache, - requester, - timeouts, - logger, - algoliaAgent, - baseHeaders, - baseQueryParameters, - requestIdChannel, - hosts, - request: createRequest, - requestWithHttpInfo: createRequestWithHttpInfo, - requestStream, - requestsCache, - responsesCache, - }; -} diff --git a/packages/client-common/src/transporter/errors.ts b/packages/client-common/src/transporter/errors.ts deleted file mode 100644 index 00bd4ccc2..000000000 --- a/packages/client-common/src/transporter/errors.ts +++ /dev/null @@ -1,114 +0,0 @@ -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 IndexNotFoundError extends AlgoliaError { - constructor(indexName: string) { - super(`${indexName} does not exist`, 'IndexNotFoundError'); - } -} - -export class IndicesInSameAppError extends AlgoliaError { - constructor() { - super('Indices are in the same application. Use operationIndex instead.', 'IndicesInSameAppError'); - } -} - -export class IndexAlreadyExistsError extends AlgoliaError { - constructor(indexName: string) { - super(`${indexName} index already exists.`, 'IndexAlreadyExistsError'); - } -} - -export class ErrorWithStackTrace extends AlgoliaError { - stackTrace: StackFrame[]; - - correlationId?: string | undefined; - - constructor(message: string, stackTrace: StackFrame[], name: string, correlationId?: string | undefined) { - super(correlationId ? `${message} (Correlation-ID: ${correlationId})` : message, name); - // the array and object should be frozen to reflect the stackTrace at the time of the error - this.stackTrace = stackTrace; - this.correlationId = correlationId; - } -} - -export class RetryError extends ErrorWithStackTrace { - constructor(stackTrace: StackFrame[], correlationId?: string | undefined) { - super( - 'Unreachable hosts - your application id may be incorrect. If the error persists, please visit our help center https://alg.li/support-unreachable-hosts or reach out to the Algolia Support team: https://alg.li/support', - stackTrace, - 'RetryError', - correlationId, - ); - } -} - -export class ApiError extends ErrorWithStackTrace { - status: number; - - constructor( - message: string, - status: number, - stackTrace: StackFrame[], - name = 'ApiError', - correlationId?: string | undefined, - ) { - super(message, stackTrace, name, correlationId); - this.status = status; - } -} - -export class DeserializationError extends AlgoliaError { - response: Response; - - correlationId?: string | undefined; - - constructor(message: string, response: Response, correlationId?: string | undefined) { - super(correlationId ? `${message} (Correlation-ID: ${correlationId})` : message, 'DeserializationError'); - this.response = response; - this.correlationId = correlationId; - } -} - -export type DetailedErrorWithMessage = { - message: string; - label: string; -}; - -export type DetailedErrorWithTypeID = { - id: string; - type: string; - name?: string | undefined; -}; - -export type DetailedError = { - code: string; - details?: DetailedErrorWithMessage[] | DetailedErrorWithTypeID[] | undefined; -}; - -// 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[], - correlationId?: string | undefined, - ) { - super(message, status, stackTrace, 'DetailedApiError', correlationId); - this.error = error; - } -} diff --git a/packages/client-common/src/transporter/helpers.ts b/packages/client-common/src/transporter/helpers.ts deleted file mode 100644 index bf60f96b9..000000000 --- a/packages/client-common/src/transporter/helpers.ts +++ /dev/null @@ -1,146 +0,0 @@ -import type { - AlgoliaHttpResponse, - 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 | undefined, -): 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 { - // Handle 204 No Content and other empty responses - if (response.status === 204 || response.content.length === 0) { - return undefined as unknown as TObject; - } - - try { - return JSON.parse(response.content); - } catch (e) { - throw new DeserializationError((e as Error).message, response, getCorrelationId(response.headers)); - } -} - -export function deserializeSuccessWithHttpInfo(response: Response): AlgoliaHttpResponse { - return { - status: response.status, - headers: response.headers, - content: response.content, - data: deserializeSuccess(response), - }; -} - -export function getCorrelationId(headers: Headers | undefined): string | undefined { - if (!headers) { - return undefined; - } - - if (headers['correlation-id'] !== undefined) { - return headers['correlation-id']; - } - - const header = Object.keys(headers).find((key) => key.toLowerCase() === 'correlation-id'); - - return header === undefined ? undefined : headers[header]; -} - -export function getLastCorrelationId(stackTrace: StackFrame[]): string | undefined { - for (let i = stackTrace.length - 1; i >= 0; i--) { - const correlationId = getCorrelationId(stackTrace[i].response.headers); - if (correlationId !== undefined) { - return correlationId; - } - } - - return undefined; -} - -export function deserializeFailure(response: Response, stackFrame: StackFrame[]): Error { - const { content, status } = response; - const correlationId = getCorrelationId(response.headers); - try { - const parsed = JSON.parse(content); - if ('error' in parsed) { - return new DetailedApiError(parsed.message, status, parsed.error, stackFrame, correlationId); - } - return new ApiError(parsed.message, status, stackFrame, 'ApiError', correlationId); - } catch { - // .. - } - return new ApiError(content, status, stackFrame, 'ApiError', correlationId); -} diff --git a/packages/client-common/src/transporter/index.ts b/packages/client-common/src/transporter/index.ts deleted file mode 100644 index d4ed282dc..000000000 --- a/packages/client-common/src/transporter/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from './compress'; -export * from './createStatefulHost'; -export * from './createTransporter'; -export * from './errors'; -export * from './helpers'; -export * from './requestId'; -export * from './responses'; -export * from './stackTrace'; diff --git a/packages/client-common/src/transporter/requestId.ts b/packages/client-common/src/transporter/requestId.ts deleted file mode 100644 index 4112bca07..000000000 --- a/packages/client-common/src/transporter/requestId.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type { Headers, QueryParameters, RequestOptions, Transporter } from '../types'; - -const BASE62_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; -const REQUEST_ID_LENGTH = 11; - -export function generateRequestId(): string { - let requestId = ''; - - if (typeof globalThis.crypto?.getRandomValues === 'function') { - const bytes = new Uint8Array(REQUEST_ID_LENGTH); - globalThis.crypto.getRandomValues(bytes); - for (const byte of bytes) { - requestId += BASE62_CHARS[byte % BASE62_CHARS.length]; - } - - return requestId; - } - - for (let i = 0; i < REQUEST_ID_LENGTH; i++) { - requestId += BASE62_CHARS[Math.floor(Math.random() * BASE62_CHARS.length)]; - } - - return requestId; -} - -function hasRequestId(headers: Headers | undefined, queryParameters: QueryParameters | undefined): boolean { - return ( - (headers !== undefined && Object.keys(headers).some((header) => header.toLowerCase() === 'request-id')) || - (queryParameters !== undefined && - Object.keys(queryParameters).some((parameter) => parameter.toLowerCase() === 'x-algolia-request-id')) - ); -} - -/** - * Returns request options carrying a Request-ID on the transporter's channel, so that every - * request a multi-request helper performs shares the same ID. Returns the options unchanged - * when the channel is off or when a Request-ID is already supplied. Never apply ahead of a - * cacheable operation: the ID enters the cache key and defeats caching and deduplication. - */ -export function withRequestId( - transporter: Pick, - requestOptions?: RequestOptions | undefined, -): RequestOptions | undefined { - if ( - transporter.requestIdChannel === undefined || - hasRequestId(transporter.baseHeaders, transporter.baseQueryParameters) || - hasRequestId(requestOptions?.headers, requestOptions?.queryParameters) - ) { - return requestOptions; - } - - if (transporter.requestIdChannel === 'headers') { - return { ...requestOptions, headers: { ...requestOptions?.headers, 'request-id': generateRequestId() } }; - } - - return { - ...requestOptions, - queryParameters: { ...requestOptions?.queryParameters, 'x-algolia-request-id': generateRequestId() }, - }; -} diff --git a/packages/client-common/src/transporter/responses.ts b/packages/client-common/src/transporter/responses.ts deleted file mode 100644 index 9159d6525..000000000 --- a/packages/client-common/src/transporter/responses.ts +++ /dev/null @@ -1,13 +0,0 @@ -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 deleted file mode 100644 index 29c933aa2..000000000 --- a/packages/client-common/src/transporter/stackTrace.ts +++ /dev/null @@ -1,22 +0,0 @@ -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 new file mode 100644 index 000000000..05b17cf50 --- /dev/null +++ b/packages/client-common/src/types/Auth.ts @@ -0,0 +1,13 @@ +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 new file mode 100644 index 000000000..eb3ab43b9 --- /dev/null +++ b/packages/client-common/src/types/AuthModeType.ts @@ -0,0 +1,13 @@ +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 new file mode 100644 index 000000000..389c80b9b --- /dev/null +++ b/packages/client-common/src/types/ClientTransporterOptions.ts @@ -0,0 +1,27 @@ +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 new file mode 100644 index 000000000..ce0a57da5 --- /dev/null +++ b/packages/client-common/src/types/CreateClient.ts @@ -0,0 +1,10 @@ +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 new file mode 100644 index 000000000..b89c631d9 --- /dev/null +++ b/packages/client-common/src/types/Wait.ts @@ -0,0 +1,13 @@ +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 new file mode 100644 index 000000000..ac65d895e --- /dev/null +++ b/packages/client-common/src/types/WaitablePromise.ts @@ -0,0 +1,15 @@ +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/algoliaHttpResponse.ts b/packages/client-common/src/types/algoliaHttpResponse.ts deleted file mode 100644 index d01c8b8f9..000000000 --- a/packages/client-common/src/types/algoliaHttpResponse.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { Headers } from './requester'; - -/** - * The full HTTP response of an API call, as returned by the `WithHTTPInfo` variant of each method. - */ -export type AlgoliaHttpResponse = { - /** - * The HTTP status code of the response. - */ - status: number; - - /** - * The headers of the response, with lower-cased names. Undefined when the requester does not capture headers. - */ - headers?: Headers | undefined; - - /** - * The raw body of the response. - */ - content: string; - - /** - * The deserialized body of the response. - */ - data: TData; -}; diff --git a/packages/client-common/src/types/cache.ts b/packages/client-common/src/types/cache.ts deleted file mode 100644 index a04b1ea04..000000000 --- a/packages/client-common/src/types/cache.ts +++ /dev/null @@ -1,75 +0,0 @@ -export type Cache = { - /** - * Gets the value of the given `key`. - */ - get: ( - key: Record | string, - defaultValue: () => Promise, - events?: CacheEvents | undefined, - ) => 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 | undefined; -}; - -export type BrowserLocalStorageOptions = { - /** - * The cache key. - */ - key: string; - - /** - * The time to live for each cached item in seconds. - */ - timeToLive?: number | undefined; - - /** - * The native local storage implementation. - */ - localStorage?: Storage | undefined; -}; - -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/chunkedHelperOptions.ts b/packages/client-common/src/types/chunkedHelperOptions.ts deleted file mode 100644 index 8a0209c84..000000000 --- a/packages/client-common/src/types/chunkedHelperOptions.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Shared configuration for chunked helpers that poll for task completion. - */ -export type ChunkedHelperOptions = { - /** - * The maximum number of retries when polling for task completion. 100 by default. - */ - maxRetries?: number | undefined; -}; diff --git a/packages/client-common/src/types/createClient.ts b/packages/client-common/src/types/createClient.ts deleted file mode 100644 index e715317ff..000000000 --- a/packages/client-common/src/types/createClient.ts +++ /dev/null @@ -1,15 +0,0 @@ -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 | undefined; - algoliaAgents: AlgoliaAgentOptions[]; - }; - -export type ClientOptions = Partial>; diff --git a/packages/client-common/src/types/createIterablePromise.ts b/packages/client-common/src/types/createIterablePromise.ts deleted file mode 100644 index ffe84bd6f..000000000 --- a/packages/client-common/src/types/createIterablePromise.ts +++ /dev/null @@ -1,40 +0,0 @@ -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 | undefined) => 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 deleted file mode 100644 index f079b4827..000000000 --- a/packages/client-common/src/types/host.ts +++ /dev/null @@ -1,43 +0,0 @@ -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 | undefined; -}; - -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 02f69c73f..7b899c6d9 100644 --- a/packages/client-common/src/types/index.ts +++ b/packages/client-common/src/types/index.ts @@ -1,9 +1,10 @@ -export * from './algoliaHttpResponse'; -export * from './cache'; -export * from './chunkedHelperOptions'; -export * from './createClient'; -export * from './createIterablePromise'; -export * from './host'; -export * from './logger'; -export * from './requester'; -export * from './transporter'; +/** + * @file Automatically generated by barrelsby. + */ + +export * from './Auth'; +export * from './AuthModeType'; +export * from './ClientTransporterOptions'; +export * from './CreateClient'; +export * from './Wait'; +export * from './WaitablePromise'; diff --git a/packages/client-common/src/types/logger.ts b/packages/client-common/src/types/logger.ts deleted file mode 100644 index 012e52af6..000000000 --- a/packages/client-common/src/types/logger.ts +++ /dev/null @@ -1,29 +0,0 @@ -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 | undefined) => Promise; - - /** - * Logs info messages. - */ - info: (message: string, args?: any | undefined) => Promise; - - /** - * Logs warning messages. When not implemented, warnings fall back to `console.warn` so they stay visible with the default no-op logger. - */ - warn?: (message: string, args?: any | undefined) => Promise; - - /** - * Logs error messages. - */ - error: (message: string, args?: any | undefined) => Promise; -}; diff --git a/packages/client-common/src/types/requester.ts b/packages/client-common/src/types/requester.ts deleted file mode 100644 index f5ee72d48..000000000 --- a/packages/client-common/src/types/requester.ts +++ /dev/null @@ -1,76 +0,0 @@ -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 | undefined; - 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 | undefined; - /** - * Some POST methods in the Algolia REST API uses the `read` transporter. - * This information is defined at the spec level. - */ - useReadTransporter?: boolean | undefined; -}; - -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 | Uint8Array | undefined; -}; - -export type Response = { - /** - * The body of the response. - */ - content: string; - /** - * The headers of the response, with lower-cased names. Optional so that custom requesters that - * don't capture headers remain valid, in which case the `WithHTTPInfo` methods expose no headers. - */ - headers?: Headers | undefined; - /** - * 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; - /** - * Sends the given `request` and returns a raw byte stream for streaming responses (e.g. SSE). - */ - sendStream?: (request: EndRequest) => Promise>; -}; diff --git a/packages/client-common/src/types/transporter.ts b/packages/client-common/src/types/transporter.ts deleted file mode 100644 index 6fcba7092..000000000 --- a/packages/client-common/src/types/transporter.ts +++ /dev/null @@ -1,197 +0,0 @@ -import type { ServerSentEvent } from '../sse'; -import type { AlgoliaHttpResponse } from './algoliaHttpResponse'; -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 | undefined; - - /** - * Custom headers for the request. This headers are - * going to be merged the transporter headers. - */ - headers?: Headers | undefined; - - /** - * Custom query parameters for the request. This query parameters are - * going to be merged the transporter query parameters. - */ - queryParameters?: QueryParameters | undefined; - - /** - * Custom data for the request. This data is - * going to be merged the transporter data. - */ - data?: Array> | Record | undefined; -}; - -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 | undefined; -}; - -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; - - /** - * Cache used to store in-flight requests. - * When a request is marked as `cacheable`, its returned Promise - * is stored in this cache so that identical requests can share - * the same Promise before it resolves. - * - * @warning - * The provided cache **must not** serialize stored values. - * - * Since in-flight requests are stored as Promises (which cannot be - * serialized to JSON), using a serializing cache will cause failures. - * - * Make sure to use a non-serializing cache implementation, such as `createMemoryCache({ serializable: false })` or to disable request caching with `createNullCache()` - */ - 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; - - /** - * An optional function to compress request bodies before sending. - * When provided, POST/PUT bodies exceeding the compression threshold - * will be compressed and `Content-Encoding: gzip` is added to the headers. - * Node builds use node:zlib, browser/worker builds use CompressionStream when available. - */ - compress?: (data: string) => Promise; - - compression?: 'gzip'; - - /** - * Where the generated Request-ID is sent: as the `Request-ID` header, or as the - * `x-algolia-request-id` query parameter. When undefined, no Request-ID is sent. - * A caller-supplied Request-ID is never overwritten. - */ - requestIdChannel?: 'headers' | 'queryParameters' | undefined; -}; - -export type Transporter = TransporterOptions & { - /** - * Performs a request. - * The `baseRequest` and `baseRequestOptions` will be merged accordingly. - */ - request: (baseRequest: Request, baseRequestOptions?: RequestOptions) => Promise; - requestStream: (baseRequest: Request, baseRequestOptions?: RequestOptions) => AsyncGenerator; -}; - -/** - * The transporter returned by `createTransporter`. Kept separate from `Transporter` so that - * existing implementations of `Transporter` remain type-valid. - */ -export type TransporterWithHttpInfo = Transporter & { - /** - * Performs a request and returns the full HTTP response information — status code, - * headers (when the requester captures them), raw body and deserialized data. - * Both the requests and the responses caches are bypassed: it always hits the network. - */ - requestWithHttpInfo: ( - baseRequest: Request, - baseRequestOptions?: RequestOptions, - ) => Promise>; -}; diff --git a/packages/client-common/src/validateParam.ts b/packages/client-common/src/validateParam.ts deleted file mode 100644 index cc016ca87..000000000 --- a/packages/client-common/src/validateParam.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function validateRequired(field: string, method: string, value: unknown): void { - if (value == null || (typeof value === 'string' && value.length === 0)) { - throw new Error(`Parameter \`${field}\` is required when calling \`${method}\`.`); - } -} diff --git a/packages/client-common/src/version.ts b/packages/client-common/src/version.ts new file mode 100644 index 000000000..9926df2e1 --- /dev/null +++ b/packages/client-common/src/version.ts @@ -0,0 +1 @@ +export const version = '4.17.2'; diff --git a/packages/client-common/tsconfig.json b/packages/client-common/tsconfig.json deleted file mode 100644 index f6efa8845..000000000 --- a/packages/client-common/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "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 deleted file mode 100644 index f587ac6fc..000000000 --- a/packages/client-common/tsup.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineConfig } from 'tsup'; - -import { getBaseNodeOptions } from '../../base.tsup.config'; - -import pkg from './package.json' with { type: 'json' }; - -export default defineConfig([ - { - ...getBaseNodeOptions(pkg, __dirname, 'http', 'es2018'), - 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.config.ts b/packages/client-common/vitest.config.ts deleted file mode 100644 index 978d177ef..000000000 --- a/packages/client-common/vitest.config.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { defineConfig } from 'vitest/config'; - -export default defineConfig({ - test: { - projects: [ - { - 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/logWarning.test.ts', - 'src/__tests__/logger/null-logger.test.ts', - 'src/__tests__/sse.test.ts', - 'src/__tests__/transporter/cache.test.ts', - 'src/__tests__/transporter/compression.test.ts', - 'src/__tests__/transporter/correlationId.test.ts', - 'src/__tests__/transporter/requestId.test.ts', - 'src/__tests__/transporter/requestIdChannel.test.ts', - 'src/__tests__/transporter/withHttpInfo.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/logWarning.test.ts', - 'src/__tests__/logger/null-logger.test.ts', - 'src/__tests__/transporter/cache.test.ts', - ], - name: 'jsdom', - environment: 'jsdom', - }, - }, - ], - }, -}); diff --git a/packages/client-insights/LICENSE b/packages/client-insights/LICENSE deleted file mode 100644 index fddf416f9..000000000 --- a/packages/client-insights/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index 3ffd5bf1c..000000000 --- a/packages/client-insights/README.md +++ /dev/null @@ -1,76 +0,0 @@ -

- - 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 • - 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.56.0 -# or -npm install @algolia/client-insights@5.56.0 -# or -pnpm add @algolia/client-insights@5.56.0 -``` - -### 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/sdk/methods/insights/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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 deleted file mode 100644 index b622fcab0..000000000 --- a/packages/client-insights/builds/browser.ts +++ /dev/null @@ -1,66 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -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 | undefined, - options?: ClientOptions | undefined, -): 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(', ')}`); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - 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()], - }), - ...browserOptions, - }); -} - -export type InsightsClient = ReturnType; diff --git a/packages/client-insights/builds/fetch.ts b/packages/client-insights/builds/fetch.ts deleted file mode 100644 index 368c8cb8b..000000000 --- a/packages/client-insights/builds/fetch.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -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 | undefined, - options?: ClientOptions | undefined, -): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/client-insights/builds/node.ts b/packages/client-insights/builds/node.ts deleted file mode 100644 index 2343b79d0..000000000 --- a/packages/client-insights/builds/node.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -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 | undefined, - options?: ClientOptions | undefined, -): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/client-insights/builds/worker.ts b/packages/client-insights/builds/worker.ts deleted file mode 100644 index 9c2e06189..000000000 --- a/packages/client-insights/builds/worker.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Code generated by 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 | undefined, - options?: ClientOptions | undefined, -): 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(', ')}`); - } - - const { compression: _compression, ...workerOptions } = options || {}; - - 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(), - ...workerOptions, - }), - }; -} diff --git a/packages/client-insights/index.d.ts b/packages/client-insights/index.d.ts deleted file mode 100644 index e81a1cd3e..000000000 --- a/packages/client-insights/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/node'; diff --git a/packages/client-insights/index.js b/packages/client-insights/index.js deleted file mode 100644 index 21e26aad3..000000000 --- a/packages/client-insights/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/client-insights/model/addToCartEvent.ts b/packages/client-insights/model/addToCartEvent.ts deleted file mode 100644 index 91553746d..000000000 --- a/packages/client-insights/model/addToCartEvent.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 269d9ff1f..000000000 --- a/packages/client-insights/model/addedToCartObjectIDs.ts +++ /dev/null @@ -1,57 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Three-letter [currency code](https://www.iso.org/iso-4217-currency-codes.html). - */ - currency?: string | undefined; - - /** - * 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 | undefined; - - /** - * Timestamp of the event, measured in milliseconds since the Unix epoch. Must be no older than 30 days. If not provided, we use the time at which the request was received. - */ - timestamp?: number | undefined; - - value?: Value | undefined; -}; diff --git a/packages/client-insights/model/addedToCartObjectIDsAfterSearch.ts b/packages/client-insights/model/addedToCartObjectIDsAfterSearch.ts deleted file mode 100644 index d3410a008..000000000 --- a/packages/client-insights/model/addedToCartObjectIDsAfterSearch.ts +++ /dev/null @@ -1,62 +0,0 @@ -// Code generated by OpenAPI Generator (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. For agentic analytics events, the query ID may be prefixed with `message_` followed by any printable string. - */ - 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 | undefined; - - /** - * Three-letter [currency code](https://www.iso.org/iso-4217-currency-codes.html). - */ - currency?: string | undefined; - - /** - * 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 | undefined; - - /** - * Timestamp of the event, measured in milliseconds since the Unix epoch. Must be no older than 30 days. If not provided, we use the time at which the request was received. - */ - timestamp?: number | undefined; - - value?: Value | undefined; -}; diff --git a/packages/client-insights/model/clickEvent.ts b/packages/client-insights/model/clickEvent.ts deleted file mode 100644 index b076bf016..000000000 --- a/packages/client-insights/model/clickEvent.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 6bac5c2bb..000000000 --- a/packages/client-insights/model/clickedFilters.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Timestamp of the event, measured in milliseconds since the Unix epoch. Must be no older than 30 days. If not provided, we use the time at which the request was received. - */ - timestamp?: number | undefined; -}; diff --git a/packages/client-insights/model/clickedObjectIDs.ts b/packages/client-insights/model/clickedObjectIDs.ts deleted file mode 100644 index ace11142d..000000000 --- a/packages/client-insights/model/clickedObjectIDs.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Timestamp of the event, measured in milliseconds since the Unix epoch. Must be no older than 30 days. If not provided, we use the time at which the request was received. - */ - timestamp?: number | undefined; -}; diff --git a/packages/client-insights/model/clickedObjectIDsAfterSearch.ts b/packages/client-insights/model/clickedObjectIDsAfterSearch.ts deleted file mode 100644 index af88d27e0..000000000 --- a/packages/client-insights/model/clickedObjectIDsAfterSearch.ts +++ /dev/null @@ -1,50 +0,0 @@ -// Code generated by OpenAPI Generator (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. For agentic analytics events, the query ID may be prefixed with `message_` followed by any printable string. - */ - 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 | undefined; - - /** - * Timestamp of the event, measured in milliseconds since the Unix epoch. Must be no older than 30 days. If not provided, we use the time at which the request was received. - */ - timestamp?: number | undefined; -}; diff --git a/packages/client-insights/model/clientMethodProps.ts b/packages/client-insights/model/clientMethodProps.ts deleted file mode 100644 index b37704053..000000000 --- a/packages/client-insights/model/clientMethodProps.ts +++ /dev/null @@ -1,75 +0,0 @@ -// Code generated by 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, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customGet` method. - */ -export type CustomGetProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customPost` method. - */ -export type CustomPostProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `customPut` method. - */ -export type CustomPutProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * 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 deleted file mode 100644 index 0713aad47..000000000 --- a/packages/client-insights/model/conversionEvent.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index f14124419..000000000 --- a/packages/client-insights/model/convertedFilters.ts +++ /dev/null @@ -1,37 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Timestamp of the event, measured in milliseconds since the Unix epoch. Must be no older than 30 days. If not provided, we use the time at which the request was received. - */ - timestamp?: number | undefined; -}; diff --git a/packages/client-insights/model/convertedObjectIDs.ts b/packages/client-insights/model/convertedObjectIDs.ts deleted file mode 100644 index 1feea9a5b..000000000 --- a/packages/client-insights/model/convertedObjectIDs.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Timestamp of the event, measured in milliseconds since the Unix epoch. Must be no older than 30 days. If not provided, we use the time at which the request was received. - */ - timestamp?: number | undefined; -}; diff --git a/packages/client-insights/model/convertedObjectIDsAfterSearch.ts b/packages/client-insights/model/convertedObjectIDsAfterSearch.ts deleted file mode 100644 index 8d6e24de5..000000000 --- a/packages/client-insights/model/convertedObjectIDsAfterSearch.ts +++ /dev/null @@ -1,45 +0,0 @@ -// Code generated by OpenAPI Generator (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. For agentic analytics events, the query ID may be prefixed with `message_` followed by any printable string. - */ - 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 | undefined; - - /** - * Timestamp of the event, measured in milliseconds since the Unix epoch. Must be no older than 30 days. If not provided, we use the time at which the request was received. - */ - timestamp?: number | undefined; -}; diff --git a/packages/client-insights/model/discount.ts b/packages/client-insights/model/discount.ts deleted file mode 100644 index 4b9b556aa..000000000 --- a/packages/client-insights/model/discount.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index f31be6046..000000000 --- a/packages/client-insights/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-insights/model/eventsItems.ts b/packages/client-insights/model/eventsItems.ts deleted file mode 100644 index 8dbe2c50a..000000000 --- a/packages/client-insights/model/eventsItems.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Code generated by OpenAPI Generator (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 { Instantsearch } from './instantsearch'; -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 - | Instantsearch; diff --git a/packages/client-insights/model/eventsResponse.ts b/packages/client-insights/model/eventsResponse.ts deleted file mode 100644 index 1ce0d0374..000000000 --- a/packages/client-insights/model/eventsResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * The HTTP status code of the response. - */ - status?: number | undefined; -}; diff --git a/packages/client-insights/model/index.ts b/packages/client-insights/model/index.ts deleted file mode 100644 index 6d9a8d296..000000000 --- a/packages/client-insights/model/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Code generated by 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 './instantsearch'; -export * from './instantsearchEvent'; -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 deleted file mode 100644 index 212fcb3a8..000000000 --- a/packages/client-insights/model/insightsEvents.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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/instantsearch.ts b/packages/client-insights/model/instantsearch.ts deleted file mode 100644 index b9909204f..000000000 --- a/packages/client-insights/model/instantsearch.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { InstantsearchEvent } from './instantsearchEvent'; - -export type Instantsearch = { - /** - * 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: InstantsearchEvent; - - /** - * 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 | undefined; - - /** - * Timestamp of the event, measured in milliseconds since the Unix epoch. Must be no older than 30 days. If not provided, we use the time at which the request was received. - */ - timestamp?: number | undefined; - - /** - * Unique identifier for an agent session. Used to correlate instantsearch events with a specific agent interaction. - */ - agentID?: string | undefined; -}; diff --git a/packages/client-insights/model/instantsearchEvent.ts b/packages/client-insights/model/instantsearchEvent.ts deleted file mode 100644 index 6e85790d7..000000000 --- a/packages/client-insights/model/instantsearchEvent.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 InstantsearchEvent = 'instantsearch'; diff --git a/packages/client-insights/model/objectData.ts b/packages/client-insights/model/objectData.ts deleted file mode 100644 index a76c08b7e..000000000 --- a/packages/client-insights/model/objectData.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - discount?: Discount | undefined; -}; diff --git a/packages/client-insights/model/objectDataAfterSearch.ts b/packages/client-insights/model/objectDataAfterSearch.ts deleted file mode 100644 index 18ee996f1..000000000 --- a/packages/client-insights/model/objectDataAfterSearch.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - price?: Price | undefined; - - /** - * 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 | undefined; - - discount?: Discount | undefined; -}; diff --git a/packages/client-insights/model/price.ts b/packages/client-insights/model/price.ts deleted file mode 100644 index 5bfa19085..000000000 --- a/packages/client-insights/model/price.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Final price of a single 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 deleted file mode 100644 index 092c35a3b..000000000 --- a/packages/client-insights/model/purchaseEvent.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 0b39128a1..000000000 --- a/packages/client-insights/model/purchasedObjectIDs.ts +++ /dev/null @@ -1,57 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Three-letter [currency code](https://www.iso.org/iso-4217-currency-codes.html). - */ - currency?: string | undefined; - - /** - * 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 | undefined; - - /** - * Timestamp of the event, measured in milliseconds since the Unix epoch. Must be no older than 30 days. If not provided, we use the time at which the request was received. - */ - timestamp?: number | undefined; - - value?: Value | undefined; -}; diff --git a/packages/client-insights/model/purchasedObjectIDsAfterSearch.ts b/packages/client-insights/model/purchasedObjectIDsAfterSearch.ts deleted file mode 100644 index e0498ad77..000000000 --- a/packages/client-insights/model/purchasedObjectIDsAfterSearch.ts +++ /dev/null @@ -1,57 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Three-letter [currency code](https://www.iso.org/iso-4217-currency-codes.html). - */ - currency?: string | undefined; - - /** - * 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. Must be no older than 30 days. If not provided, we use the time at which the request was received. - */ - timestamp?: number | undefined; - - value?: Value | undefined; -}; diff --git a/packages/client-insights/model/value.ts b/packages/client-insights/model/value.ts deleted file mode 100644 index f13342193..000000000 --- a/packages/client-insights/model/value.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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`. This should be equal to the sum of `price` times `quantity`. - */ -export type Value = number | string; diff --git a/packages/client-insights/model/viewEvent.ts b/packages/client-insights/model/viewEvent.ts deleted file mode 100644 index d743b4701..000000000 --- a/packages/client-insights/model/viewEvent.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 184c44072..000000000 --- a/packages/client-insights/model/viewedFilters.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Timestamp of the event, measured in milliseconds since the Unix epoch. Must be no older than 30 days. If not provided, we use the time at which the request was received. - */ - timestamp?: number | undefined; -}; diff --git a/packages/client-insights/model/viewedObjectIDs.ts b/packages/client-insights/model/viewedObjectIDs.ts deleted file mode 100644 index d19dd0623..000000000 --- a/packages/client-insights/model/viewedObjectIDs.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Timestamp of the event, measured in milliseconds since the Unix epoch. Must be no older than 30 days. If not provided, we use the time at which the request was received. - */ - timestamp?: number | undefined; -}; diff --git a/packages/client-insights/package.json b/packages/client-insights/package.json deleted file mode 100644 index 605b1c2a6..000000000 --- a/packages/client-insights/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "version": "5.56.0", - "repository": { - "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" - }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/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": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/builds/browser.js" - }, - "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", - "./dist/builds/*.js": "./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.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "26.1.2", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" - } -} diff --git a/packages/client-insights/rollup.config.js b/packages/client-insights/rollup.config.js deleted file mode 100644 index c9ca8ea8a..000000000 --- a/packages/client-insights/rollup.config.js +++ /dev/null @@ -1,17 +0,0 @@ -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 deleted file mode 100644 index b0858757c..000000000 --- a/packages/client-insights/src/insightsClient.ts +++ /dev/null @@ -1,463 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - CreateClientOptions, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, -} from '@algolia/client-common'; -import { createAuth, createTransporter, getAlgoliaAgent, validateRequired } 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.56.0'; - -export const REGIONS = ['de', 'us'] as const; -export type Region = (typeof REGIONS)[number]; -export type RegionOptions = { region?: Region | undefined }; - -function getDefaultHosts(region?: Region | undefined): 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 | undefined): 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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customDelete', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customDelete - The customDelete object. - * @param customDelete.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customDelete for the plain version. - */ - customDeleteWithHTTPInfo( - { path, parameters }: CustomDeleteProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customDeleteWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customGet', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customGet - The customGet object. - * @param customGet.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customGet for the plain version. - */ - customGetWithHTTPInfo( - { path, parameters }: CustomGetProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customGetWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPut', path); - - 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); - }, - /** - * This method lets you send requests to the Algolia REST API. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPut - The customPut object. - * @param customPut.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPut for the plain version. - */ - customPutWithHTTPInfo( - { path, parameters, body }: CustomPutProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPutWithHTTPInfo', path); - - 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.requestWithHttpInfo(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. - * - * Required API Key ACLs: - * - deleteObject - * @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 { - validateRequired('userToken', 'deleteUserToken', userToken); - - 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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - deleteObject - * @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. - * @see deleteUserToken for the plain version. - */ - deleteUserTokenWithHTTPInfo( - { userToken }: DeleteUserTokenProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('userToken', 'deleteUserTokenWithHTTPInfo', userToken); - - 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.requestWithHttpInfo(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. - * - * Required API Key ACLs: - * - search - * @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 { - validateRequired('insightsEvents', 'pushEvents', insightsEvents); - - validateRequired('insightsEvents.events', 'pushEvents', insightsEvents.events); - - 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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - search - * @param insightsEvents - The insightsEvents object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see pushEvents for the plain version. - */ - pushEventsWithHTTPInfo( - insightsEvents: InsightsEvents, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('insightsEvents', 'pushEventsWithHTTPInfo', insightsEvents); - - validateRequired('insightsEvents.events', 'pushEventsWithHTTPInfo', insightsEvents.events); - - const requestPath = '/1/events'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: insightsEvents, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/client-insights/tsconfig.json b/packages/client-insights/tsconfig.json deleted file mode 100644 index 444e8bb64..000000000 --- a/packages/client-insights/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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 deleted file mode 100644 index dc9eccd99..000000000 --- a/packages/client-insights/tsup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -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', - target: 'es2018', - 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 deleted file mode 100644 index fddf416f9..000000000 --- a/packages/client-personalization/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index d96c922f1..000000000 --- a/packages/client-personalization/README.md +++ /dev/null @@ -1,76 +0,0 @@ -

- - 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 • - 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.56.0 -# or -npm install @algolia/client-personalization@5.56.0 -# or -pnpm add @algolia/client-personalization@5.56.0 -``` - -### 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/sdk/methods/personalization/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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 new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/client-personalization/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 deleted file mode 100644 index 5956acdfd..000000000 --- a/packages/client-personalization/builds/browser.ts +++ /dev/null @@ -1,66 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -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 | undefined, -): 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(', ')}`); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - 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()], - }), - ...browserOptions, - }); -} - -export type PersonalizationClient = ReturnType; diff --git a/packages/client-personalization/builds/fetch.ts b/packages/client-personalization/builds/fetch.ts deleted file mode 100644 index d20cf340a..000000000 --- a/packages/client-personalization/builds/fetch.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -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 | undefined, -): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/client-personalization/builds/node.ts b/packages/client-personalization/builds/node.ts deleted file mode 100644 index f376c36c8..000000000 --- a/packages/client-personalization/builds/node.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -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 | undefined, -): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/client-personalization/builds/worker.ts b/packages/client-personalization/builds/worker.ts deleted file mode 100644 index a1627b1f0..000000000 --- a/packages/client-personalization/builds/worker.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Code generated by 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 | undefined, -): 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(', ')}`); - } - - const { compression: _compression, ...workerOptions } = options || {}; - - 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(), - ...workerOptions, - }), - }; -} diff --git a/packages/client-personalization/index.d.ts b/packages/client-personalization/index.d.ts deleted file mode 100644 index e81a1cd3e..000000000 --- a/packages/client-personalization/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/node'; diff --git a/packages/client-personalization/index.js b/packages/client-personalization/index.js index 21e26aad3..df07d60ae 100644 --- a/packages/client-personalization/index.js +++ b/packages/client-personalization/index.js @@ -1 +1,2 @@ -module.exports = require('./dist/builds/node.cjs'); +// eslint-disable-next-line functional/immutable-data, import/no-commonjs +module.exports = require('./dist/client-personalization.cjs.js'); diff --git a/packages/client-personalization/model/clientMethodProps.ts b/packages/client-personalization/model/clientMethodProps.ts deleted file mode 100644 index c63658989..000000000 --- a/packages/client-personalization/model/clientMethodProps.ts +++ /dev/null @@ -1,85 +0,0 @@ -// Code generated by 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, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customGet` method. - */ -export type CustomGetProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customPost` method. - */ -export type CustomPostProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `customPut` method. - */ -export type CustomPutProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * 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 deleted file mode 100644 index 3fb7a0526..000000000 --- a/packages/client-personalization/model/deleteUserProfileResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index f31be6046..000000000 --- a/packages/client-personalization/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-personalization/model/eventType.ts b/packages/client-personalization/model/eventType.ts deleted file mode 100644 index fa07628dd..000000000 --- a/packages/client-personalization/model/eventType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index a876e97de..000000000 --- a/packages/client-personalization/model/eventsScoring.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 19ce043c6..000000000 --- a/packages/client-personalization/model/facetsScoring.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index d5f4988e9..000000000 --- a/packages/client-personalization/model/getUserTokenResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 6309141c0..000000000 --- a/packages/client-personalization/model/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 3f392c7ad..000000000 --- a/packages/client-personalization/model/personalizationStrategyParams.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 82ec49470..000000000 --- a/packages/client-personalization/model/setPersonalizationStrategyResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 0758cf035..559fe0132 100644 --- a/packages/client-personalization/package.json +++ b/packages/client-personalization/package.json @@ -1,73 +1,23 @@ { - "version": "5.56.0", + "name": "@algolia/client-personalization", + "version": "4.17.2", + "private": false, "repository": { "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git://github.com/algolia/algoliasearch-client-javascript.git" }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/packages/client-personalization#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-personalization", - "description": "JavaScript client for client-personalization", - "exports": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/builds/browser.js" - }, - "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", - "./dist/builds/*.js": "./dist/builds/*.js" - }, - "jsdelivr": "./dist/builds/browser.umd.js", - "unpkg": "./dist/builds/browser.umd.js", - "react-native": "./dist/builds/browser.js", + "sideEffects": false, + "main": "index.js", + "module": "dist/client-personalization.esm.js", + "types": "dist/client-personalization.d.ts", "files": [ - "dist", "index.js", - "index.d.ts" + "dist" ], "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "26.1.2", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" + "@algolia/client-common": "4.17.2", + "@algolia/requester-common": "4.17.2", + "@algolia/transporter": "4.17.2" } } diff --git a/packages/client-personalization/rollup.config.js b/packages/client-personalization/rollup.config.js deleted file mode 100644 index ba6b5a245..000000000 --- a/packages/client-personalization/rollup.config.js +++ /dev/null @@ -1,17 +0,0 @@ -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 new file mode 100644 index 000000000..cbb3cefb1 --- /dev/null +++ b/packages/client-personalization/src/__tests__/features/personalization-strategy.test.ts @@ -0,0 +1,58 @@ +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 new file mode 100644 index 000000000..801c27930 --- /dev/null +++ b/packages/client-personalization/src/__tests__/unit/personalization-client.test.ts @@ -0,0 +1,84 @@ +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 new file mode 100644 index 000000000..2fc37f4a3 --- /dev/null +++ b/packages/client-personalization/src/createPersonalizationClient.ts @@ -0,0 +1,35 @@ +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 new file mode 100644 index 000000000..18b3a1b76 --- /dev/null +++ b/packages/client-personalization/src/index.ts @@ -0,0 +1,7 @@ +/** + * @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 new file mode 100644 index 000000000..8a96147d3 --- /dev/null +++ b/packages/client-personalization/src/methods/getPersonalizationStrategy.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..c64d44a9a --- /dev/null +++ b/packages/client-personalization/src/methods/index.ts @@ -0,0 +1,6 @@ +/** + * @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 new file mode 100644 index 000000000..846d8c954 --- /dev/null +++ b/packages/client-personalization/src/methods/setPersonalizationStrategy.ts @@ -0,0 +1,24 @@ +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 deleted file mode 100644 index e127610e3..000000000 --- a/packages/client-personalization/src/personalizationClient.ts +++ /dev/null @@ -1,618 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - CreateClientOptions, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, -} from '@algolia/client-common'; -import { createAuth, createTransporter, getAlgoliaAgent, validateRequired } 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.56.0'; - -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 | undefined): 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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customDelete', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customDelete - The customDelete object. - * @param customDelete.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customDelete for the plain version. - */ - customDeleteWithHTTPInfo( - { path, parameters }: CustomDeleteProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customDeleteWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customGet', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customGet - The customGet object. - * @param customGet.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customGet for the plain version. - */ - customGetWithHTTPInfo( - { path, parameters }: CustomGetProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customGetWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPut', path); - - 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); - }, - /** - * This method lets you send requests to the Algolia REST API. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPut - The customPut object. - * @param customPut.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPut for the plain version. - */ - customPutWithHTTPInfo( - { path, parameters, body }: CustomPutProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPutWithHTTPInfo', path); - - 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.requestWithHttpInfo(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 { - validateRequired('userToken', 'deleteUserProfile', userToken); - - 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); - }, - /** - * Deletes a user profile. The response includes a date and time when the user profile can safely be considered deleted. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteUserProfile for the plain version. - */ - deleteUserProfileWithHTTPInfo( - { userToken }: DeleteUserProfileProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('userToken', 'deleteUserProfileWithHTTPInfo', userToken); - - 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.requestWithHttpInfo(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 | undefined): 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 the current personalization strategy. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - recommendation - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getPersonalizationStrategy for the plain version. - */ - getPersonalizationStrategyWithHTTPInfo( - requestOptions?: RequestOptions | undefined, - ): Promise> { - const requestPath = '/1/strategies/personalization'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('userToken', 'getUserTokenProfile', userToken); - - 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); - }, - /** - * Retrieves a user profile and their affinities for different facets. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getUserTokenProfile for the plain version. - */ - getUserTokenProfileWithHTTPInfo( - { userToken }: GetUserTokenProfileProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('userToken', 'getUserTokenProfileWithHTTPInfo', userToken); - - 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.requestWithHttpInfo(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 { - validateRequired('personalizationStrategyParams', 'setPersonalizationStrategy', personalizationStrategyParams); - - validateRequired( - 'personalizationStrategyParams.eventsScoring', - 'setPersonalizationStrategy', - personalizationStrategyParams.eventsScoring, - ); - validateRequired( - 'personalizationStrategyParams.facetsScoring', - 'setPersonalizationStrategy', - personalizationStrategyParams.facetsScoring, - ); - validateRequired( - 'personalizationStrategyParams.personalizationImpact', - 'setPersonalizationStrategy', - personalizationStrategyParams.personalizationImpact, - ); - - 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); - }, - /** - * Creates a new personalization strategy. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see setPersonalizationStrategy for the plain version. - */ - setPersonalizationStrategyWithHTTPInfo( - personalizationStrategyParams: PersonalizationStrategyParams, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired( - 'personalizationStrategyParams', - 'setPersonalizationStrategyWithHTTPInfo', - personalizationStrategyParams, - ); - - validateRequired( - 'personalizationStrategyParams.eventsScoring', - 'setPersonalizationStrategyWithHTTPInfo', - personalizationStrategyParams.eventsScoring, - ); - validateRequired( - 'personalizationStrategyParams.facetsScoring', - 'setPersonalizationStrategyWithHTTPInfo', - personalizationStrategyParams.facetsScoring, - ); - validateRequired( - 'personalizationStrategyParams.personalizationImpact', - 'setPersonalizationStrategyWithHTTPInfo', - personalizationStrategyParams.personalizationImpact, - ); - - const requestPath = '/1/strategies/personalization'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: personalizationStrategyParams, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/client-personalization/src/types/GetPersonalizationStrategyResponse.ts b/packages/client-personalization/src/types/GetPersonalizationStrategyResponse.ts new file mode 100644 index 000000000..d0ae3b865 --- /dev/null +++ b/packages/client-personalization/src/types/GetPersonalizationStrategyResponse.ts @@ -0,0 +1,23 @@ +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 new file mode 100644 index 000000000..87235c140 --- /dev/null +++ b/packages/client-personalization/src/types/PersonalizationClient.ts @@ -0,0 +1,13 @@ +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 new file mode 100644 index 000000000..6539401df --- /dev/null +++ b/packages/client-personalization/src/types/PersonalizationClientOptions.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..4af503cdc --- /dev/null +++ b/packages/client-personalization/src/types/PersonalizationStrategy.ts @@ -0,0 +1,23 @@ +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 new file mode 100644 index 000000000..f005b29c8 --- /dev/null +++ b/packages/client-personalization/src/types/SetPersonalizationStrategyResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..6ce567858 --- /dev/null +++ b/packages/client-personalization/src/types/index.ts @@ -0,0 +1,9 @@ +/** + * @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 deleted file mode 100644 index 444e8bb64..000000000 --- a/packages/client-personalization/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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 deleted file mode 100644 index fd0b7aded..000000000 --- a/packages/client-personalization/tsup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -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', - target: 'es2018', - 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 deleted file mode 100644 index fddf416f9..000000000 --- a/packages/client-query-suggestions/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index 83be3126d..000000000 --- a/packages/client-query-suggestions/README.md +++ /dev/null @@ -1,76 +0,0 @@ -

- - 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 • - 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.56.0 -# or -npm install @algolia/client-query-suggestions@5.56.0 -# or -pnpm add @algolia/client-query-suggestions@5.56.0 -``` - -### 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/sdk/methods/query-suggestions/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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 deleted file mode 100644 index cc90e5def..000000000 --- a/packages/client-query-suggestions/builds/browser.ts +++ /dev/null @@ -1,66 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -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 | undefined, -): 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(', ')}`); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - 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()], - }), - ...browserOptions, - }); -} - -export type QuerySuggestionsClient = ReturnType; diff --git a/packages/client-query-suggestions/builds/fetch.ts b/packages/client-query-suggestions/builds/fetch.ts deleted file mode 100644 index 134d5153f..000000000 --- a/packages/client-query-suggestions/builds/fetch.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -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 | undefined, -): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/client-query-suggestions/builds/node.ts b/packages/client-query-suggestions/builds/node.ts deleted file mode 100644 index 7412e31d4..000000000 --- a/packages/client-query-suggestions/builds/node.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -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 | undefined, -): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/client-query-suggestions/builds/worker.ts b/packages/client-query-suggestions/builds/worker.ts deleted file mode 100644 index 997f88c4b..000000000 --- a/packages/client-query-suggestions/builds/worker.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Code generated by 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 | undefined, -): 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(', ')}`); - } - - const { compression: _compression, ...workerOptions } = options || {}; - - 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(), - ...workerOptions, - }), - }; -} diff --git a/packages/client-query-suggestions/index.d.ts b/packages/client-query-suggestions/index.d.ts deleted file mode 100644 index e81a1cd3e..000000000 --- a/packages/client-query-suggestions/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/node'; diff --git a/packages/client-query-suggestions/index.js b/packages/client-query-suggestions/index.js deleted file mode 100644 index 21e26aad3..000000000 --- a/packages/client-query-suggestions/index.js +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index f3526f43d..000000000 --- a/packages/client-query-suggestions/model/appID.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-query-suggestions/model/baseResponse.ts b/packages/client-query-suggestions/model/baseResponse.ts deleted file mode 100644 index a16f8079a..000000000 --- a/packages/client-query-suggestions/model/baseResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Details about the response, such as error messages. - */ - message?: string | undefined; -}; diff --git a/packages/client-query-suggestions/model/clientMethodProps.ts b/packages/client-query-suggestions/model/clientMethodProps.ts deleted file mode 100644 index 82b03b227..000000000 --- a/packages/client-query-suggestions/model/clientMethodProps.ts +++ /dev/null @@ -1,118 +0,0 @@ -// Code generated by OpenAPI Generator (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, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customGet` method. - */ -export type CustomGetProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customPost` method. - */ -export type CustomPostProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `customPut` method. - */ -export type CustomPutProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * 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 deleted file mode 100644 index bd8a8ddfa..000000000 --- a/packages/client-query-suggestions/model/configStatus.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Whether the creation or update of the Query Suggestions index is in progress. - */ - isRunning?: boolean | undefined; - - /** - * Date and time when the Query Suggestions index was last built, in RFC 3339 format. - */ - lastBuiltAt?: string | undefined; - - /** - * Date and time when the Query Suggestions index was last updated successfully. - */ - lastSuccessfulBuiltAt?: string | undefined; - - /** - * Duration of the last successful build in seconds. - */ - lastSuccessfulBuildDuration?: string | undefined; -}; diff --git a/packages/client-query-suggestions/model/configuration.ts b/packages/client-query-suggestions/model/configuration.ts deleted file mode 100644 index 512a37f28..000000000 --- a/packages/client-query-suggestions/model/configuration.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Words or regular expressions to exclude from the suggestions. - */ - exclude?: Array | null | undefined; - - /** - * Whether to turn on personalized query suggestions. - */ - enablePersonalization?: boolean | undefined; - - /** - * Whether to include suggestions with special characters. - */ - allowSpecialCharacters?: boolean | undefined; -}; diff --git a/packages/client-query-suggestions/model/configurationResponse.ts b/packages/client-query-suggestions/model/configurationResponse.ts deleted file mode 100644 index fd8e56ff4..000000000 --- a/packages/client-query-suggestions/model/configurationResponse.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index edf4222f2..000000000 --- a/packages/client-query-suggestions/model/configurationWithIndex.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index f31be6046..000000000 --- a/packages/client-query-suggestions/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-query-suggestions/model/facet.ts b/packages/client-query-suggestions/model/facet.ts deleted file mode 100644 index ed8c6be66..000000000 --- a/packages/client-query-suggestions/model/facet.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Number of suggestions. - */ - amount?: number | undefined; -}; diff --git a/packages/client-query-suggestions/model/index.ts b/packages/client-query-suggestions/model/index.ts deleted file mode 100644 index a2759212b..000000000 --- a/packages/client-query-suggestions/model/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 60a171543..000000000 --- a/packages/client-query-suggestions/model/languages.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 27466a0b5..000000000 --- a/packages/client-query-suggestions/model/logFile.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - level?: LogLevel | undefined; - - /** - * Details about this log entry. - */ - message?: string | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/client-query-suggestions/model/logLevel.ts b/packages/client-query-suggestions/model/logLevel.ts deleted file mode 100644 index 59f1e013b..000000000 --- a/packages/client-query-suggestions/model/logLevel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 86b44932c..000000000 --- a/packages/client-query-suggestions/model/sourceIndex.ts +++ /dev/null @@ -1,48 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Analytics tags for filtering the popular searches. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments). - */ - analyticsTags?: Array | null | undefined; - - /** - * Facets to use as top categories with your suggestions. If provided, Query Suggestions adds the top facet values to each suggestion. - */ - facets?: Array | null | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Facets used for generating query suggestions from facet values. For example, if you set `generate: [\"color\", \"brand\"]`, combinations from the facet values are added as query suggestions, such as \"blue adidas\", \"red adidas\", \"blue nike\", \"red nike\", etc. You can include nested lists. - */ - generate?: Array> | null | undefined; - - /** - * Algolia indices with popular searches to use as query suggestions. Records of these indices must have these attributes: - `query`: search query which will be added as a suggestion - `count`: measure of popularity of that search query For example, you can export popular searches from an external analytics provider, such as Google Analytics or Adobe Analytics, and feed this data into an Algolia index. You can use this index to generate query suggestions until your Algolia Analytics has collected enough data. - */ - external?: Array | null | undefined; -}; diff --git a/packages/client-query-suggestions/package.json b/packages/client-query-suggestions/package.json deleted file mode 100644 index 6b26a1064..000000000 --- a/packages/client-query-suggestions/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "version": "5.56.0", - "repository": { - "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" - }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/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": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/builds/browser.js" - }, - "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", - "./dist/builds/*.js": "./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.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "26.1.2", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" - } -} diff --git a/packages/client-query-suggestions/rollup.config.js b/packages/client-query-suggestions/rollup.config.js deleted file mode 100644 index 30b6553c9..000000000 --- a/packages/client-query-suggestions/rollup.config.js +++ /dev/null @@ -1,17 +0,0 @@ -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 deleted file mode 100644 index 576c51dd1..000000000 --- a/packages/client-query-suggestions/src/querySuggestionsClient.ts +++ /dev/null @@ -1,760 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - CreateClientOptions, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, -} from '@algolia/client-common'; -import { createAuth, createTransporter, getAlgoliaAgent, validateRequired } 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.56.0'; - -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 | undefined): 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 { - validateRequired('configurationWithIndex', 'createConfig', configurationWithIndex); - - 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); - }, - /** - * Creates a new Query Suggestions configuration. You can have up to 100 configurations per Algolia application. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see createConfig for the plain version. - */ - createConfigWithHTTPInfo( - configurationWithIndex: ConfigurationWithIndex, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('configurationWithIndex', 'createConfigWithHTTPInfo', configurationWithIndex); - - const requestPath = '/1/configs'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: configurationWithIndex, - }; - - return transporter.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customDelete', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customDelete - The customDelete object. - * @param customDelete.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customDelete for the plain version. - */ - customDeleteWithHTTPInfo( - { path, parameters }: CustomDeleteProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customDeleteWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customGet', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customGet - The customGet object. - * @param customGet.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customGet for the plain version. - */ - customGetWithHTTPInfo( - { path, parameters }: CustomGetProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customGetWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPut', path); - - 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); - }, - /** - * This method lets you send requests to the Algolia REST API. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPut - The customPut object. - * @param customPut.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPut for the plain version. - */ - customPutWithHTTPInfo( - { path, parameters, body }: CustomPutProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPutWithHTTPInfo', path); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'deleteConfig', indexName); - - 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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteConfig for the plain version. - */ - deleteConfigWithHTTPInfo( - { indexName }: DeleteConfigProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'deleteConfigWithHTTPInfo', indexName); - - 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.requestWithHttpInfo(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 | undefined): 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 all Query Suggestions configurations of your Algolia application. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getAllConfigs for the plain version. - */ - getAllConfigsWithHTTPInfo( - requestOptions?: RequestOptions | undefined, - ): Promise>> { - const requestPath = '/1/configs'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('indexName', 'getConfig', indexName); - - 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); - }, - /** - * Retrieves a single Query Suggestions configuration by its index name. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getConfig for the plain version. - */ - getConfigWithHTTPInfo( - { indexName }: GetConfigProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'getConfigWithHTTPInfo', indexName); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'getConfigStatus', indexName); - - 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); - }, - /** - * Reports the status of a Query Suggestions index. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getConfigStatus for the plain version. - */ - getConfigStatusWithHTTPInfo( - { indexName }: GetConfigStatusProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'getConfigStatusWithHTTPInfo', indexName); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'getLogFile', indexName); - - 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); - }, - /** - * Retrieves the logs for a single Query Suggestions index. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getLogFile for the plain version. - */ - getLogFileWithHTTPInfo( - { indexName }: GetLogFileProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'getLogFileWithHTTPInfo', indexName); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'updateConfig', indexName); - - validateRequired('configuration', 'updateConfig', configuration); - - validateRequired('configuration.sourceIndices', 'updateConfig', configuration.sourceIndices); - - 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); - }, - /** - * Updates a QuerySuggestions configuration. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see updateConfig for the plain version. - */ - updateConfigWithHTTPInfo( - { indexName, configuration }: UpdateConfigProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'updateConfigWithHTTPInfo', indexName); - - validateRequired('configuration', 'updateConfigWithHTTPInfo', configuration); - - validateRequired('configuration.sourceIndices', 'updateConfigWithHTTPInfo', configuration.sourceIndices); - - 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.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/client-query-suggestions/tsconfig.json b/packages/client-query-suggestions/tsconfig.json deleted file mode 100644 index 444e8bb64..000000000 --- a/packages/client-query-suggestions/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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 deleted file mode 100644 index f5f101704..000000000 --- a/packages/client-query-suggestions/tsup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -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', - target: 'es2018', - 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 new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/client-recommendation/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 000000000..7bddf1787 --- /dev/null +++ b/packages/client-recommendation/index.js @@ -0,0 +1,2 @@ +// 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 new file mode 100644 index 000000000..3c9943ff4 --- /dev/null +++ b/packages/client-recommendation/package.json @@ -0,0 +1,23 @@ +{ + "name": "@algolia/client-recommendation", + "version": "4.17.2", + "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.17.2", + "@algolia/client-personalization": "4.17.2", + "@algolia/requester-common": "4.17.2" + } +} diff --git a/packages/client-recommendation/src/__tests__/features/personalization-strategy.test.ts b/packages/client-recommendation/src/__tests__/features/personalization-strategy.test.ts new file mode 100644 index 000000000..cbb3cefb1 --- /dev/null +++ b/packages/client-recommendation/src/__tests__/features/personalization-strategy.test.ts @@ -0,0 +1,58 @@ +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 new file mode 100644 index 000000000..1cf32617b --- /dev/null +++ b/packages/client-recommendation/src/__tests__/unit/recommendation-client.test.ts @@ -0,0 +1,96 @@ +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 new file mode 100644 index 000000000..15bcb3e93 --- /dev/null +++ b/packages/client-recommendation/src/createRecommendationClient.ts @@ -0,0 +1,21 @@ +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 new file mode 100644 index 000000000..900b9eb76 --- /dev/null +++ b/packages/client-recommendation/src/index.ts @@ -0,0 +1,7 @@ +/** + * @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 new file mode 100644 index 000000000..60c4b711f --- /dev/null +++ b/packages/client-recommendation/src/methods/getPersonalizationStrategy.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..c64d44a9a --- /dev/null +++ b/packages/client-recommendation/src/methods/index.ts @@ -0,0 +1,6 @@ +/** + * @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 new file mode 100644 index 000000000..8d6d6bae4 --- /dev/null +++ b/packages/client-recommendation/src/methods/setPersonalizationStrategy.ts @@ -0,0 +1,24 @@ +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 new file mode 100644 index 000000000..d0ae3b865 --- /dev/null +++ b/packages/client-recommendation/src/types/GetPersonalizationStrategyResponse.ts @@ -0,0 +1,23 @@ +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 new file mode 100644 index 000000000..4af503cdc --- /dev/null +++ b/packages/client-recommendation/src/types/PersonalizationStrategy.ts @@ -0,0 +1,23 @@ +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 new file mode 100644 index 000000000..e20a37ca3 --- /dev/null +++ b/packages/client-recommendation/src/types/RecommendationClient.ts @@ -0,0 +1,13 @@ +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 new file mode 100644 index 000000000..9faee40a2 --- /dev/null +++ b/packages/client-recommendation/src/types/RecommendationClientOptions.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..f005b29c8 --- /dev/null +++ b/packages/client-recommendation/src/types/SetPersonalizationStrategyResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..223310f09 --- /dev/null +++ b/packages/client-recommendation/src/types/index.ts @@ -0,0 +1,9 @@ +/** + * @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 deleted file mode 100644 index fddf416f9..000000000 --- a/packages/client-search/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index b31dd7b2f..000000000 --- a/packages/client-search/README.md +++ /dev/null @@ -1,76 +0,0 @@ -

- - 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 • - 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.56.0 -# or -npm install @algolia/client-search@5.56.0 -# or -pnpm add @algolia/client-search@5.56.0 -``` - -### 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/sdk/methods/search/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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 new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/client-search/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 deleted file mode 100644 index ab626299c..000000000 --- a/packages/client-search/builds/browser.ts +++ /dev/null @@ -1,52 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -import type { ClientOptions } from '@algolia/client-common'; - -import { apiClientVersion, createSearchClient } from '../src/searchClient'; - -export { apiClientVersion } from '../src/searchClient'; - -export * from '../model'; - -export function searchClient(appId: string, apiKey: string, options?: ClientOptions | undefined): SearchClient { - if (!appId || typeof appId !== 'string') { - throw new Error('`appId` is missing.'); - } - - if (!apiKey || typeof apiKey !== 'string') { - throw new Error('`apiKey` is missing.'); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - return createSearchClient({ - appId, - apiKey, - timeouts: { - connect: 1000, - read: 2000, - write: 30000, - }, - logger: createNullLogger(), - requester: createXhrRequester(), - algoliaAgents: [{ segment: 'Browser' }], - authMode: 'WithinQueryParameters', - requestIdChannel: 'queryParameters', - responsesCache: createMemoryCache(), - requestsCache: createMemoryCache({ serializable: false }), - hostsCache: createFallbackableCache({ - caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], - }), - ...browserOptions, - }); -} - -export type SearchClient = ReturnType; diff --git a/packages/client-search/builds/fetch.ts b/packages/client-search/builds/fetch.ts deleted file mode 100644 index 3d9432535..000000000 --- a/packages/client-search/builds/fetch.ts +++ /dev/null @@ -1,244 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -import { createHmac } from 'node:crypto'; - -import { - IndexAlreadyExistsError, - IndexNotFoundError, - IndicesInSameAppError, - createMemoryCache, - createNullCache, - createNullLogger, - serializeQueryParameters, - withRequestId, -} from '@algolia/client-common'; -import { createFetchRequester } from '@algolia/requester-fetch'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -import type { ClientOptions, RequestOptions } from '@algolia/client-common'; - -import { createSearchClient } from '../src/searchClient'; - -export { apiClientVersion } from '../src/searchClient'; - -export * from '../model'; - -import type { - AccountCopyIndexOptions, - BrowseResponse, - GenerateSecuredApiKeyOptions, - GetSecuredApiKeyRemainingValidityOptions, - SearchClientNodeHelpers, - SearchRulesResponse, - SearchSynonymsResponse, - UpdatedAtResponse, -} from '../model'; - -export function searchClient(appId: string, apiKey: string, options?: ClientOptions | undefined): 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' }], - requestIdChannel: 'queryParameters', - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...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: Copies the given `sourceIndexName` records, rules and synonyms to an other Algolia application for the given `destinationIndexName`. - * See https://api-clients-automation.netlify.app/docs/custom-helpers/#replaceallobjects for implementation details. - * - * @summary Helper: Copies the given `sourceIndexName` records, rules and synonyms to an other Algolia application for the given `destinationIndexName`. - * @param accountCopyIndex - The `accountCopyIndex` object. - * @param accountCopyIndex.sourceIndexName - The name of the index to copy. - * @param accountCopyIndex.destinationAppID - The application ID to write the index to. - * @param accountCopyIndex.destinationApiKey - The API Key of the `destinationAppID` to write the index to, must have write ACLs. - * @param accountCopyIndex.destinationIndexName - The name of the index to write the copied index to. - * @param accountCopyIndex.batchSize - The size of the chunk of `objects`. Defaults to 1000. - * @param accountCopyIndex.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `setSettings`, `saveRules`, `saveSynonyms` and `saveObjects` method and merged with the transporter requestOptions. - */ - async accountCopyIndex( - { - sourceIndexName, - destinationAppID, - destinationApiKey, - destinationIndexName, - batchSize, - maxRetries = 100, - }: AccountCopyIndexOptions, - requestOptions?: RequestOptions | undefined, - ): Promise { - requestOptions = withRequestId(this.transporter, requestOptions); - const responses: Array<{ taskID: UpdatedAtResponse['taskID'] }> = []; - - if (this.appId === destinationAppID) { - throw new IndicesInSameAppError(); - } - - if (!(await this.indexExists({ indexName: sourceIndexName }, requestOptions))) { - throw new IndexNotFoundError(sourceIndexName); - } - - const destinationClient = createSearchClient({ - appId: destinationAppID, - apiKey: destinationApiKey, - timeouts: { - connect: 2000, - read: 5000, - write: 30000, - }, - logger: createNullLogger(), - requester: createHttpRequester(), - algoliaAgents: [{ segment: 'accountCopyIndex', version: process.versions.node }], - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - ...options, - }); - - if (await destinationClient.indexExists({ indexName: destinationIndexName }, requestOptions)) { - throw new IndexAlreadyExistsError(destinationIndexName); - } - - responses.push( - await destinationClient.setSettings( - { - indexName: destinationIndexName, - indexSettings: await this.getSettings({ indexName: sourceIndexName }, requestOptions), - }, - requestOptions, - ), - ); - - await this.browseRules( - { - indexName: sourceIndexName, - async aggregator(response: SearchRulesResponse) { - responses.push( - await destinationClient.saveRules( - { indexName: destinationIndexName, rules: response.hits }, - requestOptions, - ), - ); - }, - }, - requestOptions, - ); - - await this.browseSynonyms( - { - indexName: sourceIndexName, - async aggregator(response: SearchSynonymsResponse) { - responses.push( - await destinationClient.saveSynonyms( - { indexName: destinationIndexName, synonymHit: response.hits }, - requestOptions, - ), - ); - }, - }, - requestOptions, - ); - - await this.browseObjects( - { - indexName: sourceIndexName, - browseParams: batchSize ? { hitsPerPage: batchSize } : undefined, - async aggregator(response: BrowseResponse) { - responses.push( - ...(await destinationClient.saveObjects( - { indexName: destinationIndexName, objects: response.hits, batchSize }, - requestOptions, - )), - ); - }, - }, - requestOptions, - ); - - for (const response of responses) { - await destinationClient.waitForTask( - { indexName: destinationIndexName, taskID: response.taskID, maxRetries }, - requestOptions, - ); - } - }, - /** - * 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 deleted file mode 100644 index 833ce13de..000000000 --- a/packages/client-search/builds/node.ts +++ /dev/null @@ -1,243 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -import { createHmac } from 'node:crypto'; - -import { - IndexAlreadyExistsError, - IndexNotFoundError, - IndicesInSameAppError, - createMemoryCache, - createNullCache, - createNullLogger, - serializeQueryParameters, - withRequestId, -} from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -import type { ClientOptions, RequestOptions } from '@algolia/client-common'; - -import { createSearchClient } from '../src/searchClient'; - -export { apiClientVersion } from '../src/searchClient'; - -export * from '../model'; - -import type { - AccountCopyIndexOptions, - BrowseResponse, - GenerateSecuredApiKeyOptions, - GetSecuredApiKeyRemainingValidityOptions, - SearchClientNodeHelpers, - SearchRulesResponse, - SearchSynonymsResponse, - UpdatedAtResponse, -} from '../model'; - -export function searchClient(appId: string, apiKey: string, options?: ClientOptions | undefined): 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 }], - requestIdChannel: 'headers', - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...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: Copies the given `sourceIndexName` records, rules and synonyms to an other Algolia application for the given `destinationIndexName`. - * See https://api-clients-automation.netlify.app/docs/custom-helpers/#replaceallobjects for implementation details. - * - * @summary Helper: Copies the given `sourceIndexName` records, rules and synonyms to an other Algolia application for the given `destinationIndexName`. - * @param accountCopyIndex - The `accountCopyIndex` object. - * @param accountCopyIndex.sourceIndexName - The name of the index to copy. - * @param accountCopyIndex.destinationAppID - The application ID to write the index to. - * @param accountCopyIndex.destinationApiKey - The API Key of the `destinationAppID` to write the index to, must have write ACLs. - * @param accountCopyIndex.destinationIndexName - The name of the index to write the copied index to. - * @param accountCopyIndex.batchSize - The size of the chunk of `objects`. Defaults to 1000. - * @param accountCopyIndex.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `setSettings`, `saveRules`, `saveSynonyms` and `saveObjects` method and merged with the transporter requestOptions. - */ - async accountCopyIndex( - { - sourceIndexName, - destinationAppID, - destinationApiKey, - destinationIndexName, - batchSize, - maxRetries = 100, - }: AccountCopyIndexOptions, - requestOptions?: RequestOptions | undefined, - ): Promise { - requestOptions = withRequestId(this.transporter, requestOptions); - const responses: Array<{ taskID: UpdatedAtResponse['taskID'] }> = []; - - if (this.appId === destinationAppID) { - throw new IndicesInSameAppError(); - } - - if (!(await this.indexExists({ indexName: sourceIndexName }, requestOptions))) { - throw new IndexNotFoundError(sourceIndexName); - } - - const destinationClient = createSearchClient({ - appId: destinationAppID, - apiKey: destinationApiKey, - timeouts: { - connect: 2000, - read: 5000, - write: 30000, - }, - logger: createNullLogger(), - requester: createHttpRequester(), - algoliaAgents: [{ segment: 'accountCopyIndex', version: process.versions.node }], - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - ...options, - }); - - if (await destinationClient.indexExists({ indexName: destinationIndexName }, requestOptions)) { - throw new IndexAlreadyExistsError(destinationIndexName); - } - - responses.push( - await destinationClient.setSettings( - { - indexName: destinationIndexName, - indexSettings: await this.getSettings({ indexName: sourceIndexName }, requestOptions), - }, - requestOptions, - ), - ); - - await this.browseRules( - { - indexName: sourceIndexName, - async aggregator(response: SearchRulesResponse) { - responses.push( - await destinationClient.saveRules( - { indexName: destinationIndexName, rules: response.hits }, - requestOptions, - ), - ); - }, - }, - requestOptions, - ); - - await this.browseSynonyms( - { - indexName: sourceIndexName, - async aggregator(response: SearchSynonymsResponse) { - responses.push( - await destinationClient.saveSynonyms( - { indexName: destinationIndexName, synonymHit: response.hits }, - requestOptions, - ), - ); - }, - }, - requestOptions, - ); - - await this.browseObjects( - { - indexName: sourceIndexName, - browseParams: batchSize ? { hitsPerPage: batchSize } : undefined, - async aggregator(response: BrowseResponse) { - responses.push( - ...(await destinationClient.saveObjects( - { indexName: destinationIndexName, objects: response.hits, batchSize }, - requestOptions, - )), - ); - }, - }, - requestOptions, - ); - - for (const response of responses) { - await destinationClient.waitForTask( - { indexName: destinationIndexName, taskID: response.taskID, maxRetries }, - requestOptions, - ); - } - }, - /** - * 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 deleted file mode 100644 index 3cfb5edb5..000000000 --- a/packages/client-search/builds/worker.ts +++ /dev/null @@ -1,128 +0,0 @@ -// Code generated by 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 | undefined): SearchClient { - if (!appId || typeof appId !== 'string') { - throw new Error('`appId` is missing.'); - } - - if (!apiKey || typeof apiKey !== 'string') { - throw new Error('`apiKey` is missing.'); - } - - const { compression: _compression, ...workerOptions } = options || {}; - - return { - ...createSearchClient({ - appId, - apiKey, - timeouts: { - connect: 2000, - read: 5000, - write: 30000, - }, - logger: createNullLogger(), - requester: createFetchRequester(), - algoliaAgents: [{ segment: 'Worker' }], - requestIdChannel: 'queryParameters', - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - ...workerOptions, - }), - /** - * 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 deleted file mode 100644 index e81a1cd3e..000000000 --- a/packages/client-search/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/node'; diff --git a/packages/client-search/index.js b/packages/client-search/index.js index 21e26aad3..eebe74cb4 100644 --- a/packages/client-search/index.js +++ b/packages/client-search/index.js @@ -1 +1,2 @@ -module.exports = require('./dist/builds/node.cjs'); +// eslint-disable-next-line functional/immutable-data, import/no-commonjs +module.exports = require('./dist/client-search.cjs.js'); diff --git a/packages/client-search/model/acl.ts b/packages/client-search/model/acl.ts deleted file mode 100644 index 6e8d01b27..000000000 --- a/packages/client-search/model/acl.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Code generated by 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' - | 'nluWriteProject' - | 'nluReadProject' - | 'nluWriteEntity' - | 'nluReadEntity' - | 'nluWriteIntent' - | 'nluReadIntent' - | 'nluPrediction' - | 'nluReadAnswers'; diff --git a/packages/client-search/model/action.ts b/packages/client-search/model/action.ts deleted file mode 100644 index c560b65d1..000000000 --- a/packages/client-search/model/action.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 indexing operation to perform: - `addObject`: adds records to an index. Equivalent to the \"Add a new record (with auto-generated object ID)\" operation. - `updateObject`: adds or replaces records in an index. Equivalent to the \"Add or replace a record\" operation. - `partialUpdateObject`: adds or updates attributes within records. Equivalent to the \"Add or update attributes\" operation with the `createIfNoExists` parameter set to true. (If a record with the specified `objectID` doesn\'t exist in the specified index, this action creates adds the record to the index) - `partialUpdateObjectNoCreate`: same as `partialUpdateObject`, but with `createIfNoExists` set to false. (A record isn\'t added to the index if its `objectID` doesn\'t exist) - `deleteObject`: delete records from an index. Equivalent to the \"Delete a record\" operation. - `delete`. Delete an index. Equivalent to the \"Delete an index\" operation. - `clear`: delete all records from an index. Equivalent to the \"Delete all records from an index 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 deleted file mode 100644 index 8a553fb3d..000000000 --- a/packages/client-search/model/addApiKeyResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 61e577d48..000000000 --- a/packages/client-search/model/advancedSyntaxFeatures.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index b4d50c7a5..000000000 --- a/packages/client-search/model/alternativesAsExact.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 9effad076..000000000 --- a/packages/client-search/model/anchoring.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 76fe812bd..000000000 --- a/packages/client-search/model/apiKey.ts +++ /dev/null @@ -1,48 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - /** - * Maximum number of results this API key can retrieve in one query. By default, there\'s no limit. - */ - maxHitsPerQuery?: number | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Duration (in seconds) after which the API key expires. By default, API keys don\'t expire. - */ - validity?: number | undefined; -}; diff --git a/packages/client-search/model/apiKeyOperation.ts b/packages/client-search/model/apiKeyOperation.ts deleted file mode 100644 index 736b63c66..000000000 --- a/packages/client-search/model/apiKeyOperation.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 79ff0cd59..000000000 --- a/packages/client-search/model/aroundPrecision.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 8198f1e75..000000000 --- a/packages/client-search/model/aroundRadius.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index e5f107060..000000000 --- a/packages/client-search/model/aroundRadiusAll.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index bb747ca34..000000000 --- a/packages/client-search/model/assignUserIdParams.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index f563075c0..000000000 --- a/packages/client-search/model/attributeToUpdate.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (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/autoFilteringFilterEntry.ts b/packages/client-search/model/autoFilteringFilterEntry.ts deleted file mode 100644 index 1a514ca6d..000000000 --- a/packages/client-search/model/autoFilteringFilterEntry.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 AutoFilteringFilterEntry = string | Array; diff --git a/packages/client-search/model/autoFilteringResult.ts b/packages/client-search/model/autoFilteringResult.ts deleted file mode 100644 index 09bea7eda..000000000 --- a/packages/client-search/model/autoFilteringResult.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AutoFilteringFilterEntry } from './autoFilteringFilterEntry'; - -/** - * Result of automatic filtering applied by Query Categorization. - */ -export type AutoFilteringResult = { - /** - * Whether automatic filtering was applied to this query. - */ - enabled?: boolean | undefined; - - /** - * Maximum category hierarchy depth used for filtering. - */ - maxDepth?: number | undefined; - - /** - * Facet filters automatically applied to the query. - */ - facetFilters?: Array | undefined; - - /** - * Optional filters automatically applied to boost relevant categories. - */ - optionalFilters?: Array | undefined; -}; diff --git a/packages/client-search/model/automaticFacetFilter.ts b/packages/client-search/model/automaticFacetFilter.ts deleted file mode 100644 index 9162f0ff7..000000000 --- a/packages/client-search/model/automaticFacetFilter.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Whether the filter is disjunctive or conjunctive. If true the filter has multiple matches, multiple occurrences are combined with the logical `OR` operation. If false, multiple occurrences are combined with the logical `AND` operation. - */ - disjunctive?: boolean | undefined; -}; diff --git a/packages/client-search/model/automaticFacetFilters.ts b/packages/client-search/model/automaticFacetFilters.ts deleted file mode 100644 index 6fdc07bc7..000000000 --- a/packages/client-search/model/automaticFacetFilters.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 8eaa250e7..000000000 --- a/packages/client-search/model/banner.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - link?: BannerLink | undefined; -}; diff --git a/packages/client-search/model/bannerImage.ts b/packages/client-search/model/bannerImage.ts deleted file mode 100644 index a41d758ff..000000000 --- a/packages/client-search/model/bannerImage.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - title?: string | undefined; -}; diff --git a/packages/client-search/model/bannerImageUrl.ts b/packages/client-search/model/bannerImageUrl.ts deleted file mode 100644 index 25454a0b9..000000000 --- a/packages/client-search/model/bannerImageUrl.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-search/model/bannerLink.ts b/packages/client-search/model/bannerLink.ts deleted file mode 100644 index a9161c475..000000000 --- a/packages/client-search/model/bannerLink.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-search/model/baseGetApiKeyResponse.ts b/packages/client-search/model/baseGetApiKeyResponse.ts deleted file mode 100644 index 55547ef1e..000000000 --- a/packages/client-search/model/baseGetApiKeyResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index e5f1d2d96..000000000 --- a/packages/client-search/model/baseIndexSettings.ts +++ /dev/null @@ -1,105 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Attributes for which to split [camel case](https://wikipedia.org/wiki/Camel_case) words. Attribute names are case-sensitive. - */ - camelCaseAttributes?: Array | undefined; - - /** - * 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 | undefined; - - /** - * Languages for language-specific processing steps, such as word detection and dictionary settings. **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 | undefined; - - /** - * 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 | undefined; - - /** - * Whether arrays with exclusively non-negative integers should be compressed for better performance. If true, the compressed arrays may be reordered. - */ - allowCompressionOfIntegerArray?: boolean | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * An object with custom data. You can store up to 32kB as custom data. - */ - userData?: any | null | undefined; - - /** - * 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 } } | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/client-search/model/baseSearchParams.ts b/packages/client-search/model/baseSearchParams.ts deleted file mode 100644 index 030809e05..000000000 --- a/packages/client-search/model/baseSearchParams.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index bd4e1b55f..000000000 --- a/packages/client-search/model/baseSearchParamsWithoutQuery.ts +++ /dev/null @@ -1,146 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 if the facet attribute name or facet value contains 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 | undefined; - - facetFilters?: FacetFilters | undefined; - - optionalFilters?: OptionalFilters | undefined; - - numericFilters?: NumericFilters | undefined; - - tagFilters?: TagFilters | undefined; - - /** - * 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 | undefined; - - /** - * Restricts a search to a subset of your searchable attributes. Attribute names are case-sensitive. - */ - restrictSearchableAttributes?: Array | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Page of search results to retrieve. - */ - page?: number | undefined; - - /** - * Position of the first hit to retrieve. - */ - offset?: number | undefined; - - /** - * Number of hits to retrieve (used in combination with `offset`). - */ - length?: number | undefined; - - /** - * 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 | undefined; - - /** - * Whether to obtain the coordinates from the request\'s IP address. - */ - aroundLatLngViaIP?: boolean | undefined; - - aroundRadius?: AroundRadius | undefined; - - aroundPrecision?: AroundPrecision | undefined; - - /** - * Minimum radius (in meters) for a search around a location when `aroundRadius` isn\'t set. - */ - minimumAroundRadius?: number | undefined; - - insideBoundingBox?: InsideBoundingBox | null | undefined; - - /** - * 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> | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Whether the search response should include detailed ranking information. - */ - getRankingInfo?: boolean | undefined; - - /** - * Whether to take into account an index\'s synonyms for this search. - */ - synonyms?: boolean | undefined; - - /** - * 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/doc/guides/sending-events/getting-started). - */ - clickAnalytics?: boolean | undefined; - - /** - * Whether this search will be included in Analytics. - */ - analytics?: boolean | undefined; - - /** - * Tags to apply to the query for [segmenting analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments). - */ - analyticsTags?: Array | undefined; - - /** - * Whether to include this search when calculating processing-time percentiles. - */ - percentileComputation?: boolean | undefined; - - /** - * Whether to enable A/B testing for this search. - */ - enableABTest?: boolean | undefined; -}; diff --git a/packages/client-search/model/baseSearchResponse.ts b/packages/client-search/model/baseSearchResponse.ts deleted file mode 100644 index b6598e49a..000000000 --- a/packages/client-search/model/baseSearchResponse.ts +++ /dev/null @@ -1,129 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Variant ID. This is only included in the response for indices that are part of an A/B test. - */ - abTestVariantID?: number | undefined; - - /** - * Computed geographical location. - */ - aroundLatLng?: string | undefined; - - /** - * Distance from a central coordinate provided by `aroundLatLng`. - */ - automaticRadius?: string | undefined; - - exhaustive?: Exhaustive | undefined; - - /** - * Rules applied to the query. - */ - appliedRules?: Array> | undefined; - - /** - * See the `facetsCount` field of the `exhaustive` object in the response. - */ - exhaustiveFacetsCount?: boolean | undefined; - - /** - * See the `nbHits` field of the `exhaustive` object in the response. - */ - exhaustiveNbHits?: boolean | undefined; - - /** - * See the `typo` field of the `exhaustive` object in the response. - */ - exhaustiveTypo?: boolean | undefined; - - /** - * Facet counts. - */ - facets?: { [key: string]: { [key: string]: number } } | undefined; - - /** - * Statistics for numerical facets. - */ - facets_stats?: { [key: string]: FacetStats } | undefined; - - /** - * Index name used for the query. - */ - index?: string | undefined; - - /** - * Index name used for the query. During A/B testing, the targeted index isn\'t always the index used by the query. - */ - indexUsed?: string | undefined; - - /** - * Warnings about the query. - */ - message?: string | undefined; - - /** - * Number of hits selected and sorted by the relevant sort algorithm. - */ - nbSortedHits?: number | undefined; - - /** - * 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 | undefined; - - /** - * Time the server took to process the request, in milliseconds. - */ - processingTimeMS?: number | undefined; - - /** - * Experimental. List of processing steps and their times, in milliseconds. You can use this list to investigate performance issues. - */ - processingTimingsMS?: Record | undefined; - - /** - * Markup text indicating which parts of the original query have been removed to retrieve a non-empty result set. - */ - queryAfterRemoval?: string | undefined; - - redirect?: Redirect | undefined; - - renderingContent?: RenderingContent | undefined; - - /** - * Time the server took to process the request, in milliseconds. - */ - serverTimeMS?: number | undefined; - - /** - * Host name of the server that processed the request. - */ - serverUsed?: string | undefined; - - /** - * An object with custom data. You can store up to 32kB as custom data. - */ - userData?: any | null | undefined; - - /** - * Unique identifier for the query. This is used for [click analytics](https://www.algolia.com/doc/guides/analytics/click-analytics). - */ - queryID?: string | undefined; - - /** - * Whether automatic events collection is enabled for the application. - */ - _automaticInsights?: boolean | undefined; -}; diff --git a/packages/client-search/model/batchAssignUserIdsParams.ts b/packages/client-search/model/batchAssignUserIdsParams.ts deleted file mode 100644 index e5a4a4dc5..000000000 --- a/packages/client-search/model/batchAssignUserIdsParams.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index ea9275bb4..000000000 --- a/packages/client-search/model/batchDictionaryEntriesParams.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 deleted file mode 100644 index 3865eed17..000000000 --- a/packages/client-search/model/batchDictionaryEntriesRequest.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 9ab9e4a92..000000000 --- a/packages/client-search/model/batchParams.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index cea7356ab..000000000 --- a/packages/client-search/model/batchRequest.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 509e67fef..000000000 --- a/packages/client-search/model/batchResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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](https://www.algolia.com/doc/rest-api/search/get-task) and this task ID. - */ - taskID: number; - - /** - * Unique record identifiers. - */ - objectIDs: Array; -}; diff --git a/packages/client-search/model/batchWriteParams.ts b/packages/client-search/model/batchWriteParams.ts deleted file mode 100644 index f2b2b8f8f..000000000 --- a/packages/client-search/model/batchWriteParams.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 4cf1fb196..000000000 --- a/packages/client-search/model/booleanString.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index abc6b8c81..000000000 --- a/packages/client-search/model/browsePagination.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Number of results (hits). - */ - nbHits?: number | undefined; - - /** - * Number of pages of results. - */ - nbPages?: number | undefined; - - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; -}; diff --git a/packages/client-search/model/browseParams.ts b/packages/client-search/model/browseParams.ts deleted file mode 100644 index 17fca0b52..000000000 --- a/packages/client-search/model/browseParams.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 = BrowseParamsObject | SearchParamsString; diff --git a/packages/client-search/model/browseParamsObject.ts b/packages/client-search/model/browseParamsObject.ts deleted file mode 100644 index 340270dcf..000000000 --- a/packages/client-search/model/browseParamsObject.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index b1bd5513c..000000000 --- a/packages/client-search/model/browseResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a0e14ee19..000000000 --- a/packages/client-search/model/builtInOperation.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 96236eb10..000000000 --- a/packages/client-search/model/builtInOperationType.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index b082f173d..000000000 --- a/packages/client-search/model/builtInOperationValue.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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/categoryPrediction.ts b/packages/client-search/model/categoryPrediction.ts deleted file mode 100644 index 181cfb2d9..000000000 --- a/packages/client-search/model/categoryPrediction.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { CategoryPredictionBin } from './categoryPredictionBin'; -import type { HierarchyPathEntry } from './hierarchyPathEntry'; - -export type CategoryPrediction = { - bin?: CategoryPredictionBin | undefined; - - /** - * Ordered list of category levels from root to the predicted category. - */ - hierarchyPath?: Array | undefined; -}; diff --git a/packages/client-search/model/categoryPredictionBin.ts b/packages/client-search/model/categoryPredictionBin.ts deleted file mode 100644 index 6adb03208..000000000 --- a/packages/client-search/model/categoryPredictionBin.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Confidence level of the category prediction. - */ -export type CategoryPredictionBin = 'certain' | 'very high' | 'high' | 'low' | 'very low'; diff --git a/packages/client-search/model/clientMethodProps.ts b/packages/client-search/model/clientMethodProps.ts deleted file mode 100644 index 894e74c04..000000000 --- a/packages/client-search/model/clientMethodProps.ts +++ /dev/null @@ -1,899 +0,0 @@ -// Code generated by OpenAPI Generator (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 { ChunkedHelperOptions, 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: T; -}; - -/** - * 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 | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * Properties for the `customDelete` method. - */ -export type CustomDeleteProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customGet` method. - */ -export type CustomGetProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customPost` method. - */ -export type CustomPostProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `customPut` method. - */ -export type CustomPutProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * Maximum number of entries to retrieve. - */ - length?: number | undefined; - /** - * Index for which to retrieve log entries. By default, log entries are retrieved for all indices. - */ - indexName?: string | undefined; - /** - * Type of log entries to retrieve. By default, all log entries are retrieved. - */ - type?: LogType | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * 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; - /** - * When set to 2, the endpoint will not include `synonyms` in the response. This parameter is here for backward compatibility. - */ - getVersion?: number | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * Properties for the `listIndices` method. - */ -export type ListIndicesProps = { - /** - * Requested page of the API response. If `null`, the API response is not paginated. - */ - page?: number | undefined; - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; -}; - -/** - * Properties for the `listUserIds` method. - */ -export type ListUserIdsProps = { - /** - * Requested page of the API response. If `null`, the API response is not paginated. - */ - page?: number | undefined; - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * 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: T; -}; - -/** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * Whether existing rules should be deleted before adding this batch. - */ - clearExistingRules?: boolean | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * 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 | undefined; - /** - * Whether to replace all synonyms in the index with the ones sent with this request. - */ - replaceExistingSynonyms?: boolean | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * Properties for the `searchRules` method. - */ -export type SearchRulesProps = { - /** - * Name of the index on which to perform the operation. - */ - indexName: string; - searchRulesParams?: SearchRulesParams | undefined; -}; - -/** - * Properties for the `searchSingleIndex` method. - */ -export type SearchSingleIndexProps = { - /** - * Name of the index on which to perform the operation. - */ - indexName: string; - searchParams?: SearchParams | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * 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. 100 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 | undefined; -}; - -export type GetSecuredApiKeyRemainingValidityOptions = { - /** - * The secured API key generated with the `generateSecuredApiKey` method. - */ - securedApiKey: string; -}; - -export type SearchClientNodeHelpers = { - accountCopyIndex: (opts: AccountCopyIndexOptions) => Promise; - generateSecuredApiKey: (opts: GenerateSecuredApiKeyOptions) => string; - getSecuredApiKeyRemainingValidity: (opts: GetSecuredApiKeyRemainingValidityOptions) => number; -}; - -export type DeleteObjectsOptions = Pick & - ChunkedHelperOptions & { - /** - * The objectIDs to delete. - */ - objectIDs: string[]; - }; - -export type PartialUpdateObjectsOptions = Pick< - ChunkedBatchOptions, - 'indexName' | 'objects' | 'waitForTasks' | 'batchSize' -> & - ChunkedHelperOptions & { - /** - *To be provided if non-existing objects are passed, otherwise, the call will fail. - */ - createIfNotExists?: boolean | undefined; - }; - -export type SaveObjectsOptions = Pick & - ChunkedHelperOptions; - -export type ChunkedBatchOptions = ReplaceAllObjectsOptions & { - /** - * The `batch` `action` to perform on the given array of `objects`, defaults to `addObject`. - */ - action?: Action | undefined; - - /** - * 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 | undefined; -}; - -export type ReplaceAllObjectsOptions = ChunkedHelperOptions & { - /** - * 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 | undefined; - - /** - * The `scopes` to keep from the index. Defaults to ['settings', 'rules', 'synonyms']. - */ - scopes?: Array | undefined; -}; - -export type AccountCopyIndexOptions = ChunkedHelperOptions & { - /** - * The name of the index to copy to the `destinationClient`. - */ - sourceIndexName: string; - - /** - * The application ID to write the index to. - */ - destinationAppID: string; - - /** - * The API Key of the `destinationAppID` to write the index to, must have write ACLs. - */ - destinationApiKey: string; - - /** - * The name of the index to write the copy in. - */ - destinationIndexName: string; - - /** - * The size of the chunk of `objects`. Defaults to 1000. - */ - batchSize?: number | undefined; -}; diff --git a/packages/client-search/model/condition.ts b/packages/client-search/model/condition.ts deleted file mode 100644 index fd7b06190..000000000 --- a/packages/client-search/model/condition.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - anchoring?: Anchoring | undefined; - - /** - * Whether the pattern should match plurals, synonyms, and typos. - */ - alternatives?: boolean | undefined; - - /** - * 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 | undefined; - - /** - * Filters that trigger the rule. You can 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. You can\'t combine multiple filters with `OR` and you can\'t use numeric filters. - */ - filters?: string | undefined; -}; diff --git a/packages/client-search/model/consequence.ts b/packages/client-search/model/consequence.ts deleted file mode 100644 index 27f006f8f..000000000 --- a/packages/client-search/model/consequence.ts +++ /dev/null @@ -1,35 +0,0 @@ -// Code generated by OpenAPI Generator (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 { ConsequenceRedirect } from './consequenceRedirect'; -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 | undefined; - - /** - * 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 | undefined; - - /** - * Determines whether promoted records must also match active filters for the consequence to apply. This ensures user-applied filters take priority and irrelevant matches aren\'t shown. For example, if you promote a record with `color: red` but the user filters for `color: blue`, the \"red\" record won\'t be shown. > In the Algolia dashboard, when you use the **Pin an item** consequence, `filterPromotes` appears as the checkbox: **Pinned items must match active filters to be displayed.** For examples, see [Promote results with rules](https://www.algolia.com/doc/guides/managing-results/rules/merchandising-and-promoting/how-to/promote-hits/#promote-results-matching-active-filters). - */ - filterPromotes?: boolean | undefined; - - /** - * Records you want to hide from the search results. - */ - hide?: Array | undefined; - - redirect?: ConsequenceRedirect | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/client-search/model/consequenceHide.ts b/packages/client-search/model/consequenceHide.ts deleted file mode 100644 index 9ef5cf251..000000000 --- a/packages/client-search/model/consequenceHide.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 94b26e7fc..000000000 --- a/packages/client-search/model/consequenceParams.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 28d8722a3..000000000 --- a/packages/client-search/model/consequenceQuery.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 530522544..000000000 --- a/packages/client-search/model/consequenceQueryObject.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Changes to make to the search query. - */ - edits?: Array | undefined; -}; diff --git a/packages/client-search/model/consequenceRedirect.ts b/packages/client-search/model/consequenceRedirect.ts deleted file mode 100644 index e61c4af9e..000000000 --- a/packages/client-search/model/consequenceRedirect.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 to a virtual replica index. This consequence is only valid for rules with `scope: redirect`. - */ -export type ConsequenceRedirect = { - /** - * Name of the virtual replica index to redirect searches to. - */ - indexName: string; -}; diff --git a/packages/client-search/model/createdAtResponse.ts b/packages/client-search/model/createdAtResponse.ts deleted file mode 100644 index aff26e53b..000000000 --- a/packages/client-search/model/createdAtResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 8bc863a92..000000000 --- a/packages/client-search/model/cursor.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-search/model/deleteApiKeyResponse.ts b/packages/client-search/model/deleteApiKeyResponse.ts deleted file mode 100644 index 848689302..000000000 --- a/packages/client-search/model/deleteApiKeyResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index f2a37988f..000000000 --- a/packages/client-search/model/deleteByParams.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 if the facet attribute name or facet value contains 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 | undefined; - - numericFilters?: NumericFilters | undefined; - - tagFilters?: TagFilters | undefined; - - /** - * 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 | undefined; - - aroundRadius?: AroundRadius | undefined; - - insideBoundingBox?: InsideBoundingBox | null | undefined; - - /** - * 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> | undefined; -}; diff --git a/packages/client-search/model/deleteSourceResponse.ts b/packages/client-search/model/deleteSourceResponse.ts deleted file mode 100644 index 1bf596c2b..000000000 --- a/packages/client-search/model/deleteSourceResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 4724e305c..000000000 --- a/packages/client-search/model/deletedAtResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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](https://www.algolia.com/doc/rest-api/search/get-task) and this task ID. - */ - 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 deleted file mode 100644 index 988a9213d..000000000 --- a/packages/client-search/model/dictionaryAction.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 0c16d5840..000000000 --- a/packages/client-search/model/dictionaryEntry.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Matching dictionary word for `stopwords` and `compounds` dictionaries. - */ - word?: string | undefined; - - /** - * Matching words in the `plurals` dictionary including declensions. - */ - words?: Array | undefined; - - /** - * Invividual components of a compound word in the `compounds` dictionary. - */ - decomposition?: Array | undefined; - - state?: DictionaryEntryState | undefined; - - type?: DictionaryEntryType | undefined; -}; diff --git a/packages/client-search/model/dictionaryEntryState.ts b/packages/client-search/model/dictionaryEntryState.ts deleted file mode 100644 index 5355d2e0b..000000000 --- a/packages/client-search/model/dictionaryEntryState.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index f3f97e15b..000000000 --- a/packages/client-search/model/dictionaryEntryType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index b5244955c..000000000 --- a/packages/client-search/model/dictionaryLanguage.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-search/model/dictionarySettingsParams.ts b/packages/client-search/model/dictionarySettingsParams.ts deleted file mode 100644 index 053d5e85d..000000000 --- a/packages/client-search/model/dictionarySettingsParams.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 7b3e1fcf0..000000000 --- a/packages/client-search/model/dictionaryType.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index dc87dfb00..000000000 --- a/packages/client-search/model/distinct.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index d881cd0cf..000000000 --- a/packages/client-search/model/edit.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Text or patterns to remove from the query string. - */ - delete?: string | undefined; - - /** - * Text to be added in place of the deleted text inside the query string. - */ - insert?: string | undefined; -}; diff --git a/packages/client-search/model/editType.ts b/packages/client-search/model/editType.ts deleted file mode 100644 index 27ed9b621..000000000 --- a/packages/client-search/model/editType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index f31be6046..000000000 --- a/packages/client-search/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-search/model/event.ts b/packages/client-search/model/event.ts deleted file mode 100644 index a2366f6f2..000000000 --- a/packages/client-search/model/event.ts +++ /dev/null @@ -1,35 +0,0 @@ -// Code generated by OpenAPI Generator (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 | null; - - type: EventType; - - /** - * The extracted record batch size. - */ - batchSize: number; - - data?: { [key: string]: any } | null | undefined; - - /** - * Date and time when the resource was published, in RFC 3339 format. - */ - publishedAt: string; -}; diff --git a/packages/client-search/model/eventStatus.ts b/packages/client-search/model/eventStatus.ts deleted file mode 100644 index 16fb14c85..000000000 --- a/packages/client-search/model/eventStatus.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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/client-search/model/eventType.ts b/packages/client-search/model/eventType.ts deleted file mode 100644 index 1be6a0e70..000000000 --- a/packages/client-search/model/eventType.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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/client-search/model/exactOnSingleWordQuery.ts b/packages/client-search/model/exactOnSingleWordQuery.ts deleted file mode 100644 index d01b358f6..000000000 --- a/packages/client-search/model/exactOnSingleWordQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index c528c89bc..000000000 --- a/packages/client-search/model/exhaustive.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Code generated by 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/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate). - */ - facetsCount?: boolean | undefined; - - /** - * The value is `false` if not all facet values are retrieved. - */ - facetValues?: boolean | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/client-search/model/facetFilters.ts b/packages/client-search/model/facetFilters.ts deleted file mode 100644 index 0dc5e336e..000000000 --- a/packages/client-search/model/facetFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 5b8f092aa..000000000 --- a/packages/client-search/model/facetHits.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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/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 deleted file mode 100644 index b61d8076c..000000000 --- a/packages/client-search/model/facetOrdering.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Order of facet values. One object for each facet. - */ - values?: { [key: string]: Value } | undefined; -}; diff --git a/packages/client-search/model/facetStats.ts b/packages/client-search/model/facetStats.ts deleted file mode 100644 index 706a459a2..000000000 --- a/packages/client-search/model/facetStats.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Maximum value in the results. - */ - max?: number | undefined; - - /** - * Average facet value in the results. - */ - avg?: number | undefined; - - /** - * Sum of all values in the results. - */ - sum?: number | undefined; -}; diff --git a/packages/client-search/model/facets.ts b/packages/client-search/model/facets.ts deleted file mode 100644 index 4ce08ae92..000000000 --- a/packages/client-search/model/facets.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-search/model/fetchedIndex.ts b/packages/client-search/model/fetchedIndex.ts deleted file mode 100644 index 437c0671a..000000000 --- a/packages/client-search/model/fetchedIndex.ts +++ /dev/null @@ -1,72 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { FetchedIndexAbTest } from './fetchedIndexAbTest'; - -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 | undefined; - - /** - * Only present if the index is a primary index with replicas. Contains the names of all linked replicas. - */ - replicas?: Array | undefined; - - /** - * 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 | undefined; - - abTest?: FetchedIndexAbTest | undefined; - - /** - * Name of the index that owns the A/B test configuration. Only present when this index participates in an A/B test configured on another index. - */ - sourceABTest?: string | undefined; -}; diff --git a/packages/client-search/model/fetchedIndexAbTest.ts b/packages/client-search/model/fetchedIndexAbTest.ts deleted file mode 100644 index 45a83e541..000000000 --- a/packages/client-search/model/fetchedIndexAbTest.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { FetchedIndexAbTestTarget } from './fetchedIndexAbTestTarget'; -import type { FetchedIndexAbTestVariant } from './fetchedIndexAbTestVariant'; - -/** - * A/B test metadata. Only present if the index is part of an active A/B test. - */ -export type FetchedIndexAbTest = { - /** - * A/B test ID. - */ - id: number; - - /** - * A/B test schema version. Only present for v2 and later tests. - */ - version?: number | undefined; - - /** - * A/B test type. Only present for v2 and later tests. Currently always `index-configuration`. - */ - type?: string | undefined; - - target?: FetchedIndexAbTestTarget | undefined; - - /** - * A/B test variants. - */ - variants: Array; -}; diff --git a/packages/client-search/model/fetchedIndexAbTestTarget.ts b/packages/client-search/model/fetchedIndexAbTestTarget.ts deleted file mode 100644 index 8d543cc81..000000000 --- a/packages/client-search/model/fetchedIndexAbTestTarget.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 target criteria. Only present for v2 and later tests. - */ -export type FetchedIndexAbTestTarget = { - /** - * Index name to match. Use `*` to target the entire application. - */ - indexName: string; -}; diff --git a/packages/client-search/model/fetchedIndexAbTestVariant.ts b/packages/client-search/model/fetchedIndexAbTestVariant.ts deleted file mode 100644 index 874135cdc..000000000 --- a/packages/client-search/model/fetchedIndexAbTestVariant.ts +++ /dev/null @@ -1,26 +0,0 @@ -// Code generated by 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 variant for an index. - */ -export type FetchedIndexAbTestVariant = { - /** - * Index name of the variant. Only present for v0/v1 tests; in v2 this moves into `payload`. - */ - indexName?: string | undefined; - - /** - * Percentage of search traffic routed to this variant. - */ - percentage: number; - - /** - * URL-encoded custom search parameters applied to this variant. Only present for v0/v1 tests; in v2 this moves into `payload`. - */ - customSearchParameters?: string | undefined; - - /** - * Type-specific configuration. Only present for v2 and later tests. Shape depends on the parent A/B test\'s `type`. - */ - payload?: { [key: string]: any } | undefined; -}; diff --git a/packages/client-search/model/getApiKeyResponse.ts b/packages/client-search/model/getApiKeyResponse.ts deleted file mode 100644 index f88d1005d..000000000 --- a/packages/client-search/model/getApiKeyResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index fcd0a145a..000000000 --- a/packages/client-search/model/getDictionarySettingsResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index eb2e90c6e..000000000 --- a/packages/client-search/model/getLogsResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 637737cf1..000000000 --- a/packages/client-search/model/getObjectsParams.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 5c9cd94d8..000000000 --- a/packages/client-search/model/getObjectsRequest.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * 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 deleted file mode 100644 index 33a6144c3..000000000 --- a/packages/client-search/model/getObjectsResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Retrieved records. - */ - results: (T | null)[]; -}; diff --git a/packages/client-search/model/getTaskResponse.ts b/packages/client-search/model/getTaskResponse.ts deleted file mode 100644 index b8a4c6b85..000000000 --- a/packages/client-search/model/getTaskResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 8af7dc18c..000000000 --- a/packages/client-search/model/getTopUserIdsResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a068e0aea..000000000 --- a/packages/client-search/model/hasPendingMappingsResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 } | undefined; -}; diff --git a/packages/client-search/model/hierarchyPathEntry.ts b/packages/client-search/model/hierarchyPathEntry.ts deleted file mode 100644 index 6823eac4d..000000000 --- a/packages/client-search/model/hierarchyPathEntry.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 HierarchyPathEntry = { - /** - * Facet attribute name at this hierarchy level, for example, `categories.lvl0`. - */ - facetName?: string | undefined; - - /** - * Facet value at this level of the category hierarchy. - */ - facetValue?: string | undefined; - - /** - * Depth level in the category hierarchy, starting at 0. - */ - depth?: number | undefined; -}; diff --git a/packages/client-search/model/highlightResult.ts b/packages/client-search/model/highlightResult.ts deleted file mode 100644 index 102271a17..000000000 --- a/packages/client-search/model/highlightResult.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 8c7a4b532..000000000 --- a/packages/client-search/model/highlightResultOption.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/client-search/model/hit.ts b/packages/client-search/model/hit.ts deleted file mode 100644 index 5104780e9..000000000 --- a/packages/client-search/model/hit.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Code generated by OpenAPI Generator (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 } | undefined; - - /** - * Snippets that show the context around a matching search query. - */ - _snippetResult?: { [key: string]: SnippetResult } | undefined; - - _rankingInfo?: RankingInfo | undefined; - - _distinctSeqID?: number | undefined; -}; diff --git a/packages/client-search/model/ignorePlurals.ts b/packages/client-search/model/ignorePlurals.ts deleted file mode 100644 index 2eef62270..000000000 --- a/packages/client-search/model/ignorePlurals.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (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. 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 deleted file mode 100644 index f370ccbfb..000000000 --- a/packages/client-search/model/index.ts +++ /dev/null @@ -1,203 +0,0 @@ -// Code generated by 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 './autoFilteringFilterEntry'; -export * from './autoFilteringResult'; -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 './categoryPrediction'; -export * from './categoryPredictionBin'; -export * from './clientMethodProps'; -export * from './condition'; -export * from './consequence'; -export * from './consequenceHide'; -export * from './consequenceParams'; -export * from './consequenceQuery'; -export * from './consequenceQueryObject'; -export * from './consequenceRedirect'; -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 './event'; -export * from './eventStatus'; -export * from './eventType'; -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 './fetchedIndexAbTest'; -export * from './fetchedIndexAbTestTarget'; -export * from './fetchedIndexAbTestVariant'; -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 './hierarchyPathEntry'; -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 './queryCategorization'; -export * from './queryCategorizationType'; -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 './replaceAllObjectsWithTransformationResponse'; -export * from './replaceSourceResponse'; -export * from './reRankingApplyFilter'; -export * from './responseExtensions'; -export * from './rule'; -export * from './saveObjectResponse'; -export * from './saveSynonymResponse'; -export * from './scopeType'; -export * from './searchDictionaryEntriesParams'; -export * from './searchDictionaryEntriesResponse'; -export * from './searchExtensions'; -export * from './searchExtensionsQueryCategorization'; -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 './searchResponsePartial'; -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 './watchResponse'; -export * from './widgets'; -export * from './withPrimary'; diff --git a/packages/client-search/model/indexSettings.ts b/packages/client-search/model/indexSettings.ts deleted file mode 100644 index 7f2e9acde..000000000 --- a/packages/client-search/model/indexSettings.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 1261f9c89..000000000 --- a/packages/client-search/model/indexSettingsAsSearchParams.ts +++ /dev/null @@ -1,188 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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, 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * HTML tag to insert before the highlighted parts in all highlighted results and snippets. - */ - highlightPreTag?: string | undefined; - - /** - * HTML tag to insert after the highlighted parts in all highlighted results and snippets. - */ - highlightPostTag?: string | undefined; - - /** - * String used as an ellipsis indicator when a snippet is truncated. - */ - snippetEllipsisText?: string | undefined; - - /** - * 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 | undefined; - - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - typoTolerance?: TypoTolerance | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - ignorePlurals?: IgnorePlurals | undefined; - - removeStopWords?: RemoveStopWords | undefined; - - /** - * 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, place the CJK language **first**. **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 | undefined; - - /** - * 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 | undefined; - - /** - * Whether to enable rules. - */ - enableRules?: boolean | undefined; - - /** - * Whether to enable Personalization. - */ - enablePersonalization?: boolean | undefined; - - queryType?: QueryType | undefined; - - removeWordsIfNoResults?: RemoveWordsIfNoResults | undefined; - - mode?: Mode | undefined; - - semanticSearch?: SemanticSearch | undefined; - - /** - * Whether to support phrase matching and excluding words from search queries Use the `advancedSyntaxFeatures` parameter to control which feature is supported. - */ - advancedSyntax?: boolean | undefined; - - optionalWords?: OptionalWords | null | undefined; - - /** - * 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 | undefined; - - exactOnSingleWordQuery?: ExactOnSingleWordQuery | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - distinct?: Distinct | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Maximum number of facet values to return for each facet. - */ - maxValuesPerFacet?: number | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - renderingContent?: RenderingContent | undefined; - - /** - * 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 | undefined; - - reRankingApplyFilter?: ReRankingApplyFilter | null | undefined; -}; diff --git a/packages/client-search/model/insideBoundingBox.ts b/packages/client-search/model/insideBoundingBox.ts deleted file mode 100644 index 8a498532f..000000000 --- a/packages/client-search/model/insideBoundingBox.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 879a847e8..000000000 --- a/packages/client-search/model/languages.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index e2f566a7e..000000000 --- a/packages/client-search/model/listApiKeysResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 98df77ba5..000000000 --- a/packages/client-search/model/listClustersResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 99d73c38b..000000000 --- a/packages/client-search/model/listIndicesResponse.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/client-search/model/listUserIdsResponse.ts b/packages/client-search/model/listUserIdsResponse.ts deleted file mode 100644 index 191aba967..000000000 --- a/packages/client-search/model/listUserIdsResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a4c1b6fd6..000000000 --- a/packages/client-search/model/log.ts +++ /dev/null @@ -1,80 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - /** - * Query parameters sent with the request. - */ - query_params?: string | undefined; - - /** - * Number of search results (hits) returned for the query. - */ - query_nb_hits?: string | undefined; - - /** - * Queries performed for the given request. - */ - inner_queries?: Array | undefined; -}; diff --git a/packages/client-search/model/logQuery.ts b/packages/client-search/model/logQuery.ts deleted file mode 100644 index f2d210557..000000000 --- a/packages/client-search/model/logQuery.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * A user identifier. - */ - user_token?: string | undefined; - - /** - * Unique query identifier. - */ - query_id?: string | undefined; -}; diff --git a/packages/client-search/model/logType.ts b/packages/client-search/model/logType.ts deleted file mode 100644 index cb913fade..000000000 --- a/packages/client-search/model/logType.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 2cb9f4d21..000000000 --- a/packages/client-search/model/matchLevel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index c0ec6611e..000000000 --- a/packages/client-search/model/matchedGeoLocation.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Longitude of the matched location. - */ - lng?: number | undefined; - - /** - * Distance between the matched location and the search location (in meters). - */ - distance?: number | undefined; -}; diff --git a/packages/client-search/model/mode.ts b/packages/client-search/model/mode.ts deleted file mode 100644 index 36561b89e..000000000 --- a/packages/client-search/model/mode.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 2aab7b56c..000000000 --- a/packages/client-search/model/multipleBatchRequest.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Index name (case-sensitive). - */ - indexName: string; -}; diff --git a/packages/client-search/model/multipleBatchResponse.ts b/packages/client-search/model/multipleBatchResponse.ts deleted file mode 100644 index 8cbecbbb3..000000000 --- a/packages/client-search/model/multipleBatchResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 6129dc5d3..000000000 --- a/packages/client-search/model/numericFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 6877ba70f..000000000 --- a/packages/client-search/model/operationIndexParams.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/client-search/model/operationType.ts b/packages/client-search/model/operationType.ts deleted file mode 100644 index 7706bfcae..000000000 --- a/packages/client-search/model/operationType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 965eef7be..000000000 --- a/packages/client-search/model/optionalFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 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. - On virtual replicas, optional filters are applied _after_ the replica\'s [relevant sort](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/relevant-sort). - */ -export type OptionalFilters = Array | string; diff --git a/packages/client-search/model/optionalWords.ts b/packages/client-search/model/optionalWords.ts deleted file mode 100644 index e2f58ed97..000000000 --- a/packages/client-search/model/optionalWords.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 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 optional, 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 fewer 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 2,000 need 2 matched words. - If `optionalWords` has 10 or more words, the required number of matched words increases by the number of optional words divided by 5 (rounded down). Example: with 18 optional words, results 1 to 1,000 require 1 matched word; results 1,001 to 2,000 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 deleted file mode 100644 index a92d00e00..000000000 --- a/packages/client-search/model/params.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - automaticFacetFilters?: AutomaticFacetFilters | undefined; - - automaticOptionalFacetFilters?: AutomaticFacetFilters | undefined; - - renderingContent?: RenderingContent | undefined; -}; diff --git a/packages/client-search/model/personalization.ts b/packages/client-search/model/personalization.ts deleted file mode 100644 index 2c91ff1ea..000000000 --- a/packages/client-search/model/personalization.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * The score of the ranking. - */ - rankingScore?: number | undefined; - - /** - * The score of the event. - */ - score?: number | undefined; -}; diff --git a/packages/client-search/model/promote.ts b/packages/client-search/model/promote.ts deleted file mode 100644 index c5dae881e..000000000 --- a/packages/client-search/model/promote.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 6e2f37992..000000000 --- a/packages/client-search/model/promoteObjectID.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index dbf27be6c..000000000 --- a/packages/client-search/model/promoteObjectIDs.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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/queryCategorization.ts b/packages/client-search/model/queryCategorization.ts deleted file mode 100644 index 0e374c5b2..000000000 --- a/packages/client-search/model/queryCategorization.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { AutoFilteringResult } from './autoFilteringResult'; -import type { CategoryPrediction } from './categoryPrediction'; -import type { QueryCategorizationType } from './queryCategorizationType'; - -/** - * Query Categorization prediction returned by the AI model. This field is empty when the model cannot categorize the query. See [Query Categorization](https://www.algolia.com/doc/guides/algolia-ai/query-categorization/). - */ -export type QueryCategorization = { - /** - * Processed and normalized version of the original search query. - */ - normalizedQuery?: string | undefined; - - /** - * Number of times this normalized query was observed during the training window. - */ - count?: number | undefined; - - type?: QueryCategorizationType | undefined; - - /** - * List of category predictions with confidence levels. - */ - categories?: Array | undefined; - - autofiltering?: AutoFilteringResult | undefined; -}; diff --git a/packages/client-search/model/queryCategorizationType.ts b/packages/client-search/model/queryCategorizationType.ts deleted file mode 100644 index be985940a..000000000 --- a/packages/client-search/model/queryCategorizationType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Classification of the query scope. - */ -export type QueryCategorizationType = 'narrow' | 'broad' | 'ambiguous' | 'none'; diff --git a/packages/client-search/model/queryType.ts b/packages/client-search/model/queryType.ts deleted file mode 100644 index 5c33be4a6..000000000 --- a/packages/client-search/model/queryType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index bbe8841d0..000000000 --- a/packages/client-search/model/range.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Upper boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. - */ - value?: number | undefined; -}; diff --git a/packages/client-search/model/rankingInfo.ts b/packages/client-search/model/rankingInfo.ts deleted file mode 100644 index 47a6e5a93..000000000 --- a/packages/client-search/model/rankingInfo.ts +++ /dev/null @@ -1,68 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - matchedGeoLocation?: MatchedGeoLocation | undefined; - - personalization?: Personalization | undefined; - - /** - * 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 | undefined; - - /** - * Number of words between multiple matches in the query plus 1. For single word queries, `proximityDistance` is 0. - */ - proximityDistance?: number | undefined; - - /** - * Overall ranking of the record, expressed as a single integer. This attribute is internal. - */ - userScore: number; - - /** - * Number of matched words. - */ - words?: number | undefined; - - /** - * Whether the record is re-ranked. - */ - promotedByReRanking?: boolean | undefined; -}; diff --git a/packages/client-search/model/reRankingApplyFilter.ts b/packages/client-search/model/reRankingApplyFilter.ts deleted file mode 100644 index 2cbcc86ef..000000000 --- a/packages/client-search/model/reRankingApplyFilter.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index dfa9312a3..000000000 --- a/packages/client-search/model/redirect.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/client-search/model/redirectRuleIndexData.ts b/packages/client-search/model/redirectRuleIndexData.ts deleted file mode 100644 index fbb7ea140..000000000 --- a/packages/client-search/model/redirectRuleIndexData.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 33802fc69..000000000 --- a/packages/client-search/model/redirectRuleIndexMetadata.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 58725edd4..000000000 --- a/packages/client-search/model/redirectURL.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-search/model/removeStopWords.ts b/packages/client-search/model/removeStopWords.ts deleted file mode 100644 index 0a467cb35..000000000 --- a/packages/client-search/model/removeStopWords.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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. 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 deleted file mode 100644 index f9aab707a..000000000 --- a/packages/client-search/model/removeUserIdResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 70e1aa5e7..000000000 --- a/packages/client-search/model/removeWordsIfNoResults.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index a10b97d74..000000000 --- a/packages/client-search/model/renderingContent.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - redirect?: RedirectURL | undefined; - - widgets?: Widgets | undefined; -}; diff --git a/packages/client-search/model/replaceAllObjectsResponse.ts b/packages/client-search/model/replaceAllObjectsResponse.ts deleted file mode 100644 index 43f5d4ab9..000000000 --- a/packages/client-search/model/replaceAllObjectsResponse.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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/replaceAllObjectsWithTransformationResponse.ts b/packages/client-search/model/replaceAllObjectsWithTransformationResponse.ts deleted file mode 100644 index 79989e960..000000000 --- a/packages/client-search/model/replaceAllObjectsWithTransformationResponse.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { UpdatedAtResponse } from './updatedAtResponse'; -import type { WatchResponse } from './watchResponse'; - -export type ReplaceAllObjectsWithTransformationResponse = { - copyOperationResponse: UpdatedAtResponse; - - /** - * The response of the `push` request(s). - */ - watchResponses: Array; - - moveOperationResponse: UpdatedAtResponse; -}; diff --git a/packages/client-search/model/replaceSourceResponse.ts b/packages/client-search/model/replaceSourceResponse.ts deleted file mode 100644 index 4569548aa..000000000 --- a/packages/client-search/model/replaceSourceResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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/responseExtensions.ts b/packages/client-search/model/responseExtensions.ts deleted file mode 100644 index a9c8de2f9..000000000 --- a/packages/client-search/model/responseExtensions.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { QueryCategorization } from './queryCategorization'; - -/** - * AI-generated metadata returned alongside search results. Present when Algolia AI features such as [Query Categorization](https://www.algolia.com/doc/guides/algolia-ai/query-categorization/) are enabled. - */ -export type ResponseExtensions = { - queryCategorization?: QueryCategorization | undefined; -}; diff --git a/packages/client-search/model/rule.ts b/packages/client-search/model/rule.ts deleted file mode 100644 index 37a8781b3..000000000 --- a/packages/client-search/model/rule.ts +++ /dev/null @@ -1,43 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - consequence: Consequence; - - /** - * Description of the rule\'s purpose to help you distinguish between different rules. - */ - description?: string | undefined; - - /** - * Whether the rule is active. - */ - enabled?: boolean | undefined; - - /** - * Time periods when the rule is active. - */ - validity?: Array | undefined; - - tags?: Array | undefined; - - scope?: string | undefined; - - condition?: Condition | undefined; -}; diff --git a/packages/client-search/model/saveObjectResponse.ts b/packages/client-search/model/saveObjectResponse.ts deleted file mode 100644 index 1e7eac1f2..000000000 --- a/packages/client-search/model/saveObjectResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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](https://www.algolia.com/doc/rest-api/search/get-task) and this task ID. - */ - taskID: number; - - /** - * Unique record identifier. - */ - objectID?: string | undefined; -}; diff --git a/packages/client-search/model/saveSynonymResponse.ts b/packages/client-search/model/saveSynonymResponse.ts deleted file mode 100644 index 7768b8007..000000000 --- a/packages/client-search/model/saveSynonymResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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](https://www.algolia.com/doc/rest-api/search/get-task) and this task ID. - */ - 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 deleted file mode 100644 index f4937cfef..000000000 --- a/packages/client-search/model/scopeType.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 7474c93a5..000000000 --- a/packages/client-search/model/searchDictionaryEntriesParams.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; - - language?: SupportedLanguage | undefined; -}; diff --git a/packages/client-search/model/searchDictionaryEntriesResponse.ts b/packages/client-search/model/searchDictionaryEntriesResponse.ts deleted file mode 100644 index 097efdd73..000000000 --- a/packages/client-search/model/searchDictionaryEntriesResponse.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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/searchExtensions.ts b/packages/client-search/model/searchExtensions.ts deleted file mode 100644 index fc8927976..000000000 --- a/packages/client-search/model/searchExtensions.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { SearchExtensionsQueryCategorization } from './searchExtensionsQueryCategorization'; - -/** - * Additional parameters for Algolia AI features. Used to enable [Query Categorization](https://www.algolia.com/doc/guides/algolia-ai/query-categorization/) and other AI-powered capabilities. - */ -export type SearchExtensions = { - queryCategorization?: SearchExtensionsQueryCategorization | undefined; -}; diff --git a/packages/client-search/model/searchExtensionsQueryCategorization.ts b/packages/client-search/model/searchExtensionsQueryCategorization.ts deleted file mode 100644 index 337190faa..000000000 --- a/packages/client-search/model/searchExtensionsQueryCategorization.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Parameters for the [Query Categorization](https://www.algolia.com/doc/guides/algolia-ai/query-categorization/) AI feature. - */ -export type SearchExtensionsQueryCategorization = { - /** - * Whether to retrieve category predictions in the response `extensions.queryCategorization` field. - */ - enableCategoriesRetrieval?: boolean | undefined; - - /** - * Whether to automatically apply category-based filters and boosts to search results. - */ - enableAutoFiltering?: boolean | undefined; -}; diff --git a/packages/client-search/model/searchForFacetValuesRequest.ts b/packages/client-search/model/searchForFacetValuesRequest.ts deleted file mode 100644 index 1247ff014..000000000 --- a/packages/client-search/model/searchForFacetValuesRequest.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Text to search inside the facet\'s values. - */ - facetQuery?: string | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/client-search/model/searchForFacetValuesResponse.ts b/packages/client-search/model/searchForFacetValuesResponse.ts deleted file mode 100644 index 902bc09d8..000000000 --- a/packages/client-search/model/searchForFacetValuesResponse.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by OpenAPI Generator (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/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 | undefined; -}; diff --git a/packages/client-search/model/searchForFacets.ts b/packages/client-search/model/searchForFacets.ts deleted file mode 100644 index 00b710fff..000000000 --- a/packages/client-search/model/searchForFacets.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a8f55a7c3..000000000 --- a/packages/client-search/model/searchForFacetsOptions.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - type: SearchTypeFacet; -}; diff --git a/packages/client-search/model/searchForHits.ts b/packages/client-search/model/searchForHits.ts deleted file mode 100644 index 91f65b1d8..000000000 --- a/packages/client-search/model/searchForHits.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a13fc7c47..000000000 --- a/packages/client-search/model/searchForHitsOptions.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { SearchExtensions } from './searchExtensions'; -import type { SearchTypeDefault } from './searchTypeDefault'; - -export type SearchForHitsOptions = { - /** - * Index name (case-sensitive). - */ - indexName: string; - - type?: SearchTypeDefault | undefined; - - extensions?: SearchExtensions | undefined; -} & { facet?: never | undefined; maxFacetHits?: never | undefined; facetQuery?: never | undefined }; diff --git a/packages/client-search/model/searchHits.ts b/packages/client-search/model/searchHits.ts deleted file mode 100644 index 863600648..000000000 --- a/packages/client-search/model/searchHits.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by OpenAPI Generator (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'; -import type { ResponseExtensions } from './responseExtensions'; - -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 | undefined; - - /** - * URL-encoded string of all search parameters. - */ - params?: string | undefined; - - extensions?: ResponseExtensions | undefined; -}; diff --git a/packages/client-search/model/searchMethodParams.ts b/packages/client-search/model/searchMethodParams.ts deleted file mode 100644 index 773751e0d..000000000 --- a/packages/client-search/model/searchMethodParams.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/client-search/model/searchPagination.ts b/packages/client-search/model/searchPagination.ts deleted file mode 100644 index fa39f783f..000000000 --- a/packages/client-search/model/searchPagination.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Number of results (hits). - */ - nbHits?: number | undefined; - - /** - * Number of pages of results. - */ - nbPages?: number | undefined; - - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; -}; diff --git a/packages/client-search/model/searchParams.ts b/packages/client-search/model/searchParams.ts deleted file mode 100644 index 38bf1b3bd..000000000 --- a/packages/client-search/model/searchParams.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index b79d4f8f3..000000000 --- a/packages/client-search/model/searchParamsObject.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index ffa28bb14..000000000 --- a/packages/client-search/model/searchParamsQuery.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-search/model/searchParamsString.ts b/packages/client-search/model/searchParamsString.ts deleted file mode 100644 index b1a773379..000000000 --- a/packages/client-search/model/searchParamsString.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-search/model/searchQuery.ts b/packages/client-search/model/searchQuery.ts deleted file mode 100644 index 27971258b..000000000 --- a/packages/client-search/model/searchQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index e6a626fd8..000000000 --- a/packages/client-search/model/searchResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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/searchResponsePartial.ts b/packages/client-search/model/searchResponsePartial.ts deleted file mode 100644 index 21eb5bfa1..000000000 --- a/packages/client-search/model/searchResponsePartial.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 { SearchPagination } from './searchPagination'; - -/** - * Partial search response returned when the `responseFields` parameter excludes fields like `hits`. Contains all possible search response properties but none are required, so it acts as an unconditional fallback during oneOf deserialization. - */ -export type SearchResponsePartial> = BaseSearchResponse & - SearchPagination & { [key: string]: any }; diff --git a/packages/client-search/model/searchResponses.ts b/packages/client-search/model/searchResponses.ts deleted file mode 100644 index 8510fb9cf..000000000 --- a/packages/client-search/model/searchResponses.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 40ff9ba2f..000000000 --- a/packages/client-search/model/searchResult.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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'; -import type { SearchResponsePartial } from './searchResponsePartial'; - -export type SearchResult> = - SearchResponse | SearchForFacetValuesResponse | SearchResponsePartial; diff --git a/packages/client-search/model/searchRulesParams.ts b/packages/client-search/model/searchRulesParams.ts deleted file mode 100644 index 4b737ff2c..000000000 --- a/packages/client-search/model/searchRulesParams.ts +++ /dev/null @@ -1,35 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - anchoring?: Anchoring | undefined; - - /** - * Only return rules that match the context (exact match). - */ - context?: string | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * If `true`, return only enabled rules. If `false`, return only inactive rules. By default, _all_ rules are returned. - */ - enabled?: boolean | null | undefined; -}; diff --git a/packages/client-search/model/searchRulesResponse.ts b/packages/client-search/model/searchRulesResponse.ts deleted file mode 100644 index 1e35d7cfd..000000000 --- a/packages/client-search/model/searchRulesResponse.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 1bda46977..000000000 --- a/packages/client-search/model/searchStrategy.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 2f12ee960..000000000 --- a/packages/client-search/model/searchSynonymsParams.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - type?: SynonymType | undefined; - - /** - * Page of search results to retrieve. - */ - page?: number | undefined; - - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; -}; diff --git a/packages/client-search/model/searchSynonymsResponse.ts b/packages/client-search/model/searchSynonymsResponse.ts deleted file mode 100644 index 181876ce0..000000000 --- a/packages/client-search/model/searchSynonymsResponse.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 7bba6c55d..000000000 --- a/packages/client-search/model/searchTypeDefault.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index a6168e735..000000000 --- a/packages/client-search/model/searchTypeFacet.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 684b7e3ee..000000000 --- a/packages/client-search/model/searchUserIdsParams.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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: string; - - /** - * Cluster name. - */ - clusterName?: string | undefined; - - /** - * Page of search results to retrieve. - */ - page?: number | undefined; - - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; -}; diff --git a/packages/client-search/model/searchUserIdsResponse.ts b/packages/client-search/model/searchUserIdsResponse.ts deleted file mode 100644 index c36e355e7..000000000 --- a/packages/client-search/model/searchUserIdsResponse.ts +++ /dev/null @@ -1,33 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 095766188..000000000 --- a/packages/client-search/model/securedApiKeyRestrictions.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - /** - * Timestamp when the secured API key expires, measured in seconds since the Unix epoch. - */ - validUntil?: number | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/client-search/model/semanticSearch.ts b/packages/client-search/model/semanticSearch.ts deleted file mode 100644 index 17d94b987..000000000 --- a/packages/client-search/model/semanticSearch.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-search/model/settingsResponse.ts b/packages/client-search/model/settingsResponse.ts deleted file mode 100644 index 339a3a220..000000000 --- a/packages/client-search/model/settingsResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 0d9abff48..000000000 --- a/packages/client-search/model/snippetResult.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index daab65f2d..000000000 --- a/packages/client-search/model/snippetResultOption.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 85fc5bd88..000000000 --- a/packages/client-search/model/sortRemainingBy.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 0ac5b3574..000000000 --- a/packages/client-search/model/source.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-search/model/standardEntries.ts b/packages/client-search/model/standardEntries.ts deleted file mode 100644 index e6ececab9..000000000 --- a/packages/client-search/model/standardEntries.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Key-value pair of a language ISO code and a boolean value. - */ - stopwords?: { [key: string]: boolean } | null | undefined; - - /** - * Key-value pair of a language ISO code and a boolean value. - */ - compounds?: { [key: string]: boolean } | null | undefined; -}; diff --git a/packages/client-search/model/supportedLanguage.ts b/packages/client-search/model/supportedLanguage.ts deleted file mode 100644 index 85f2111cc..000000000 --- a/packages/client-search/model/supportedLanguage.ts +++ /dev/null @@ -1,74 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 7117d74e7..000000000 --- a/packages/client-search/model/synonymHit.ts +++ /dev/null @@ -1,45 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Words to be matched in records. - */ - corrections?: Array | undefined; - - /** - * [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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/client-search/model/synonymType.ts b/packages/client-search/model/synonymType.ts deleted file mode 100644 index 776565665..000000000 --- a/packages/client-search/model/synonymType.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index b13f801cf..000000000 --- a/packages/client-search/model/tagFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 5b312a99c..000000000 --- a/packages/client-search/model/taskStatus.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index ca2ed7b81..000000000 --- a/packages/client-search/model/timeRange.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 = { - /** - * Timestamp when the rule should start to be active, measured in seconds since the Unix epoch. - */ - from?: number | undefined; - - /** - * Timestamp when the rule should stop to be active, measured in seconds since the Unix epoch. - */ - until?: number | undefined; -}; diff --git a/packages/client-search/model/typoTolerance.ts b/packages/client-search/model/typoTolerance.ts deleted file mode 100644 index c825bee3b..000000000 --- a/packages/client-search/model/typoTolerance.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index fd97a0ed0..000000000 --- a/packages/client-search/model/typoToleranceEnum.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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' | 'true' | 'false'; diff --git a/packages/client-search/model/updateApiKeyResponse.ts b/packages/client-search/model/updateApiKeyResponse.ts deleted file mode 100644 index ee94ec780..000000000 --- a/packages/client-search/model/updateApiKeyResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 1763eb4cb..000000000 --- a/packages/client-search/model/updatedAtResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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](https://www.algolia.com/doc/rest-api/search/get-task) and this task ID. - */ - 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 deleted file mode 100644 index 372686b49..000000000 --- a/packages/client-search/model/updatedAtWithObjectIdResponse.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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](https://www.algolia.com/doc/rest-api/search/get-task) and this task ID. - */ - taskID?: number | undefined; - - /** - * Date and time when the object was updated, in RFC 3339 format. - */ - updatedAt?: string | undefined; - - /** - * Unique record identifier. - */ - objectID?: string | undefined; -}; diff --git a/packages/client-search/model/userHighlightResult.ts b/packages/client-search/model/userHighlightResult.ts deleted file mode 100644 index 7973efc4d..000000000 --- a/packages/client-search/model/userHighlightResult.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 8832c8e3b..000000000 --- a/packages/client-search/model/userHit.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 0a2d72bb3..000000000 --- a/packages/client-search/model/userId.ts +++ /dev/null @@ -1,26 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index d8c72bc53..000000000 --- a/packages/client-search/model/value.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - sortRemainingBy?: SortRemainingBy | undefined; - - /** - * Hide facet values. - */ - hide?: Array | undefined; -}; diff --git a/packages/client-search/model/watchResponse.ts b/packages/client-search/model/watchResponse.ts deleted file mode 100644 index 6ed206a01..000000000 --- a/packages/client-search/model/watchResponse.ts +++ /dev/null @@ -1,35 +0,0 @@ -// Code generated by OpenAPI Generator (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; - - /** - * Universally unique identifier (UUID) of an event. - */ - eventID?: string | undefined; - - /** - * This field is always null when used with the Push endpoint. When used for a source discover or source validate run, it will include the sampled data of the source. - */ - data?: Array> | undefined; - - /** - * in case of error, observability events will be added to the response. - */ - events?: Array | undefined; - - /** - * a message describing the outcome of the operation that has been ran (push, discover or validate) run. - */ - message?: string | undefined; - - /** - * Date and time when the resource was created, in RFC 3339 format. - */ - createdAt?: string | undefined; -}; diff --git a/packages/client-search/model/widgets.ts b/packages/client-search/model/widgets.ts deleted file mode 100644 index 12fe2bf4f..000000000 --- a/packages/client-search/model/widgets.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/client-search/model/withPrimary.ts b/packages/client-search/model/withPrimary.ts deleted file mode 100644 index 793945fc0..000000000 --- a/packages/client-search/model/withPrimary.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/client-search/package.json b/packages/client-search/package.json index d3686eb2b..692e3f823 100644 --- a/packages/client-search/package.json +++ b/packages/client-search/package.json @@ -1,73 +1,23 @@ { - "version": "5.56.0", + "name": "@algolia/client-search", + "version": "4.17.2", + "private": false, "repository": { "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git://github.com/algolia/algoliasearch-client-javascript.git" }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/packages/client-search#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-search", - "description": "JavaScript client for client-search", - "exports": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/builds/browser.js" - }, - "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", - "./dist/builds/*.js": "./dist/builds/*.js" - }, - "jsdelivr": "./dist/builds/browser.umd.js", - "unpkg": "./dist/builds/browser.umd.js", - "react-native": "./dist/builds/browser.js", + "sideEffects": false, + "main": "index.js", + "module": "dist/client-search.esm.js", + "types": "dist/client-search.d.ts", "files": [ - "dist", "index.js", - "index.d.ts" + "dist" ], "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "26.1.2", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" + "@algolia/client-common": "4.17.2", + "@algolia/requester-common": "4.17.2", + "@algolia/transporter": "4.17.2" } } diff --git a/packages/client-search/rollup.config.js b/packages/client-search/rollup.config.js deleted file mode 100644 index 7b5f529f9..000000000 --- a/packages/client-search/rollup.config.js +++ /dev/null @@ -1,17 +0,0 @@ -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 new file mode 100644 index 000000000..eb91d2e9c --- /dev/null +++ b/packages/client-search/src/__tests__/integration/api-keys.test.ts @@ -0,0 +1,89 @@ +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 new file mode 100644 index 000000000..0df68354d --- /dev/null +++ b/packages/client-search/src/__tests__/integration/batching.test.ts @@ -0,0 +1,51 @@ +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 new file mode 100644 index 000000000..00676c74e --- /dev/null +++ b/packages/client-search/src/__tests__/integration/browsing.test.ts @@ -0,0 +1,197 @@ +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 new file mode 100644 index 000000000..0539a8e54 --- /dev/null +++ b/packages/client-search/src/__tests__/integration/chunked-batch.test.ts @@ -0,0 +1,38 @@ +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 new file mode 100644 index 000000000..a0b6d6598 --- /dev/null +++ b/packages/client-search/src/__tests__/integration/copy-and-move-index.test.ts @@ -0,0 +1,90 @@ +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 new file mode 100644 index 000000000..cc48b123c --- /dev/null +++ b/packages/client-search/src/__tests__/integration/dictionary.test.ts @@ -0,0 +1,145 @@ +/* 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 new file mode 100644 index 000000000..4e7b49f42 --- /dev/null +++ b/packages/client-search/src/__tests__/integration/exists.test.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..c98abca90 --- /dev/null +++ b/packages/client-search/src/__tests__/integration/get-logs.test.ts @@ -0,0 +1,34 @@ +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 new file mode 100644 index 000000000..69e511ae5 --- /dev/null +++ b/packages/client-search/src/__tests__/integration/indexing.test.ts @@ -0,0 +1,159 @@ +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 new file mode 100644 index 000000000..b67ef9a5e --- /dev/null +++ b/packages/client-search/src/__tests__/integration/mcm.test.ts @@ -0,0 +1,187 @@ +/* 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 new file mode 100644 index 000000000..7d8804384 --- /dev/null +++ b/packages/client-search/src/__tests__/integration/multiple-operations.test.ts @@ -0,0 +1,96 @@ +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 new file mode 100644 index 000000000..7c1c36ea6 --- /dev/null +++ b/packages/client-search/src/__tests__/integration/replacing.test.ts @@ -0,0 +1,108 @@ +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 new file mode 100644 index 000000000..7665094e6 --- /dev/null +++ b/packages/client-search/src/__tests__/integration/rules.test.ts @@ -0,0 +1,133 @@ +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 new file mode 100644 index 000000000..577609beb --- /dev/null +++ b/packages/client-search/src/__tests__/integration/search.test.ts @@ -0,0 +1,271 @@ +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 new file mode 100644 index 000000000..96f334736 --- /dev/null +++ b/packages/client-search/src/__tests__/integration/secured-api-keys.test.ts @@ -0,0 +1,58 @@ +/* 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 new file mode 100644 index 000000000..b547e2237 --- /dev/null +++ b/packages/client-search/src/__tests__/integration/settings.test.ts @@ -0,0 +1,108 @@ +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 new file mode 100644 index 000000000..098fa7b13 --- /dev/null +++ b/packages/client-search/src/__tests__/integration/synonyms.test.ts @@ -0,0 +1,105 @@ +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 new file mode 100644 index 000000000..6d4e74acd --- /dev/null +++ b/packages/client-search/src/__tests__/unit/search-client.test.ts @@ -0,0 +1,109 @@ +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 new file mode 100644 index 000000000..e9fd8d921 --- /dev/null +++ b/packages/client-search/src/__tests__/unit/search-index.test.ts @@ -0,0 +1,295 @@ +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 new file mode 100644 index 000000000..eb27cc7ca --- /dev/null +++ b/packages/client-search/src/createBrowsablePromise.ts @@ -0,0 +1,46 @@ +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 new file mode 100644 index 000000000..aa1b80c49 --- /dev/null +++ b/packages/client-search/src/createSearchClient.ts @@ -0,0 +1,64 @@ +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 new file mode 100644 index 000000000..59d6483a6 --- /dev/null +++ b/packages/client-search/src/errors/createMissingObjectIDError.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..f2edec171 --- /dev/null +++ b/packages/client-search/src/errors/createObjectNotFoundError.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..954de70c7 --- /dev/null +++ b/packages/client-search/src/errors/createValidUntilNotFoundError.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..c52a5b9bb --- /dev/null +++ b/packages/client-search/src/errors/index.ts @@ -0,0 +1,7 @@ +/** + * @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 new file mode 100644 index 000000000..81aef0eb3 --- /dev/null +++ b/packages/client-search/src/index.ts @@ -0,0 +1,9 @@ +/** + * @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 new file mode 100644 index 000000000..00c89ed00 --- /dev/null +++ b/packages/client-search/src/methods/client/addApiKey.ts @@ -0,0 +1,56 @@ +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 new file mode 100644 index 000000000..cae4ec9ba --- /dev/null +++ b/packages/client-search/src/methods/client/assignUserID.ts @@ -0,0 +1,26 @@ +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 new file mode 100644 index 000000000..46fe91f60 --- /dev/null +++ b/packages/client-search/src/methods/client/assignUserIDs.ts @@ -0,0 +1,24 @@ +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 new file mode 100644 index 000000000..e89e574de --- /dev/null +++ b/packages/client-search/src/methods/client/clearDictionaryEntries.ts @@ -0,0 +1,33 @@ +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 new file mode 100644 index 000000000..e0f1cc6d7 --- /dev/null +++ b/packages/client-search/src/methods/client/copyIndex.ts @@ -0,0 +1,34 @@ +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 new file mode 100644 index 000000000..a7c8b8328 --- /dev/null +++ b/packages/client-search/src/methods/client/copyRules.ts @@ -0,0 +1,17 @@ +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 new file mode 100644 index 000000000..c38363bbd --- /dev/null +++ b/packages/client-search/src/methods/client/copySettings.ts @@ -0,0 +1,17 @@ +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 new file mode 100644 index 000000000..f7d1b3b15 --- /dev/null +++ b/packages/client-search/src/methods/client/copySynonyms.ts @@ -0,0 +1,17 @@ +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 new file mode 100644 index 000000000..65ec0850e --- /dev/null +++ b/packages/client-search/src/methods/client/customRequest.ts @@ -0,0 +1,14 @@ +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 new file mode 100644 index 000000000..aa2332552 --- /dev/null +++ b/packages/client-search/src/methods/client/deleteApiKey.ts @@ -0,0 +1,41 @@ +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 new file mode 100644 index 000000000..c29e4dbf7 --- /dev/null +++ b/packages/client-search/src/methods/client/deleteDictionaryEntries.ts @@ -0,0 +1,36 @@ +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 new file mode 100644 index 000000000..a2a400d5f --- /dev/null +++ b/packages/client-search/src/methods/client/generateSecuredApiKey.ts @@ -0,0 +1,17 @@ +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 new file mode 100644 index 000000000..10740e485 --- /dev/null +++ b/packages/client-search/src/methods/client/getApiKey.ts @@ -0,0 +1,20 @@ +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 new file mode 100644 index 000000000..7805babf2 --- /dev/null +++ b/packages/client-search/src/methods/client/getAppTask.ts @@ -0,0 +1,20 @@ +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 new file mode 100644 index 000000000..cb4758347 --- /dev/null +++ b/packages/client-search/src/methods/client/getDictionarySettings.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..ec04b6c16 --- /dev/null +++ b/packages/client-search/src/methods/client/getLogs.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..563516779 --- /dev/null +++ b/packages/client-search/src/methods/client/getSecuredApiKeyRemainingValidity.ts @@ -0,0 +1,15 @@ +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 new file mode 100644 index 000000000..8b65b58ca --- /dev/null +++ b/packages/client-search/src/methods/client/getTopUserIDs.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..f30e7a0c9 --- /dev/null +++ b/packages/client-search/src/methods/client/getUserID.ts @@ -0,0 +1,17 @@ +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 new file mode 100644 index 000000000..c4cdbadc8 --- /dev/null +++ b/packages/client-search/src/methods/client/hasPendingMappings.ts @@ -0,0 +1,25 @@ +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 new file mode 100644 index 000000000..210702541 --- /dev/null +++ b/packages/client-search/src/methods/client/index.ts @@ -0,0 +1,43 @@ +/** + * @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 new file mode 100644 index 000000000..ffe48bedc --- /dev/null +++ b/packages/client-search/src/methods/client/initIndex.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..7f2d533b7 --- /dev/null +++ b/packages/client-search/src/methods/client/listApiKeys.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..b80340080 --- /dev/null +++ b/packages/client-search/src/methods/client/listClusters.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..ef6a74ab3 --- /dev/null +++ b/packages/client-search/src/methods/client/listIndices.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..9d1e522e9 --- /dev/null +++ b/packages/client-search/src/methods/client/listUserIDs.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..5cb065c66 --- /dev/null +++ b/packages/client-search/src/methods/client/moveIndex.ts @@ -0,0 +1,34 @@ +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 new file mode 100644 index 000000000..402058c3d --- /dev/null +++ b/packages/client-search/src/methods/client/multipleBatch.ts @@ -0,0 +1,42 @@ +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 new file mode 100644 index 000000000..3052d5990 --- /dev/null +++ b/packages/client-search/src/methods/client/multipleGetObjects.ts @@ -0,0 +1,22 @@ +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 new file mode 100644 index 000000000..254468a5b --- /dev/null +++ b/packages/client-search/src/methods/client/multipleQueries.ts @@ -0,0 +1,35 @@ +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 new file mode 100644 index 000000000..b1dd0dcd8 --- /dev/null +++ b/packages/client-search/src/methods/client/multipleSearchForFacetValues.ts @@ -0,0 +1,33 @@ +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 new file mode 100644 index 000000000..61c7c122c --- /dev/null +++ b/packages/client-search/src/methods/client/removeUserID.ts @@ -0,0 +1,24 @@ +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 new file mode 100644 index 000000000..4e9c24734 --- /dev/null +++ b/packages/client-search/src/methods/client/replaceDictionaryEntries.ts @@ -0,0 +1,37 @@ +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 new file mode 100644 index 000000000..f6ceb1789 --- /dev/null +++ b/packages/client-search/src/methods/client/restoreApiKey.ts @@ -0,0 +1,41 @@ +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 new file mode 100644 index 000000000..5b6a6b5c4 --- /dev/null +++ b/packages/client-search/src/methods/client/saveDictionaryEntries.ts @@ -0,0 +1,37 @@ +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 new file mode 100644 index 000000000..dc45abd90 --- /dev/null +++ b/packages/client-search/src/methods/client/searchDictionaryEntries.ts @@ -0,0 +1,25 @@ +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 new file mode 100644 index 000000000..08bf24537 --- /dev/null +++ b/packages/client-search/src/methods/client/searchUserIDs.ts @@ -0,0 +1,22 @@ +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 new file mode 100644 index 000000000..5ceebc6d4 --- /dev/null +++ b/packages/client-search/src/methods/client/setDictionarySettings.ts @@ -0,0 +1,25 @@ +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 new file mode 100644 index 000000000..5a4b11e76 --- /dev/null +++ b/packages/client-search/src/methods/client/updateApiKey.ts @@ -0,0 +1,89 @@ +import { + createRetryablePromise, + createWaitablePromise, + encode, + Wait, + WaitablePromise, +} from '@algolia/client-common'; +import { MethodEnum } from '@algolia/requester-common'; +import { RequestOptions } from '@algolia/transporter'; + +import { + ApiKeyACLType, + 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; + + // Check that all the fields retrieved through getApiKey are the same as the ones we wanted to update + const hasChanged = (getApiKeyResponse: GetApiKeyResponse): boolean => { + return Object.keys(updatedFields) + .filter( + (updatedField: any): updatedField is typeof apiKeyFields[number] => + apiKeyFields.indexOf(updatedField) !== -1 + ) + .every(updatedField => { + // If the field is an array, we need to check that they are the same length and that all the values are the same + if ( + Array.isArray(getApiKeyResponse[updatedField]) && + Array.isArray(updatedFields[updatedField]) + ) { + const getApiKeyResponseArray = getApiKeyResponse[updatedField] as + | readonly ApiKeyACLType[] + | readonly string[]; + + return ( + getApiKeyResponseArray.length === updatedFields[updatedField].length && + getApiKeyResponseArray.every( + (value, index) => value === updatedFields[updatedField][index] + ) + ); + } else { + 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 new file mode 100644 index 000000000..ae25111ae --- /dev/null +++ b/packages/client-search/src/methods/client/waitAppTask.ts @@ -0,0 +1,15 @@ +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 new file mode 100644 index 000000000..2d21e0f92 --- /dev/null +++ b/packages/client-search/src/methods/index.ts @@ -0,0 +1,6 @@ +/** + * @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 new file mode 100644 index 000000000..fba7bc80f --- /dev/null +++ b/packages/client-search/src/methods/index/batch.ts @@ -0,0 +1,30 @@ +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 new file mode 100644 index 000000000..77ed9df3f --- /dev/null +++ b/packages/client-search/src/methods/index/browseObjects.ts @@ -0,0 +1,31 @@ +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 new file mode 100644 index 000000000..d983bcdfa --- /dev/null +++ b/packages/client-search/src/methods/index/browseRules.ts @@ -0,0 +1,42 @@ +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 new file mode 100644 index 000000000..f31580ae5 --- /dev/null +++ b/packages/client-search/src/methods/index/browseSynonyms.ts @@ -0,0 +1,42 @@ +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 new file mode 100644 index 000000000..48c308469 --- /dev/null +++ b/packages/client-search/src/methods/index/chunkedBatch.ts @@ -0,0 +1,72 @@ +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 new file mode 100644 index 000000000..9557d0bf4 --- /dev/null +++ b/packages/client-search/src/methods/index/clearObjects.ts @@ -0,0 +1,21 @@ +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 new file mode 100644 index 000000000..ad4edaee1 --- /dev/null +++ b/packages/client-search/src/methods/index/clearRules.ts @@ -0,0 +1,28 @@ +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 new file mode 100644 index 000000000..c99993be2 --- /dev/null +++ b/packages/client-search/src/methods/index/clearSynonyms.ts @@ -0,0 +1,29 @@ +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 new file mode 100644 index 000000000..f887c8941 --- /dev/null +++ b/packages/client-search/src/methods/index/deleteBy.ts @@ -0,0 +1,25 @@ +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 new file mode 100644 index 000000000..462c0d595 --- /dev/null +++ b/packages/client-search/src/methods/index/deleteIndex.ts @@ -0,0 +1,21 @@ +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 new file mode 100644 index 000000000..cb9738714 --- /dev/null +++ b/packages/client-search/src/methods/index/deleteObject.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..8606a7259 --- /dev/null +++ b/packages/client-search/src/methods/index/deleteObjects.ts @@ -0,0 +1,23 @@ +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 new file mode 100644 index 000000000..0c0fcec86 --- /dev/null +++ b/packages/client-search/src/methods/index/deleteRule.ts @@ -0,0 +1,30 @@ +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 new file mode 100644 index 000000000..1fc9c80de --- /dev/null +++ b/packages/client-search/src/methods/index/deleteSynonym.ts @@ -0,0 +1,30 @@ +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 new file mode 100644 index 000000000..1a5f7e8df --- /dev/null +++ b/packages/client-search/src/methods/index/exists.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..6041dbe66 --- /dev/null +++ b/packages/client-search/src/methods/index/findAnswers.ts @@ -0,0 +1,26 @@ +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 new file mode 100644 index 000000000..6225f2721 --- /dev/null +++ b/packages/client-search/src/methods/index/findObject.ts @@ -0,0 +1,49 @@ +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 new file mode 100644 index 000000000..d1eff561c --- /dev/null +++ b/packages/client-search/src/methods/index/getObject.ts @@ -0,0 +1,20 @@ +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 new file mode 100644 index 000000000..197f22331 --- /dev/null +++ b/packages/client-search/src/methods/index/getObjectPosition.ts @@ -0,0 +1,14 @@ +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 new file mode 100644 index 000000000..27419ccfb --- /dev/null +++ b/packages/client-search/src/methods/index/getObjects.ts @@ -0,0 +1,32 @@ +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 new file mode 100644 index 000000000..bbace8e10 --- /dev/null +++ b/packages/client-search/src/methods/index/getRule.ts @@ -0,0 +1,17 @@ +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 new file mode 100644 index 000000000..bc9032e96 --- /dev/null +++ b/packages/client-search/src/methods/index/getSettings.ts @@ -0,0 +1,20 @@ +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 new file mode 100644 index 000000000..519978346 --- /dev/null +++ b/packages/client-search/src/methods/index/getSynonym.ts @@ -0,0 +1,17 @@ +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 new file mode 100644 index 000000000..f01a70c81 --- /dev/null +++ b/packages/client-search/src/methods/index/getTask.ts @@ -0,0 +1,20 @@ +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 new file mode 100644 index 000000000..6ff412547 --- /dev/null +++ b/packages/client-search/src/methods/index/index.ts @@ -0,0 +1,45 @@ +/** + * @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 new file mode 100644 index 000000000..f5d7d05f7 --- /dev/null +++ b/packages/client-search/src/methods/index/partialUpdateObject.ts @@ -0,0 +1,27 @@ +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 new file mode 100644 index 000000000..420a40fa5 --- /dev/null +++ b/packages/client-search/src/methods/index/partialUpdateObjects.ts @@ -0,0 +1,26 @@ +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 new file mode 100644 index 000000000..945cc7db8 --- /dev/null +++ b/packages/client-search/src/methods/index/replaceAllObjects.ts @@ -0,0 +1,111 @@ +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 new file mode 100644 index 000000000..3b32a343e --- /dev/null +++ b/packages/client-search/src/methods/index/replaceAllRules.ts @@ -0,0 +1,17 @@ +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 new file mode 100644 index 000000000..56ffaa48e --- /dev/null +++ b/packages/client-search/src/methods/index/replaceAllSynonyms.ts @@ -0,0 +1,22 @@ +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 new file mode 100644 index 000000000..367fe7091 --- /dev/null +++ b/packages/client-search/src/methods/index/saveObject.ts @@ -0,0 +1,28 @@ +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 new file mode 100644 index 000000000..25b301496 --- /dev/null +++ b/packages/client-search/src/methods/index/saveObjects.ts @@ -0,0 +1,36 @@ +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 new file mode 100644 index 000000000..393416c2e --- /dev/null +++ b/packages/client-search/src/methods/index/saveRule.ts @@ -0,0 +1,13 @@ +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 new file mode 100644 index 000000000..337dfdd1a --- /dev/null +++ b/packages/client-search/src/methods/index/saveRules.ts @@ -0,0 +1,36 @@ +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 new file mode 100644 index 000000000..e2ac5254d --- /dev/null +++ b/packages/client-search/src/methods/index/saveSynonym.ts @@ -0,0 +1,19 @@ +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 new file mode 100644 index 000000000..a144ddf85 --- /dev/null +++ b/packages/client-search/src/methods/index/saveSynonyms.ts @@ -0,0 +1,37 @@ +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 new file mode 100644 index 000000000..f2b6c07e2 --- /dev/null +++ b/packages/client-search/src/methods/index/search.ts @@ -0,0 +1,24 @@ +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 new file mode 100644 index 000000000..f97666f44 --- /dev/null +++ b/packages/client-search/src/methods/index/searchForFacetValues.ts @@ -0,0 +1,25 @@ +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 new file mode 100644 index 000000000..d71904a16 --- /dev/null +++ b/packages/client-search/src/methods/index/searchRules.ts @@ -0,0 +1,23 @@ +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 new file mode 100644 index 000000000..be9b6fa83 --- /dev/null +++ b/packages/client-search/src/methods/index/searchSynonyms.ts @@ -0,0 +1,23 @@ +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 new file mode 100644 index 000000000..3e5609e98 --- /dev/null +++ b/packages/client-search/src/methods/index/setSettings.ts @@ -0,0 +1,31 @@ +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 new file mode 100644 index 000000000..6f0f0a199 --- /dev/null +++ b/packages/client-search/src/methods/index/waitTask.ts @@ -0,0 +1,15 @@ +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 deleted file mode 100644 index 68138a1c0..000000000 --- a/packages/client-search/src/searchClient.ts +++ /dev/null @@ -1,5118 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - CreateClientOptions, - Headers, - Host, - IterableOptions, - QueryParameters, - Request, - RequestOptions, -} from '@algolia/client-common'; -import { - ApiError, - DEFAULT_REPLACE_ALL_OBJECTS_MAX_RETRIES, - createAuth, - createIterablePromise, - createTransporter, - getAlgoliaAgent, - logWarning, - shuffle, - validateRequired, - withRequestId, -} 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.56.0'; - -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 | undefined): 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. 100 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 = 100, - timeout = (retryCount: number): number => Math.min(retryCount * 200, 5000), - }: WaitForTaskOptions, - requestOptions?: RequestOptions | undefined, - ): Promise { - requestOptions = withRequestId(transporter, requestOptions); - let retryCount = 0; - - return createIterablePromise({ - func: () => this.getTask({ indexName, taskID }, requestOptions), - validate: (response) => response.status === 'published', - aggregator: () => (retryCount += 1), - error: { - validate: () => retryCount >= maxRetries, - message: () => - `Stopped waiting for the task after ${maxRetries} retries. This does not mean the operation failed; it may still complete. If you need to keep polling, retry with a higher 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. 100 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 = 100, - timeout = (retryCount: number): number => Math.min(retryCount * 200, 5000), - }: WaitForAppTaskOptions, - requestOptions?: RequestOptions | undefined, - ): Promise { - requestOptions = withRequestId(transporter, requestOptions); - let retryCount = 0; - - return createIterablePromise({ - func: () => this.getAppTask({ taskID }, requestOptions), - validate: (response) => response.status === 'published', - aggregator: () => (retryCount += 1), - error: { - validate: () => retryCount >= maxRetries, - message: () => - `Stopped waiting for the task after ${maxRetries} retries. This does not mean the operation failed; it may still complete. If you need to keep polling, retry with a higher 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. 100 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 = 100, - timeout = (retryCount: number): number => Math.min(retryCount * 200, 5000), - }: WaitForApiKeyOptions, - requestOptions?: RequestOptions | undefined, - ): Promise { - requestOptions = withRequestId(transporter, requestOptions); - let retryCount = 0; - const baseIteratorOptions: IterableOptions = { - aggregator: () => (retryCount += 1), - error: { - validate: () => retryCount >= maxRetries, - message: () => - `Stopped waiting for the API key operation after ${maxRetries} retries. This does not mean the operation failed; it may still complete. If you need to keep polling, retry with a higher 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 | undefined, - ): Promise> { - requestOptions = withRequestId(transporter, requestOptions); - - 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 | undefined, - ): Promise { - requestOptions = withRequestId(transporter, requestOptions); - const params = { - ...searchRulesParams, - hitsPerPage: searchRulesParams?.hitsPerPage || 1000, - }; - - 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 | undefined, - ): Promise { - requestOptions = withRequestId(transporter, requestOptions); - const params = { - ...searchSynonymsParams, - page: searchSynonymsParams?.page || 0, - 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 chunkedBatch.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @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, - maxRetries = 100, - }: ChunkedBatchOptions, - requestOptions?: RequestOptions, - ): Promise> { - requestOptions = withRequestId(transporter, requestOptions); - 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, maxRetries }, requestOptions); - } - } - - 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 saveObjects.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 saveObjects.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @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, maxRetries }: SaveObjectsOptions, - requestOptions?: RequestOptions | undefined, - ): Promise { - return await this.chunkedBatch( - { indexName, objects, action: 'addObject', waitForTasks, batchSize, maxRetries }, - 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 deleteObjects.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 deleteObjects.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @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, maxRetries }: DeleteObjectsOptions, - requestOptions?: RequestOptions | undefined, - ): Promise { - return await this.chunkedBatch( - { - indexName, - objects: objectIDs.map((objectID) => ({ objectID })), - action: 'deleteObject', - waitForTasks, - batchSize, - maxRetries, - }, - 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 partialUpdateObjects.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 partialUpdateObjects.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @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, maxRetries }: PartialUpdateObjectsOptions, - requestOptions?: RequestOptions | undefined, - ): Promise { - return await this.chunkedBatch( - { - indexName, - objects, - action: createIfNotExists ? 'partialUpdateObject' : 'partialUpdateObjectNoCreate', - batchSize, - waitForTasks, - maxRetries, - }, - 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/custom-helpers/#replaceallobjects for implementation details. - * - * Warning: calling this method with an empty `objects` list replaces the index with an empty one, deleting all existing records. - * - * @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 replaceAllObjects.maxRetries - The maximum number of retries when polling for task completion. 800 by default. - * @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, - maxRetries = DEFAULT_REPLACE_ALL_OBJECTS_MAX_RETRIES, - }: ReplaceAllObjectsOptions, - requestOptions?: RequestOptions | undefined, - ): Promise { - requestOptions = withRequestId(transporter, requestOptions); - - if (objects.length === 0) { - logWarning( - transporter.logger, - `replaceAllObjects was called with an empty list of objects, which will delete all records currently in the "${indexName}" index.`, - ); - } - - 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, maxRetries }, - requestOptions, - ); - - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: copyOperationResponse.taskID, - maxRetries, - }, - requestOptions, - ); - - copyOperationResponse = await this.operationIndex( - { - indexName, - operationIndexParams: { - operation: 'copy', - destination: tmpIndexName, - scope: scopes, - }, - }, - requestOptions, - ); - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: copyOperationResponse.taskID, - maxRetries, - }, - requestOptions, - ); - - const moveOperationResponse = await this.operationIndex( - { - indexName: tmpIndexName, - operationIndexParams: { operation: 'move', destination: indexName }, - }, - requestOptions, - ); - await this.waitForTask( - { - indexName: tmpIndexName, - taskID: moveOperationResponse.taskID, - maxRetries, - }, - requestOptions, - ); - - return { copyOperationResponse, batchResponses, moveOperationResponse }; - } catch (error) { - await this.deleteIndex({ indexName: tmpIndexName }, requestOptions); - - throw error; - } - }, - - async indexExists({ indexName }: GetSettingsProps, requestOptions?: RequestOptions | undefined): Promise { - try { - await this.getSettings({ indexName }, requestOptions); - } 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 | undefined, - ): 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 | undefined, - ): 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 { - validateRequired('apiKey', 'addApiKey', apiKey); - - validateRequired('apiKey.acl', 'addApiKey', apiKey.acl); - - 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); - }, - /** - * Creates a new API key with specific permissions and restrictions. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see addApiKey for the plain version. - */ - addApiKeyWithHTTPInfo( - apiKey: ApiKey, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('apiKey', 'addApiKeyWithHTTPInfo', apiKey); - - validateRequired('apiKey.acl', 'addApiKeyWithHTTPInfo', apiKey.acl); - - const requestPath = '/1/keys'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: apiKey, - }; - - return transporter.requestWithHttpInfo(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](https://www.algolia.com/doc/rest-api/search/save-object). To update _some_ attributes of an existing record, use the [`partial` operation](https://www.algolia.com/doc/rest-api/search/partial-update-object) instead. To add, update, or replace multiple records, use the [`batch` operation](https://www.algolia.com/doc/rest-api/search/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 { - validateRequired('indexName', 'addOrUpdateObject', indexName); - - validateRequired('objectID', 'addOrUpdateObject', objectID); - - validateRequired('body', 'addOrUpdateObject', body); - - 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); - }, - /** - * 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](https://www.algolia.com/doc/rest-api/search/save-object). To update _some_ attributes of an existing record, use the [`partial` operation](https://www.algolia.com/doc/rest-api/search/partial-update-object) instead. To add, update, or replace multiple records, use the [`batch` operation](https://www.algolia.com/doc/rest-api/search/batch). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see addOrUpdateObject for the plain version. - */ - addOrUpdateObjectWithHTTPInfo( - { indexName, objectID, body }: AddOrUpdateObjectProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'addOrUpdateObjectWithHTTPInfo', indexName); - - validateRequired('objectID', 'addOrUpdateObjectWithHTTPInfo', objectID); - - validateRequired('body', 'addOrUpdateObjectWithHTTPInfo', body); - - 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.requestWithHttpInfo(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 { - validateRequired('source', 'appendSource', source); - - validateRequired('source.source', 'appendSource', source.source); - - 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); - }, - /** - * Adds a source to the list of allowed sources. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see appendSource for the plain version. - */ - appendSourceWithHTTPInfo( - source: Source, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('source', 'appendSourceWithHTTPInfo', source); - - validateRequired('source.source', 'appendSourceWithHTTPInfo', source.source); - - 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.requestWithHttpInfo(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 { - validateRequired('xAlgoliaUserID', 'assignUserId', xAlgoliaUserID); - - validateRequired('assignUserIdParams', 'assignUserId', assignUserIdParams); - - validateRequired('assignUserIdParams.cluster', 'assignUserId', assignUserIdParams.cluster); - - 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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see assignUserId for the plain version. - */ - assignUserIdWithHTTPInfo( - { xAlgoliaUserID, assignUserIdParams }: AssignUserIdProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('xAlgoliaUserID', 'assignUserIdWithHTTPInfo', xAlgoliaUserID); - - validateRequired('assignUserIdParams', 'assignUserIdWithHTTPInfo', assignUserIdParams); - - validateRequired('assignUserIdParams.cluster', 'assignUserIdWithHTTPInfo', assignUserIdParams.cluster); - - 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.requestWithHttpInfo(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/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). - * - * Required API Key ACLs: - * - addObject - * @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 { - validateRequired('indexName', 'batch', indexName); - - validateRequired('batchWriteParams', 'batch', batchWriteParams); - - validateRequired('batchWriteParams.requests', 'batch', batchWriteParams.requests); - - 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); - }, - /** - * 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/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * @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. - * @see batch for the plain version. - */ - batchWithHTTPInfo( - { indexName, batchWriteParams }: BatchProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'batchWithHTTPInfo', indexName); - - validateRequired('batchWriteParams', 'batchWithHTTPInfo', batchWriteParams); - - validateRequired('batchWriteParams.requests', 'batchWithHTTPInfo', batchWriteParams.requests); - - 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.requestWithHttpInfo(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 { - validateRequired('xAlgoliaUserID', 'batchAssignUserIds', xAlgoliaUserID); - - validateRequired('batchAssignUserIdsParams', 'batchAssignUserIds', batchAssignUserIdsParams); - - validateRequired('batchAssignUserIdsParams.cluster', 'batchAssignUserIds', batchAssignUserIdsParams.cluster); - validateRequired('batchAssignUserIdsParams.users', 'batchAssignUserIds', batchAssignUserIdsParams.users); - - 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); - }, - /** - * Assigns multiple user IDs to a cluster. **You can\'t move users with this operation**. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see batchAssignUserIds for the plain version. - */ - batchAssignUserIdsWithHTTPInfo( - { xAlgoliaUserID, batchAssignUserIdsParams }: BatchAssignUserIdsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('xAlgoliaUserID', 'batchAssignUserIdsWithHTTPInfo', xAlgoliaUserID); - - validateRequired('batchAssignUserIdsParams', 'batchAssignUserIdsWithHTTPInfo', batchAssignUserIdsParams); - - validateRequired( - 'batchAssignUserIdsParams.cluster', - 'batchAssignUserIdsWithHTTPInfo', - batchAssignUserIdsParams.cluster, - ); - validateRequired( - 'batchAssignUserIdsParams.users', - 'batchAssignUserIdsWithHTTPInfo', - batchAssignUserIdsParams.users, - ); - - 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.requestWithHttpInfo(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 { - validateRequired('dictionaryName', 'batchDictionaryEntries', dictionaryName); - - validateRequired('batchDictionaryEntriesParams', 'batchDictionaryEntries', batchDictionaryEntriesParams); - - validateRequired( - 'batchDictionaryEntriesParams.requests', - 'batchDictionaryEntries', - batchDictionaryEntriesParams.requests, - ); - - 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); - }, - /** - * Adds or deletes multiple entries from your plurals, segmentation, or stop word dictionaries. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see batchDictionaryEntries for the plain version. - */ - batchDictionaryEntriesWithHTTPInfo( - { dictionaryName, batchDictionaryEntriesParams }: BatchDictionaryEntriesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('dictionaryName', 'batchDictionaryEntriesWithHTTPInfo', dictionaryName); - - validateRequired( - 'batchDictionaryEntriesParams', - 'batchDictionaryEntriesWithHTTPInfo', - batchDictionaryEntriesParams, - ); - - validateRequired( - 'batchDictionaryEntriesParams.requests', - 'batchDictionaryEntriesWithHTTPInfo', - batchDictionaryEntriesParams.requests, - ); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves records from an index, up to 1,000 per request. Searching returns _hits_ (records augmented with highlighting and ranking details). Browsing returns matching records only. Use browse 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, or 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\'re 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> { - validateRequired('indexName', 'browse', indexName); - - 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); - }, - /** - * Retrieves records from an index, up to 1,000 per request. Searching returns _hits_ (records augmented with highlighting and ranking details). Browsing returns matching records only. Use browse 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, or 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\'re ignored. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see browse for the plain version. - */ - browseWithHTTPInfo( - { indexName, browseParams }: BrowseProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('indexName', 'browseWithHTTPInfo', indexName); - - 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.requestWithHttpInfo(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/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 { - validateRequired('indexName', 'clearObjects', indexName); - - 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 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/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see clearObjects for the plain version. - */ - clearObjectsWithHTTPInfo( - { indexName }: ClearObjectsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'clearObjectsWithHTTPInfo', indexName); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'clearRules', indexName); - - 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 rules from the index. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see clearRules for the plain version. - */ - clearRulesWithHTTPInfo( - { indexName, forwardToReplicas }: ClearRulesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'clearRulesWithHTTPInfo', indexName); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'clearSynonyms', indexName); - - 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); - }, - /** - * Deletes all synonyms from the index. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see clearSynonyms for the plain version. - */ - clearSynonymsWithHTTPInfo( - { indexName, forwardToReplicas }: ClearSynonymsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'clearSynonymsWithHTTPInfo', indexName); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customDelete', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customDelete - The customDelete object. - * @param customDelete.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customDelete for the plain version. - */ - customDeleteWithHTTPInfo( - { path, parameters }: CustomDeleteProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customDeleteWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customGet', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customGet - The customGet object. - * @param customGet.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customGet for the plain version. - */ - customGetWithHTTPInfo( - { path, parameters }: CustomGetProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customGetWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPut', path); - - 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); - }, - /** - * This method lets you send requests to the Algolia REST API. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPut - The customPut object. - * @param customPut.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPut for the plain version. - */ - customPutWithHTTPInfo( - { path, parameters, body }: CustomPutProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPutWithHTTPInfo', path); - - 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.requestWithHttpInfo(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 { - validateRequired('key', 'deleteApiKey', key); - - 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); - }, - /** - * Deletes the API key. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteApiKey for the plain version. - */ - deleteApiKeyWithHTTPInfo( - { key }: DeleteApiKeyProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('key', 'deleteApiKeyWithHTTPInfo', key); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * This operation doesn\'t accept empty filters. This operation is resource-intensive. Use it only 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](https://www.algolia.com/doc/rest-api/search/browse), and then delete the records using the [`batch` operation](https://www.algolia.com/doc/rest-api/search/batch). This operation is subject to [indexing rate limits](https://support.algolia.com/hc/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 { - validateRequired('indexName', 'deleteBy', indexName); - - validateRequired('deleteByParams', 'deleteBy', deleteByParams); - - 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); - }, - /** - * This operation doesn\'t accept empty filters. This operation is resource-intensive. Use it only 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](https://www.algolia.com/doc/rest-api/search/browse), and then delete the records using the [`batch` operation](https://www.algolia.com/doc/rest-api/search/batch). This operation is subject to [indexing rate limits](https://support.algolia.com/hc/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteBy for the plain version. - */ - deleteByWithHTTPInfo( - { indexName, deleteByParams }: DeleteByProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'deleteByWithHTTPInfo', indexName); - - validateRequired('deleteByParams', 'deleteByWithHTTPInfo', deleteByParams); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'deleteIndex', indexName); - - 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 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). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteIndex for the plain version. - */ - deleteIndexWithHTTPInfo( - { indexName }: DeleteIndexProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'deleteIndexWithHTTPInfo', indexName); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Deletes a record by its object ID. To delete more than one record, use the [`batch` operation](https://www.algolia.com/doc/rest-api/search/batch). To delete records matching a query, use the [`deleteBy` operation](https://www.algolia.com/doc/rest-api/search/delete-by). - * - * 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 { - validateRequired('indexName', 'deleteObject', indexName); - - validateRequired('objectID', 'deleteObject', objectID); - - 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 record by its object ID. To delete more than one record, use the [`batch` operation](https://www.algolia.com/doc/rest-api/search/batch). To delete records matching a query, use the [`deleteBy` operation](https://www.algolia.com/doc/rest-api/search/delete-by). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteObject for the plain version. - */ - deleteObjectWithHTTPInfo( - { indexName, objectID }: DeleteObjectProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'deleteObjectWithHTTPInfo', indexName); - - validateRequired('objectID', 'deleteObjectWithHTTPInfo', objectID); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Deletes a rule by its ID. To find the object ID for rules, use the [`search` operation](https://www.algolia.com/doc/rest-api/search/search-rules). - * - * 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 { - validateRequired('indexName', 'deleteRule', indexName); - - validateRequired('objectID', 'deleteRule', objectID); - - 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 rule by its ID. To find the object ID for rules, use the [`search` operation](https://www.algolia.com/doc/rest-api/search/search-rules). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteRule for the plain version. - */ - deleteRuleWithHTTPInfo( - { indexName, objectID, forwardToReplicas }: DeleteRuleProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'deleteRuleWithHTTPInfo', indexName); - - validateRequired('objectID', 'deleteRuleWithHTTPInfo', objectID); - - 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.requestWithHttpInfo(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 { - validateRequired('source', 'deleteSource', source); - - 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 source from the list of allowed sources. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteSource for the plain version. - */ - deleteSourceWithHTTPInfo( - { source }: DeleteSourceProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('source', 'deleteSourceWithHTTPInfo', source); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Deletes a synonym by its ID. To find the object IDs of your synonyms, use the [`search` operation](https://www.algolia.com/doc/rest-api/search/search-synonyms). - * - * 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 { - validateRequired('indexName', 'deleteSynonym', indexName); - - validateRequired('objectID', 'deleteSynonym', objectID); - - 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); - }, - /** - * Deletes a synonym by its ID. To find the object IDs of your synonyms, use the [`search` operation](https://www.algolia.com/doc/rest-api/search/search-synonyms). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteSynonym for the plain version. - */ - deleteSynonymWithHTTPInfo( - { indexName, objectID, forwardToReplicas }: DeleteSynonymProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'deleteSynonymWithHTTPInfo', indexName); - - validateRequired('objectID', 'deleteSynonymWithHTTPInfo', objectID); - - 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.requestWithHttpInfo(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 ``. - * - * Required API Key ACLs: - * - search - * @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 { - validateRequired('key', 'getApiKey', key); - - 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); - }, - /** - * 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 ``. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - search - * @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. - * @see getApiKey for the plain version. - */ - getApiKeyWithHTTPInfo( - { key }: GetApiKeyProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('key', 'getApiKeyWithHTTPInfo', key); - - 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.requestWithHttpInfo(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 { - validateRequired('taskID', 'getAppTask', taskID); - - 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); - }, - /** - * Checks the status of a given application task. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getAppTask for the plain version. - */ - getAppTaskWithHTTPInfo( - { taskID }: GetAppTaskProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'getAppTaskWithHTTPInfo', taskID); - - 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.requestWithHttpInfo(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 | undefined): 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); - }, - /** - * Lists supported languages with their supported dictionary types and number of custom entries. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getDictionaryLanguages for the plain version. - */ - getDictionaryLanguagesWithHTTPInfo( - requestOptions?: RequestOptions | undefined, - ): Promise> { - const requestPath = '/1/dictionaries/*/languages'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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 | undefined): 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); - }, - /** - * Retrieves the languages for which standard dictionary entries are turned off. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getDictionarySettings for the plain version. - */ - getDictionarySettingsWithHTTPInfo( - requestOptions?: RequestOptions | undefined, - ): Promise> { - const requestPath = '/1/dictionaries/*/settings'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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/articles/17245378392977-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); - }, - /** - * 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/articles/17245378392977-How-does-Algolia-count-records-and-operations) but doesn\'t appear in the logs itself. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getLogs for the plain version. - */ - getLogsWithHTTPInfo( - { 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves one record by its object ID. To retrieve more than one record, use the [`objects` operation](https://www.algolia.com/doc/rest-api/search/get-objects). - * - * 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 { - validateRequired('indexName', 'getObject', indexName); - - validateRequired('objectID', 'getObject', objectID); - - 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 record by its object ID. To retrieve more than one record, use the [`objects` operation](https://www.algolia.com/doc/rest-api/search/get-objects). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getObject for the plain version. - */ - getObjectWithHTTPInfo>( - { indexName, objectID, attributesToRetrieve }: GetObjectProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'getObjectWithHTTPInfo', indexName); - - validateRequired('objectID', 'getObjectWithHTTPInfo', objectID); - - 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.requestWithHttpInfo(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> { - validateRequired('getObjectsParams', 'getObjects', getObjectsParams); - - validateRequired('getObjectsParams.requests', 'getObjects', getObjectsParams.requests); - - 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 one or more records, potentially from different indices. Records are returned in the same order as the requests. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getObjects for the plain version. - */ - getObjectsWithHTTPInfo( - getObjectsParams: GetObjectsParams, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('getObjectsParams', 'getObjectsWithHTTPInfo', getObjectsParams); - - validateRequired('getObjectsParams.requests', 'getObjectsWithHTTPInfo', getObjectsParams.requests); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves a rule by its ID. To find the object ID of rules, use the [`search` operation](https://www.algolia.com/doc/rest-api/search/search-rules). - * - * 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 { - validateRequired('indexName', 'getRule', indexName); - - validateRequired('objectID', 'getRule', objectID); - - 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 a rule by its ID. To find the object ID of rules, use the [`search` operation](https://www.algolia.com/doc/rest-api/search/search-rules). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getRule for the plain version. - */ - getRuleWithHTTPInfo( - { indexName, objectID }: GetRuleProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'getRuleWithHTTPInfo', indexName); - - validateRequired('objectID', 'getRuleWithHTTPInfo', objectID); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves an object with non-null index settings. - * - * Required API Key ACLs: - * - settings - * @param getSettings - The getSettings object. - * @param getSettings.indexName - Name of the index on which to perform the operation. - * @param getSettings.getVersion - When set to 2, the endpoint will not include `synonyms` in the response. This parameter is here for backward compatibility. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - getSettings( - { indexName, getVersion }: GetSettingsProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('indexName', 'getSettings', indexName); - - const requestPath = '/1/indexes/{indexName}/settings'.replace('{indexName}', encodeURIComponent(indexName)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (getVersion !== undefined) { - queryParameters['getVersion'] = getVersion.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Retrieves an object with non-null index settings. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - settings - * @param getSettings - The getSettings object. - * @param getSettings.indexName - Name of the index on which to perform the operation. - * @param getSettings.getVersion - When set to 2, the endpoint will not include `synonyms` in the response. This parameter is here for backward compatibility. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getSettings for the plain version. - */ - getSettingsWithHTTPInfo( - { indexName, getVersion }: GetSettingsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'getSettingsWithHTTPInfo', indexName); - - const requestPath = '/1/indexes/{indexName}/settings'.replace('{indexName}', encodeURIComponent(indexName)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (getVersion !== undefined) { - queryParameters['getVersion'] = getVersion.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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 | undefined): 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 all allowed IP addresses with access to your application. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - admin - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getSources for the plain version. - */ - getSourcesWithHTTPInfo(requestOptions?: RequestOptions | undefined): Promise>> { - const requestPath = '/1/security/sources'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves a synonym by its ID. To find the object IDs for your synonyms, use the [`search` operation](https://www.algolia.com/doc/rest-api/search/search-synonyms). - * - * 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 { - validateRequired('indexName', 'getSynonym', indexName); - - validateRequired('objectID', 'getSynonym', objectID); - - 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); - }, - /** - * Retrieves a synonym by its ID. To find the object IDs for your synonyms, use the [`search` operation](https://www.algolia.com/doc/rest-api/search/search-synonyms). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getSynonym for the plain version. - */ - getSynonymWithHTTPInfo( - { indexName, objectID }: GetSynonymProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'getSynonymWithHTTPInfo', indexName); - - validateRequired('objectID', 'getSynonymWithHTTPInfo', objectID); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'getTask', indexName); - - validateRequired('taskID', 'getTask', taskID); - - 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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getTask for the plain version. - */ - getTaskWithHTTPInfo( - { indexName, taskID }: GetTaskProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'getTaskWithHTTPInfo', indexName); - - validateRequired('taskID', 'getTaskWithHTTPInfo', taskID); - - 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.requestWithHttpInfo(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 | undefined): 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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - admin - * - * @deprecated - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getTopUserIds for the plain version. - */ - getTopUserIdsWithHTTPInfo( - requestOptions?: RequestOptions | undefined, - ): Promise> { - const requestPath = '/1/clusters/mapping/top'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('userID', 'getUserId', userID); - - 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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getUserId for the plain version. - */ - getUserIdWithHTTPInfo( - { userID }: GetUserIdProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('userID', 'getUserIdWithHTTPInfo', userID); - - 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.requestWithHttpInfo(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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see hasPendingMappings for the plain version. - */ - hasPendingMappingsWithHTTPInfo( - { 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.requestWithHttpInfo(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 | undefined): 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 all API keys associated with your Algolia application, including their permissions and restrictions. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - admin - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see listApiKeys for the plain version. - */ - listApiKeysWithHTTPInfo( - requestOptions?: RequestOptions | undefined, - ): Promise> { - const requestPath = '/1/keys'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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 | undefined): 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 the available clusters in a multi-cluster setup. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - admin - * - * @deprecated - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see listClusters for the plain version. - */ - listClustersWithHTTPInfo( - requestOptions?: RequestOptions | undefined, - ): Promise> { - const requestPath = '/1/clusters'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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 all indices in the current Algolia application. The request follows any index restrictions of the API key you use to make the request. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see listIndices for the plain version. - */ - listIndicesWithHTTPInfo( - { 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.requestWithHttpInfo(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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see listUserIds for the plain version. - */ - listUserIdsWithHTTPInfo( - { 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.requestWithHttpInfo(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/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). - * - * Required API Key ACLs: - * - addObject - * @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 { - validateRequired('batchParams', 'multipleBatch', batchParams); - - validateRequired('batchParams.requests', 'multipleBatch', batchParams.requests); - - 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); - }, - /** - * 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/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * @param batchParams - The batchParams object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see multipleBatch for the plain version. - */ - multipleBatchWithHTTPInfo( - batchParams: BatchParams, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('batchParams', 'multipleBatchWithHTTPInfo', batchParams); - - validateRequired('batchParams.requests', 'multipleBatchWithHTTPInfo', batchParams.requests); - - const requestPath = '/1/indexes/*/batch'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: batchParams, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Copies or moves (renames) an index within the same Algolia application. Notes: - Existing destination indices are overwritten, except for their analytics data. - If the destination index doesn\'t exist yet, it\'s created. - This operation is resource-intensive. **Copy** - If the source index doesn\'t exist, copying creates a new index with 0 records and default settings. - API keys from 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). - For more information, see [Copy indices](https://www.algolia.com/doc/guides/sending-and-managing-data/manage-indices-and-apps/manage-indices/how-to/copy-indices). **Move** - If the source index doesn\'t exist, moving 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. - For more information, see [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/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 { - validateRequired('indexName', 'operationIndex', indexName); - - validateRequired('operationIndexParams', 'operationIndex', operationIndexParams); - - validateRequired('operationIndexParams.operation', 'operationIndex', operationIndexParams.operation); - validateRequired('operationIndexParams.destination', 'operationIndex', operationIndexParams.destination); - - 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); - }, - /** - * Copies or moves (renames) an index within the same Algolia application. Notes: - Existing destination indices are overwritten, except for their analytics data. - If the destination index doesn\'t exist yet, it\'s created. - This operation is resource-intensive. **Copy** - If the source index doesn\'t exist, copying creates a new index with 0 records and default settings. - API keys from 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). - For more information, see [Copy indices](https://www.algolia.com/doc/guides/sending-and-managing-data/manage-indices-and-apps/manage-indices/how-to/copy-indices). **Move** - If the source index doesn\'t exist, moving 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. - For more information, see [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/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see operationIndex for the plain version. - */ - operationIndexWithHTTPInfo( - { indexName, operationIndexParams }: OperationIndexProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'operationIndexWithHTTPInfo', indexName); - - validateRequired('operationIndexParams', 'operationIndexWithHTTPInfo', operationIndexParams); - - validateRequired('operationIndexParams.operation', 'operationIndexWithHTTPInfo', operationIndexParams.operation); - validateRequired( - 'operationIndexParams.destination', - 'operationIndexWithHTTPInfo', - operationIndexParams.destination, - ); - - 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.requestWithHttpInfo(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. - Use first-level attributes only. Nested attributes aren\'t supported. If you specify a nested attribute, this operation replaces its first-level ancestor. To update attributes without replacing the full record, use these built-in operations. These operations are useful when the initial data isn\'t available. - `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. Otherwise, the update is ignored. Example: If you pass an `IncrementFrom` value of 2 for the `version` attribute but the current value is 1, the API ignores the update. If the object doesn\'t exist, the API 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. Otherwise, the update is ignored. Example: If you pass an `IncrementSet` value of 2 for the `version` attribute and the current value is 1, the API updates the object. If the object doesn\'t exist yet, the API only creates it if you pass an `IncrementSet` value greater than 0. Specify an operation by providing an object with the attribute to update as the key and its value as an object with these properties: - `_operation`: the operation to apply on the attribute. - `value`: the right-hand side argument to the operation, for example, increment or decrement step, or a value to add or remove. When updating multiple attributes or using multiple operations targeting the same record, use a single partial update for faster processing. This operation is subject to [indexing rate limits](https://support.algolia.com/hc/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 { - validateRequired('indexName', 'partialUpdateObject', indexName); - - validateRequired('objectID', 'partialUpdateObject', objectID); - - validateRequired('attributesToUpdate', 'partialUpdateObject', attributesToUpdate); - - 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); - }, - /** - * 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. - Use first-level attributes only. Nested attributes aren\'t supported. If you specify a nested attribute, this operation replaces its first-level ancestor. To update attributes without replacing the full record, use these built-in operations. These operations are useful when the initial data isn\'t available. - `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. Otherwise, the update is ignored. Example: If you pass an `IncrementFrom` value of 2 for the `version` attribute but the current value is 1, the API ignores the update. If the object doesn\'t exist, the API 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. Otherwise, the update is ignored. Example: If you pass an `IncrementSet` value of 2 for the `version` attribute and the current value is 1, the API updates the object. If the object doesn\'t exist yet, the API only creates it if you pass an `IncrementSet` value greater than 0. Specify an operation by providing an object with the attribute to update as the key and its value as an object with these properties: - `_operation`: the operation to apply on the attribute. - `value`: the right-hand side argument to the operation, for example, increment or decrement step, or a value to add or remove. When updating multiple attributes or using multiple operations targeting the same record, use a single partial update for faster processing. This operation is subject to [indexing rate limits](https://support.algolia.com/hc/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see partialUpdateObject for the plain version. - */ - partialUpdateObjectWithHTTPInfo( - { indexName, objectID, attributesToUpdate, createIfNotExists }: PartialUpdateObjectProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'partialUpdateObjectWithHTTPInfo', indexName); - - validateRequired('objectID', 'partialUpdateObjectWithHTTPInfo', objectID); - - validateRequired('attributesToUpdate', 'partialUpdateObjectWithHTTPInfo', attributesToUpdate); - - 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.requestWithHttpInfo(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 { - validateRequired('userID', 'removeUserId', userID); - - 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); - }, - /** - * Deletes a user ID and its associated data from the clusters. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see removeUserId for the plain version. - */ - removeUserIdWithHTTPInfo( - { userID }: RemoveUserIdProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('userID', 'removeUserIdWithHTTPInfo', userID); - - 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.requestWithHttpInfo(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 { - validateRequired('source', 'replaceSources', source); - - 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); - }, - /** - * Replaces the list of allowed sources. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see replaceSources for the plain version. - */ - replaceSourcesWithHTTPInfo( - { source }: ReplaceSourcesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('source', 'replaceSourcesWithHTTPInfo', source); - - const requestPath = '/1/security/sources'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PUT', - path: requestPath, - queryParameters, - headers, - data: source, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('key', 'restoreApiKey', key); - - 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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see restoreApiKey for the plain version. - */ - restoreApiKeyWithHTTPInfo( - { key }: RestoreApiKeyProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('key', 'restoreApiKeyWithHTTPInfo', key); - - 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.requestWithHttpInfo(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](https://www.algolia.com/doc/rest-api/search/partial-update-object). To add, update, or replace multiple records, use the [`batch` operation](https://www.algolia.com/doc/rest-api/search/batch). This operation is subject to [indexing rate limits](https://support.algolia.com/hc/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 { - validateRequired('indexName', 'saveObject', indexName); - - validateRequired('body', 'saveObject', body); - - 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); - }, - /** - * 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](https://www.algolia.com/doc/rest-api/search/partial-update-object). To add, update, or replace multiple records, use the [`batch` operation](https://www.algolia.com/doc/rest-api/search/batch). This operation is subject to [indexing rate limits](https://support.algolia.com/hc/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see saveObject for the plain version. - */ - saveObjectWithHTTPInfo( - { indexName, body }: SaveObjectProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'saveObjectWithHTTPInfo', indexName); - - validateRequired('body', 'saveObjectWithHTTPInfo', body); - - 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.requestWithHttpInfo(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](https://www.algolia.com/doc/rest-api/search/save-rules). - * - * 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 { - validateRequired('indexName', 'saveRule', indexName); - - validateRequired('objectID', 'saveRule', objectID); - - validateRequired('rule', 'saveRule', rule); - - validateRequired('rule.objectID', 'saveRule', rule.objectID); - validateRequired('rule.consequence', 'saveRule', rule.consequence); - - 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); - }, - /** - * 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](https://www.algolia.com/doc/rest-api/search/save-rules). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see saveRule for the plain version. - */ - saveRuleWithHTTPInfo( - { indexName, objectID, rule, forwardToReplicas }: SaveRuleProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'saveRuleWithHTTPInfo', indexName); - - validateRequired('objectID', 'saveRuleWithHTTPInfo', objectID); - - validateRequired('rule', 'saveRuleWithHTTPInfo', rule); - - validateRequired('rule.objectID', 'saveRuleWithHTTPInfo', rule.objectID); - validateRequired('rule.consequence', 'saveRuleWithHTTPInfo', rule.consequence); - - 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.requestWithHttpInfo(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/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 { - validateRequired('indexName', 'saveRules', indexName); - - validateRequired('rules', 'saveRules', rules); - - 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); - }, - /** - * 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/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see saveRules for the plain version. - */ - saveRulesWithHTTPInfo( - { indexName, rules, forwardToReplicas, clearExistingRules }: SaveRulesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'saveRulesWithHTTPInfo', indexName); - - validateRequired('rules', 'saveRulesWithHTTPInfo', rules); - - 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.requestWithHttpInfo(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](https://www.algolia.com/doc/rest-api/search/save-synonyms). - * - * 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 { - validateRequired('indexName', 'saveSynonym', indexName); - - validateRequired('objectID', 'saveSynonym', objectID); - - validateRequired('synonymHit', 'saveSynonym', synonymHit); - - validateRequired('synonymHit.objectID', 'saveSynonym', synonymHit.objectID); - validateRequired('synonymHit.type', 'saveSynonym', synonymHit.type); - - 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 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](https://www.algolia.com/doc/rest-api/search/save-synonyms). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see saveSynonym for the plain version. - */ - saveSynonymWithHTTPInfo( - { indexName, objectID, synonymHit, forwardToReplicas }: SaveSynonymProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'saveSynonymWithHTTPInfo', indexName); - - validateRequired('objectID', 'saveSynonymWithHTTPInfo', objectID); - - validateRequired('synonymHit', 'saveSynonymWithHTTPInfo', synonymHit); - - validateRequired('synonymHit.objectID', 'saveSynonymWithHTTPInfo', synonymHit.objectID); - validateRequired('synonymHit.type', 'saveSynonymWithHTTPInfo', synonymHit.type); - - 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.requestWithHttpInfo(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/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 { - validateRequired('indexName', 'saveSynonyms', indexName); - - validateRequired('synonymHit', 'saveSynonyms', synonymHit); - - 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); - }, - /** - * 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/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see saveSynonyms for the plain version. - */ - saveSynonymsWithHTTPInfo( - { indexName, synonymHit, forwardToReplicas, replaceExistingSynonyms }: SaveSynonymsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'saveSynonymsWithHTTPInfo', indexName); - - validateRequired('synonymHit', 'saveSynonymsWithHTTPInfo', synonymHit); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Runs multiple search queries against one or more indices in a single API request. Use cases include: - Searching different indices, such as products and marketing content. - Run multiple queries on the same index with different parameters or filters. If you know the expected result type, use the `searchForHits` or `searchForFacets` helper to simplify the response format. - * - * Required API Key ACLs: - * - search - * @param searchMethodParams - Multi-query 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; - } - - validateRequired('searchMethodParams', 'search', searchMethodParams); - - validateRequired('searchMethodParams.requests', 'search', searchMethodParams.requests); - - 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); - }, - /** - * Runs multiple search queries against one or more indices in a single API request. Use cases include: - Searching different indices, such as products and marketing content. - Run multiple queries on the same index with different parameters or filters. If you know the expected result type, use the `searchForHits` or `searchForFacets` helper to simplify the response format. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - search - * @param searchMethodParams - Multi-query 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. - * @see search for the plain version. - */ - searchWithHTTPInfo( - 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; - } - - validateRequired('searchMethodParams', 'searchWithHTTPInfo', searchMethodParams); - - validateRequired('searchMethodParams.requests', 'searchWithHTTPInfo', searchMethodParams.requests); - - 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.requestWithHttpInfo(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 { - validateRequired('dictionaryName', 'searchDictionaryEntries', dictionaryName); - - validateRequired('searchDictionaryEntriesParams', 'searchDictionaryEntries', searchDictionaryEntriesParams); - - validateRequired( - 'searchDictionaryEntriesParams.query', - 'searchDictionaryEntries', - searchDictionaryEntriesParams.query, - ); - - 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 standard and custom dictionary entries. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchDictionaryEntries for the plain version. - */ - searchDictionaryEntriesWithHTTPInfo( - { dictionaryName, searchDictionaryEntriesParams }: SearchDictionaryEntriesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('dictionaryName', 'searchDictionaryEntriesWithHTTPInfo', dictionaryName); - - validateRequired( - 'searchDictionaryEntriesParams', - 'searchDictionaryEntriesWithHTTPInfo', - searchDictionaryEntriesParams, - ); - - validateRequired( - 'searchDictionaryEntriesParams.query', - 'searchDictionaryEntriesWithHTTPInfo', - searchDictionaryEntriesParams.query, - ); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'searchForFacetValues', indexName); - - validateRequired('facetName', 'searchForFacetValues', facetName); - - 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 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**. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchForFacetValues for the plain version. - */ - searchForFacetValuesWithHTTPInfo( - { indexName, facetName, searchForFacetValuesRequest }: SearchForFacetValuesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'searchForFacetValuesWithHTTPInfo', indexName); - - validateRequired('facetName', 'searchForFacetValuesWithHTTPInfo', facetName); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'searchRules', indexName); - - 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 for rules in your index. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchRules for the plain version. - */ - searchRulesWithHTTPInfo( - { indexName, searchRulesParams }: SearchRulesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'searchRulesWithHTTPInfo', indexName); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Searches a single index and returns matching search results as hits. This method lets you retrieve up to 1,000 hits. If you need more, use the [`browse` operation](https://www.algolia.com/doc/rest-api/search/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> { - validateRequired('indexName', 'searchSingleIndex', indexName); - - 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 a single index and returns matching search results as hits. This method lets you retrieve up to 1,000 hits. If you need more, use the [`browse` operation](https://www.algolia.com/doc/rest-api/search/browse) or increase the `paginatedLimitedTo` index setting. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchSingleIndex for the plain version. - */ - searchSingleIndexWithHTTPInfo( - { indexName, searchParams }: SearchSingleIndexProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('indexName', 'searchSingleIndexWithHTTPInfo', indexName); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'searchSynonyms', indexName); - - 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); - }, - /** - * Searches for synonyms in your index. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchSynonyms for the plain version. - */ - searchSynonymsWithHTTPInfo( - { indexName, searchSynonymsParams }: SearchSynonymsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'searchSynonymsWithHTTPInfo', indexName); - - 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.requestWithHttpInfo(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 { - validateRequired('searchUserIdsParams', 'searchUserIds', searchUserIdsParams); - - validateRequired('searchUserIdsParams.query', 'searchUserIds', searchUserIdsParams.query); - - 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); - }, - /** - * 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). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchUserIds for the plain version. - */ - searchUserIdsWithHTTPInfo( - searchUserIdsParams: SearchUserIdsParams, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('searchUserIdsParams', 'searchUserIdsWithHTTPInfo', searchUserIdsParams); - - validateRequired('searchUserIdsParams.query', 'searchUserIdsWithHTTPInfo', searchUserIdsParams.query); - - 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.requestWithHttpInfo(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 { - validateRequired('dictionarySettingsParams', 'setDictionarySettings', dictionarySettingsParams); - - validateRequired( - 'dictionarySettingsParams.disableStandardEntries', - 'setDictionarySettings', - dictionarySettingsParams.disableStandardEntries, - ); - - 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); - }, - /** - * Turns standard stop word dictionary entries on or off for a given language. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see setDictionarySettings for the plain version. - */ - setDictionarySettingsWithHTTPInfo( - dictionarySettingsParams: DictionarySettingsParams, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('dictionarySettingsParams', 'setDictionarySettingsWithHTTPInfo', dictionarySettingsParams); - - validateRequired( - 'dictionarySettingsParams.disableStandardEntries', - 'setDictionarySettingsWithHTTPInfo', - dictionarySettingsParams.disableStandardEntries, - ); - - const requestPath = '/1/dictionaries/*/settings'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PUT', - path: requestPath, - queryParameters, - headers, - data: dictionarySettingsParams, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('indexName', 'setSettings', indexName); - - validateRequired('indexSettings', 'setSettings', indexSettings); - - 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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see setSettings for the plain version. - */ - setSettingsWithHTTPInfo( - { indexName, indexSettings, forwardToReplicas }: SetSettingsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'setSettingsWithHTTPInfo', indexName); - - validateRequired('indexSettings', 'setSettingsWithHTTPInfo', indexSettings); - - 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.requestWithHttpInfo(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 { - validateRequired('key', 'updateApiKey', key); - - validateRequired('apiKey', 'updateApiKey', apiKey); - - validateRequired('apiKey.acl', 'updateApiKey', apiKey.acl); - - 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); - }, - /** - * Replaces the permissions of an existing API key. Any unspecified attribute resets that attribute to its default value. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see updateApiKey for the plain version. - */ - updateApiKeyWithHTTPInfo( - { key, apiKey }: UpdateApiKeyProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('key', 'updateApiKeyWithHTTPInfo', key); - - validateRequired('apiKey', 'updateApiKeyWithHTTPInfo', apiKey); - - validateRequired('apiKey.acl', 'updateApiKeyWithHTTPInfo', apiKey.acl); - - 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.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/client-search/src/types/AddApiKeyOptions.ts b/packages/client-search/src/types/AddApiKeyOptions.ts new file mode 100644 index 000000000..ef43ad095 --- /dev/null +++ b/packages/client-search/src/types/AddApiKeyOptions.ts @@ -0,0 +1,37 @@ +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 new file mode 100644 index 000000000..4d92c0ea7 --- /dev/null +++ b/packages/client-search/src/types/AddApiKeyResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..093e12e6c --- /dev/null +++ b/packages/client-search/src/types/ApiKeyType.ts @@ -0,0 +1,32 @@ +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 new file mode 100644 index 000000000..0e2813c35 --- /dev/null +++ b/packages/client-search/src/types/AssignUserIDResponse.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..8207d520f --- /dev/null +++ b/packages/client-search/src/types/AssignUserIDsResponse.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..e6c8e2bed --- /dev/null +++ b/packages/client-search/src/types/BatchActionType.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..183ba6589 --- /dev/null +++ b/packages/client-search/src/types/BatchRequest.ts @@ -0,0 +1,14 @@ +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 new file mode 100644 index 000000000..a68d9eb70 --- /dev/null +++ b/packages/client-search/src/types/BatchResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..5562d327a --- /dev/null +++ b/packages/client-search/src/types/BrowseOptions.ts @@ -0,0 +1,15 @@ +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 new file mode 100644 index 000000000..4ea333dcd --- /dev/null +++ b/packages/client-search/src/types/BrowseRequestData.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..89cfb9e98 --- /dev/null +++ b/packages/client-search/src/types/BrowseResponse.ts @@ -0,0 +1,13 @@ +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 new file mode 100644 index 000000000..b7dbf7177 --- /dev/null +++ b/packages/client-search/src/types/ChunkOptions.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..25f5cf6d8 --- /dev/null +++ b/packages/client-search/src/types/ChunkedBatchResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..40f64f243 --- /dev/null +++ b/packages/client-search/src/types/ClearRulesOptions.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..2a6a1433a --- /dev/null +++ b/packages/client-search/src/types/ClearSynonymsOptions.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..59abb2fb3 --- /dev/null +++ b/packages/client-search/src/types/Cluster.ts @@ -0,0 +1,21 @@ +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 new file mode 100644 index 000000000..c303d85da --- /dev/null +++ b/packages/client-search/src/types/CopyIndexOptions.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..60c24c292 --- /dev/null +++ b/packages/client-search/src/types/CreateIndex.ts @@ -0,0 +1,13 @@ +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 new file mode 100644 index 000000000..1a8491883 --- /dev/null +++ b/packages/client-search/src/types/DeleteApiKeyResponse.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..d80181997 --- /dev/null +++ b/packages/client-search/src/types/DeleteByFiltersOptions.ts @@ -0,0 +1,43 @@ +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 new file mode 100644 index 000000000..25876a738 --- /dev/null +++ b/packages/client-search/src/types/DeleteResponse.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..6a942d754 --- /dev/null +++ b/packages/client-search/src/types/DeleteSynonymOptions.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..5769d1915 --- /dev/null +++ b/packages/client-search/src/types/DictionaryEntriesOptions.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..1ae88d50c --- /dev/null +++ b/packages/client-search/src/types/DictionaryEntriesResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..f3c061ddd --- /dev/null +++ b/packages/client-search/src/types/DictionaryEntry.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..46333d441 --- /dev/null +++ b/packages/client-search/src/types/DictionaryName.ts @@ -0,0 +1 @@ +export type DictionaryName = 'plurals' | 'stopwords' | 'compounds'; diff --git a/packages/client-search/src/types/DictionarySettings.ts b/packages/client-search/src/types/DictionarySettings.ts new file mode 100644 index 000000000..2a6a4c48d --- /dev/null +++ b/packages/client-search/src/types/DictionarySettings.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..1d61cc67d --- /dev/null +++ b/packages/client-search/src/types/FacetHit.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..4007fd6c0 --- /dev/null +++ b/packages/client-search/src/types/FindAnswersOptions.ts @@ -0,0 +1,47 @@ +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 new file mode 100644 index 000000000..922e5c92f --- /dev/null +++ b/packages/client-search/src/types/FindAnswersResponse.ts @@ -0,0 +1,21 @@ +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 new file mode 100644 index 000000000..050549564 --- /dev/null +++ b/packages/client-search/src/types/FindObjectOptions.ts @@ -0,0 +1,13 @@ +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 new file mode 100644 index 000000000..6871805aa --- /dev/null +++ b/packages/client-search/src/types/FindObjectResponse.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..9a894dfcb --- /dev/null +++ b/packages/client-search/src/types/GetApiKeyResponse.ts @@ -0,0 +1,61 @@ +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 new file mode 100644 index 000000000..88ddad87d --- /dev/null +++ b/packages/client-search/src/types/GetDictionarySettingsResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..e05da6d63 --- /dev/null +++ b/packages/client-search/src/types/GetLogsOptions.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..d9dcab6b3 --- /dev/null +++ b/packages/client-search/src/types/GetLogsResponse.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..e6d13d59f --- /dev/null +++ b/packages/client-search/src/types/GetObjectOptions.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..dcbb4bda9 --- /dev/null +++ b/packages/client-search/src/types/GetObjectsOptions.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..30a5730f3 --- /dev/null +++ b/packages/client-search/src/types/GetObjectsResponse.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..042ad494a --- /dev/null +++ b/packages/client-search/src/types/GetTopUserIDsResponse.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..b39e93785 --- /dev/null +++ b/packages/client-search/src/types/HasPendingMappingsOptions.ts @@ -0,0 +1,17 @@ +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 new file mode 100644 index 000000000..aa3061ea6 --- /dev/null +++ b/packages/client-search/src/types/HasPendingMappingsResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..ea26febf3 --- /dev/null +++ b/packages/client-search/src/types/Hit.ts @@ -0,0 +1,55 @@ +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 new file mode 100644 index 000000000..5606eed0b --- /dev/null +++ b/packages/client-search/src/types/IndexOperationResponse.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..203e7cc37 --- /dev/null +++ b/packages/client-search/src/types/Indice.ts @@ -0,0 +1,63 @@ +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 new file mode 100644 index 000000000..16feddb7b --- /dev/null +++ b/packages/client-search/src/types/ListApiKeysResponse.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..54dfee45d --- /dev/null +++ b/packages/client-search/src/types/ListClustersResponse.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..951a3c9f8 --- /dev/null +++ b/packages/client-search/src/types/ListIndicesResponse.ts @@ -0,0 +1,13 @@ +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 new file mode 100644 index 000000000..84678ba4a --- /dev/null +++ b/packages/client-search/src/types/ListUserIDsOptions.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..a4ff097cd --- /dev/null +++ b/packages/client-search/src/types/ListUserIDsResponse.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..84c23bfc9 --- /dev/null +++ b/packages/client-search/src/types/Log.ts @@ -0,0 +1,96 @@ +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 new file mode 100644 index 000000000..20f9886e2 --- /dev/null +++ b/packages/client-search/src/types/MultipleBatchRequest.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..0fe20b9c8 --- /dev/null +++ b/packages/client-search/src/types/MultipleBatchResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..d716e1f16 --- /dev/null +++ b/packages/client-search/src/types/MultipleGetObject.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..eeef3ea1d --- /dev/null +++ b/packages/client-search/src/types/MultipleGetObjectsResponse.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..9c60f7977 --- /dev/null +++ b/packages/client-search/src/types/MultipleQueriesOptions.ts @@ -0,0 +1,10 @@ +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 new file mode 100644 index 000000000..41f29699e --- /dev/null +++ b/packages/client-search/src/types/MultipleQueriesQuery.ts @@ -0,0 +1,48 @@ +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 new file mode 100644 index 000000000..8b57f44e6 --- /dev/null +++ b/packages/client-search/src/types/MultipleQueriesResponse.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..277ae8a3f --- /dev/null +++ b/packages/client-search/src/types/ObjectWithObjectID.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..25a43ab41 --- /dev/null +++ b/packages/client-search/src/types/PartialUpdateObjectResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..75e415ae9 --- /dev/null +++ b/packages/client-search/src/types/PartialUpdateObjectsOptions.ts @@ -0,0 +1,6 @@ +export type PartialUpdateObjectsOptions = { + /** + * If the object should be created when does not exist. + */ + readonly createIfNotExists?: boolean; +}; diff --git a/packages/client-search/src/types/RedirectRuleIndexMetadata.ts b/packages/client-search/src/types/RedirectRuleIndexMetadata.ts new file mode 100644 index 000000000..3f7011eb9 --- /dev/null +++ b/packages/client-search/src/types/RedirectRuleIndexMetadata.ts @@ -0,0 +1,31 @@ +export type RedirectRuleIndexMetadata = { + /** + * Source index for the redirect rule + */ + readonly source: string; + + /** + * Destination index for the redirect rule + */ + readonly dest: string; + + /** + * Reason for the redirect rule + */ + readonly reason: string; + + /** + * Status for the redirect rule + */ + readonly succeed: boolean; + + /** + * Data for the redirect rule + */ + readonly data: { + /** + * Rule objectId + */ + readonly ruleObjectID: string; + }; +}; diff --git a/packages/client-search/src/types/RemoveUserIDResponse.ts b/packages/client-search/src/types/RemoveUserIDResponse.ts new file mode 100644 index 000000000..392c44acd --- /dev/null +++ b/packages/client-search/src/types/RemoveUserIDResponse.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..c4d5f869f --- /dev/null +++ b/packages/client-search/src/types/ReplaceAllObjectsOptions.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..9b2cb5406 --- /dev/null +++ b/packages/client-search/src/types/RequireAtLeastOne.ts @@ -0,0 +1,4 @@ +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 new file mode 100644 index 000000000..4d7fad6ed --- /dev/null +++ b/packages/client-search/src/types/RestoreApiKeyResponse.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..1b8abe319 --- /dev/null +++ b/packages/client-search/src/types/Rule.ts @@ -0,0 +1,203 @@ +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 new file mode 100644 index 000000000..f28b40b2d --- /dev/null +++ b/packages/client-search/src/types/SaveObjectResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..8f49e107e --- /dev/null +++ b/packages/client-search/src/types/SaveObjectsOptions.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..30366aedf --- /dev/null +++ b/packages/client-search/src/types/SaveRuleResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..260a0c13b --- /dev/null +++ b/packages/client-search/src/types/SaveRulesOptions.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..813fd2451 --- /dev/null +++ b/packages/client-search/src/types/SaveRulesResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..cd6b7cf2d --- /dev/null +++ b/packages/client-search/src/types/SaveSynonymResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..cc3788964 --- /dev/null +++ b/packages/client-search/src/types/SaveSynonymsOptions.ts @@ -0,0 +1,17 @@ +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 new file mode 100644 index 000000000..ca49227a5 --- /dev/null +++ b/packages/client-search/src/types/SaveSynonymsResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..d7ba06739 --- /dev/null +++ b/packages/client-search/src/types/SearchClient.ts @@ -0,0 +1,23 @@ +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 new file mode 100644 index 000000000..266ebebf6 --- /dev/null +++ b/packages/client-search/src/types/SearchClientOptions.ts @@ -0,0 +1,19 @@ +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 new file mode 100644 index 000000000..1d054e0af --- /dev/null +++ b/packages/client-search/src/types/SearchDictionaryEntriesResponse.ts @@ -0,0 +1,26 @@ +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 new file mode 100644 index 000000000..fcc74d7c1 --- /dev/null +++ b/packages/client-search/src/types/SearchForFacetValuesQueryParams.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..37e60fd59 --- /dev/null +++ b/packages/client-search/src/types/SearchForFacetValuesResponse.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..996e826c2 --- /dev/null +++ b/packages/client-search/src/types/SearchIndex.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..091949434 --- /dev/null +++ b/packages/client-search/src/types/SearchOptions.ts @@ -0,0 +1,381 @@ +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[]; + + /** + * Controls how facet values are sorted. + */ + 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; + + /** + * Define the maximum radius for a geo search (in meters). + */ + 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[]; + + /** + * Enriches the API’s response with meta-information as to how the query was processed. + */ + readonly explain?: readonly string[]; +}; diff --git a/packages/client-search/src/types/SearchResponse.ts b/packages/client-search/src/types/SearchResponse.ts new file mode 100644 index 000000000..b219c5eaf --- /dev/null +++ b/packages/client-search/src/types/SearchResponse.ts @@ -0,0 +1,243 @@ +import { Hit, Settings } from '.'; +import { RedirectRuleIndexMetadata } from './RedirectRuleIndexMetadata'; + +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; + + /** + * If a search encounters an index that is being A/B tested, abTestID reports the ongoing A/B test ID. + */ + abTestID?: number; + + /** + * 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; + + /** + * This parameter is for internal use only. + */ + redirect?: { + index?: RedirectRuleIndexMetadata[]; + }; + }; + + /** + * 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 new file mode 100644 index 000000000..4ca30fcbc --- /dev/null +++ b/packages/client-search/src/types/SearchRulesOptions.ts @@ -0,0 +1,32 @@ +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 new file mode 100644 index 000000000..f92c2c8a8 --- /dev/null +++ b/packages/client-search/src/types/SearchSynonymsOptions.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..7f5578147 --- /dev/null +++ b/packages/client-search/src/types/SearchSynonymsResponse.ts @@ -0,0 +1,13 @@ +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 new file mode 100644 index 000000000..bda821de4 --- /dev/null +++ b/packages/client-search/src/types/SearchUserIDsOptions.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..fa96ec904 --- /dev/null +++ b/packages/client-search/src/types/SearchUserIDsResponse.ts @@ -0,0 +1,28 @@ +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 new file mode 100644 index 000000000..118a719fb --- /dev/null +++ b/packages/client-search/src/types/SecuredApiKeyRestrictions.ts @@ -0,0 +1,23 @@ +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 new file mode 100644 index 000000000..a40b4ef71 --- /dev/null +++ b/packages/client-search/src/types/SetSettingsOptions.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..056a07d97 --- /dev/null +++ b/packages/client-search/src/types/SetSettingsResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..9a2199d46 --- /dev/null +++ b/packages/client-search/src/types/Settings.ts @@ -0,0 +1,380 @@ +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; + + /** + * The search mode that the index will use to query for results. + */ + readonly mode?: 'neuralSearch' | 'keywordSearch'; + + /** + * The settings relevant for configuration of the semantic search engine. + * These settings are only used when the mode is set to 'neuralSearch'. + */ + readonly semanticSearch?: { + /** + * When null, the current index / replica group will be used as the event source. + */ + readonly eventSources?: readonly string[] | null; + }; + + /** + * 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 new file mode 100644 index 000000000..d284d3122 --- /dev/null +++ b/packages/client-search/src/types/Synonym.ts @@ -0,0 +1,56 @@ +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 new file mode 100644 index 000000000..281b009d9 --- /dev/null +++ b/packages/client-search/src/types/TaskStatusResponse.ts @@ -0,0 +1,12 @@ +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 new file mode 100644 index 000000000..c5c3929f4 --- /dev/null +++ b/packages/client-search/src/types/UpdateApiKeyOptions.ts @@ -0,0 +1,44 @@ +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 new file mode 100644 index 000000000..b34eaa51c --- /dev/null +++ b/packages/client-search/src/types/UpdateApiKeyResponse.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..a69c2e0cd --- /dev/null +++ b/packages/client-search/src/types/UserIDResponse.ts @@ -0,0 +1,21 @@ +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 new file mode 100644 index 000000000..e661c20e7 --- /dev/null +++ b/packages/client-search/src/types/index.ts @@ -0,0 +1,101 @@ +/** + * @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 './RedirectRuleIndexMetadata'; +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 deleted file mode 100644 index 444e8bb64..000000000 --- a/packages/client-search/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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 deleted file mode 100644 index 18c416160..000000000 --- a/packages/client-search/tsup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -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', - target: 'es2018', - 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 deleted file mode 100644 index fddf416f9..000000000 --- a/packages/composition/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index 54c16e491..000000000 --- a/packages/composition/README.md +++ /dev/null @@ -1,76 +0,0 @@ -

- - 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 • - 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@1.31.0 -# or -npm install @algolia/composition@1.31.0 -# or -pnpm add @algolia/composition@1.31.0 -``` - -### 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/sdk/methods/composition/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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 deleted file mode 100644 index aa247afd4..000000000 --- a/packages/composition/builds/browser.ts +++ /dev/null @@ -1,56 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -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 | undefined, -): CompositionClient { - if (!appId || typeof appId !== 'string') { - throw new Error('`appId` is missing.'); - } - - if (!apiKey || typeof apiKey !== 'string') { - throw new Error('`apiKey` is missing.'); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - return createCompositionClient({ - appId, - apiKey, - timeouts: { - connect: 1000, - read: 2000, - write: 30000, - }, - logger: createNullLogger(), - requester: createXhrRequester(), - algoliaAgents: [{ segment: 'Browser' }], - authMode: 'WithinHeaders', - requestIdChannel: 'queryParameters', - responsesCache: createMemoryCache(), - requestsCache: createMemoryCache({ serializable: false }), - hostsCache: createFallbackableCache({ - caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], - }), - ...browserOptions, - }); -} - -export type CompositionClient = ReturnType; diff --git a/packages/composition/builds/fetch.ts b/packages/composition/builds/fetch.ts deleted file mode 100644 index bf7c0737b..000000000 --- a/packages/composition/builds/fetch.ts +++ /dev/null @@ -1,51 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -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 | undefined, -): 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' }], - requestIdChannel: 'queryParameters', - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/composition/builds/node.ts b/packages/composition/builds/node.ts deleted file mode 100644 index 7d11a1e3e..000000000 --- a/packages/composition/builds/node.ts +++ /dev/null @@ -1,51 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -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 | undefined, -): 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 }], - requestIdChannel: 'headers', - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/composition/builds/worker.ts b/packages/composition/builds/worker.ts deleted file mode 100644 index cc9c2797a..000000000 --- a/packages/composition/builds/worker.ts +++ /dev/null @@ -1,50 +0,0 @@ -// Code generated by 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 | undefined, -): CompositionClient { - if (!appId || typeof appId !== 'string') { - throw new Error('`appId` is missing.'); - } - - if (!apiKey || typeof apiKey !== 'string') { - throw new Error('`apiKey` is missing.'); - } - - const { compression: _compression, ...workerOptions } = options || {}; - - return { - ...createCompositionClient({ - appId, - apiKey, - timeouts: { - connect: 2000, - read: 5000, - write: 30000, - }, - logger: createNullLogger(), - requester: createFetchRequester(), - algoliaAgents: [{ segment: 'Worker' }], - requestIdChannel: 'queryParameters', - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - ...workerOptions, - }), - }; -} diff --git a/packages/composition/index.d.ts b/packages/composition/index.d.ts deleted file mode 100644 index e81a1cd3e..000000000 --- a/packages/composition/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/node'; diff --git a/packages/composition/index.js b/packages/composition/index.js deleted file mode 100644 index 21e26aad3..000000000 --- a/packages/composition/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/composition/model/action.ts b/packages/composition/model/action.ts deleted file mode 100644 index f00b21c4b..000000000 --- a/packages/composition/model/action.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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/composition/model/advancedSyntaxFeatures.ts b/packages/composition/model/advancedSyntaxFeatures.ts deleted file mode 100644 index 61e577d48..000000000 --- a/packages/composition/model/advancedSyntaxFeatures.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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/composition/model/alternativesAsExact.ts b/packages/composition/model/alternativesAsExact.ts deleted file mode 100644 index b4d50c7a5..000000000 --- a/packages/composition/model/alternativesAsExact.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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/composition/model/anchoring.ts b/packages/composition/model/anchoring.ts deleted file mode 100644 index 9effad076..000000000 --- a/packages/composition/model/anchoring.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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/composition/model/aroundPrecision.ts b/packages/composition/model/aroundPrecision.ts deleted file mode 100644 index 79ff0cd59..000000000 --- a/packages/composition/model/aroundPrecision.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 8198f1e75..000000000 --- a/packages/composition/model/aroundRadius.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index e5f107060..000000000 --- a/packages/composition/model/aroundRadiusAll.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 8eaa250e7..000000000 --- a/packages/composition/model/banner.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - link?: BannerLink | undefined; -}; diff --git a/packages/composition/model/bannerImage.ts b/packages/composition/model/bannerImage.ts deleted file mode 100644 index a41d758ff..000000000 --- a/packages/composition/model/bannerImage.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - title?: string | undefined; -}; diff --git a/packages/composition/model/bannerImageUrl.ts b/packages/composition/model/bannerImageUrl.ts deleted file mode 100644 index 25454a0b9..000000000 --- a/packages/composition/model/bannerImageUrl.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/composition/model/bannerLink.ts b/packages/composition/model/bannerLink.ts deleted file mode 100644 index a9161c475..000000000 --- a/packages/composition/model/bannerLink.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/composition/model/baseInjectionQueryParameters.ts b/packages/composition/model/baseInjectionQueryParameters.ts deleted file mode 100644 index 00549b1b7..000000000 --- a/packages/composition/model/baseInjectionQueryParameters.ts +++ /dev/null @@ -1,205 +0,0 @@ -// Code generated by OpenAPI Generator (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 BaseInjectionQueryParameters = { - /** - * Whether to support phrase matching and excluding words from search queries Use the `advancedSyntaxFeatures` parameter to control which feature is supported. - */ - advancedSyntax?: boolean | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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/doc/guides/sending-events/getting-started). - */ - clickAnalytics?: boolean | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - distinct?: Distinct | undefined; - - /** - * Whether to enable A/B testing for this search. - */ - enableABTest?: boolean | undefined; - - /** - * Whether to enable Personalization. - */ - enablePersonalization?: boolean | undefined; - - /** - * 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 | undefined; - - /** - * Whether to enable rules. - */ - enableRules?: boolean | undefined; - - exactOnSingleWordQuery?: ExactOnSingleWordQuery | undefined; - - facetFilters?: FacetFilters | undefined; - - /** - * 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 if the facet attribute name or facet value contains 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 | undefined; - - /** - * Whether the search response should include detailed ranking information. - */ - getRankingInfo?: boolean | undefined; - - /** - * HTML tag to insert after the highlighted parts in all highlighted results and snippets. - */ - highlightPostTag?: string | undefined; - - /** - * HTML tag to insert before the highlighted parts in all highlighted results and snippets. - */ - highlightPreTag?: string | undefined; - - ignorePlurals?: IgnorePlurals | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - numericFilters?: NumericFilters | undefined; - - optionalFilters?: OptionalFilters | undefined; - - optionalWords?: OptionalWords | null | undefined; - - /** - * Whether to include this search when calculating processing-time percentiles. - */ - percentileComputation?: boolean | undefined; - - /** - * 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 | undefined; - - /** - * 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, place the CJK language **first**. **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 | undefined; - - queryType?: QueryType | undefined; - - removeStopWords?: RemoveStopWords | undefined; - - removeWordsIfNoResults?: RemoveWordsIfNoResults | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Restricts a search to a subset of your searchable attributes. Attribute names are case-sensitive. - */ - restrictSearchableAttributes?: Array | undefined; - - /** - * 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 | undefined; - - /** - * String used as an ellipsis indicator when a snippet is truncated. - */ - snippetEllipsisText?: string | undefined; - - /** - * Whether to take into account an index\'s synonyms for this search. - */ - synonyms?: boolean | undefined; - - typoTolerance?: TypoTolerance | undefined; -}; diff --git a/packages/composition/model/baseSearchResponse.ts b/packages/composition/model/baseSearchResponse.ts deleted file mode 100644 index b6598e49a..000000000 --- a/packages/composition/model/baseSearchResponse.ts +++ /dev/null @@ -1,129 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Variant ID. This is only included in the response for indices that are part of an A/B test. - */ - abTestVariantID?: number | undefined; - - /** - * Computed geographical location. - */ - aroundLatLng?: string | undefined; - - /** - * Distance from a central coordinate provided by `aroundLatLng`. - */ - automaticRadius?: string | undefined; - - exhaustive?: Exhaustive | undefined; - - /** - * Rules applied to the query. - */ - appliedRules?: Array> | undefined; - - /** - * See the `facetsCount` field of the `exhaustive` object in the response. - */ - exhaustiveFacetsCount?: boolean | undefined; - - /** - * See the `nbHits` field of the `exhaustive` object in the response. - */ - exhaustiveNbHits?: boolean | undefined; - - /** - * See the `typo` field of the `exhaustive` object in the response. - */ - exhaustiveTypo?: boolean | undefined; - - /** - * Facet counts. - */ - facets?: { [key: string]: { [key: string]: number } } | undefined; - - /** - * Statistics for numerical facets. - */ - facets_stats?: { [key: string]: FacetStats } | undefined; - - /** - * Index name used for the query. - */ - index?: string | undefined; - - /** - * Index name used for the query. During A/B testing, the targeted index isn\'t always the index used by the query. - */ - indexUsed?: string | undefined; - - /** - * Warnings about the query. - */ - message?: string | undefined; - - /** - * Number of hits selected and sorted by the relevant sort algorithm. - */ - nbSortedHits?: number | undefined; - - /** - * 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 | undefined; - - /** - * Time the server took to process the request, in milliseconds. - */ - processingTimeMS?: number | undefined; - - /** - * Experimental. List of processing steps and their times, in milliseconds. You can use this list to investigate performance issues. - */ - processingTimingsMS?: Record | undefined; - - /** - * Markup text indicating which parts of the original query have been removed to retrieve a non-empty result set. - */ - queryAfterRemoval?: string | undefined; - - redirect?: Redirect | undefined; - - renderingContent?: RenderingContent | undefined; - - /** - * Time the server took to process the request, in milliseconds. - */ - serverTimeMS?: number | undefined; - - /** - * Host name of the server that processed the request. - */ - serverUsed?: string | undefined; - - /** - * An object with custom data. You can store up to 32kB as custom data. - */ - userData?: any | null | undefined; - - /** - * Unique identifier for the query. This is used for [click analytics](https://www.algolia.com/doc/guides/analytics/click-analytics). - */ - queryID?: string | undefined; - - /** - * Whether automatic events collection is enabled for the application. - */ - _automaticInsights?: boolean | undefined; -}; diff --git a/packages/composition/model/batchCompositionAction.ts b/packages/composition/model/batchCompositionAction.ts deleted file mode 100644 index 840cfef67..000000000 --- a/packages/composition/model/batchCompositionAction.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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/composition/model/batchParams.ts b/packages/composition/model/batchParams.ts deleted file mode 100644 index 9ab9e4a92..000000000 --- a/packages/composition/model/batchParams.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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/composition/model/booleanString.ts b/packages/composition/model/booleanString.ts deleted file mode 100644 index 4cf1fb196..000000000 --- a/packages/composition/model/booleanString.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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/composition/model/clientMethodProps.ts b/packages/composition/model/clientMethodProps.ts deleted file mode 100644 index a7f2c6fed..000000000 --- a/packages/composition/model/clientMethodProps.ts +++ /dev/null @@ -1,255 +0,0 @@ -// Code generated by OpenAPI Generator (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 '../model/composition'; -import type { CompositionRule } from '../model/compositionRule'; -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, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customGet` method. - */ -export type CustomGetProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customPost` method. - */ -export type CustomPostProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `customPut` method. - */ -export type CustomPutProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `deleteComposition` method. - */ -export type DeleteCompositionProps = { - /** - * Unique Composition ObjectID. - */ - compositionID: string; -}; - -/** - * Properties for the `deleteCompositionRule` method. - */ -export type DeleteCompositionRuleProps = { - /** - * Unique Composition ObjectID. - */ - compositionID: string; - /** - * Unique identifier of a rule object. - */ - objectID: string; -}; - -/** - * 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 | undefined; - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; -}; - -/** - * Properties for the `putComposition` method. - */ -export type PutCompositionProps = { - /** - * Unique Composition ObjectID. - */ - compositionID: string; - composition: Composition; -}; - -/** - * Properties for the `putCompositionRule` method. - */ -export type PutCompositionRuleProps = { - /** - * Unique Composition ObjectID. - */ - compositionID: string; - /** - * Unique identifier of a rule object. - */ - objectID: string; - compositionRule: CompositionRule; -}; - -/** - * 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 | undefined; -}; - -/** - * 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 | undefined; -}; - -/** - * Properties for the `updateSortingStrategyComposition` method. - */ -export type UpdateSortingStrategyCompositionProps = { - /** - * Unique Composition ObjectID. - */ - compositionID: string; - requestBody: { [key: string]: string }; -}; - -export type WaitForCompositionTaskOptions = { - /** - * The maximum number of retries. 100 by default. - */ - maxRetries?: number | undefined; - - /** - * 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/composition/model/composition.ts b/packages/composition/model/composition.ts deleted file mode 100644 index a651531ea..000000000 --- a/packages/composition/model/composition.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by OpenAPI Generator (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 = { - /** - * Composition unique identifier. - */ - objectID: string; - - /** - * Composition name. - */ - name: string; - - /** - * Composition description. - */ - description?: string | undefined; - - behavior: CompositionBehavior; - - /** - * A mapping of sorting labels to the indices (or replicas) that implement those sorting rules. The sorting indices MUST be related to the associated main targeted index in the composition. Each key is the label your frontend sends at runtime (for example, \"Price (asc)\"), and each value is the name of the index that should be queried when that label is selected. When a request includes a \"sortBy\" parameter, the platform looks up the corresponding index in this mapping and uses it to execute the query. The main targeted index is replaced with the sorting strategy index it is mapped to. Up to 20 sorting strategies can be defined. - */ - sortingStrategy?: { [key: string]: string } | undefined; -}; diff --git a/packages/composition/model/compositionBaseSearchResponse.ts b/packages/composition/model/compositionBaseSearchResponse.ts deleted file mode 100644 index 2747a45e0..000000000 --- a/packages/composition/model/compositionBaseSearchResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 = { - compositions?: CompositionsSearchResponse | undefined; -}; diff --git a/packages/composition/model/compositionBehavior.ts b/packages/composition/model/compositionBehavior.ts deleted file mode 100644 index be0b7a7a4..000000000 --- a/packages/composition/model/compositionBehavior.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { CompositionInjectionBehavior } from './compositionInjectionBehavior'; -import type { CompositionMultifeedBehavior } from './compositionMultifeedBehavior'; - -/** - * An object containing either an `injection` or `multifeed` behavior schema, but not both. - */ -export type CompositionBehavior = CompositionInjectionBehavior | CompositionMultifeedBehavior; diff --git a/packages/composition/model/compositionIdRankingInfo.ts b/packages/composition/model/compositionIdRankingInfo.ts deleted file mode 100644 index 76095fe08..000000000 --- a/packages/composition/model/compositionIdRankingInfo.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by 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/compositionInjectionBehavior.ts b/packages/composition/model/compositionInjectionBehavior.ts deleted file mode 100644 index 5e9eb7c52..000000000 --- a/packages/composition/model/compositionInjectionBehavior.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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'; - -/** - * An object containing an `injection` behavior. - */ -export type CompositionInjectionBehavior = { - injection: Injection; -}; diff --git a/packages/composition/model/compositionMultifeedBehavior.ts b/packages/composition/model/compositionMultifeedBehavior.ts deleted file mode 100644 index 426c752f2..000000000 --- a/packages/composition/model/compositionMultifeedBehavior.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { Multifeed } from './multifeed'; - -/** - * An object containing a `multifeed` behavior. - */ -export type CompositionMultifeedBehavior = { - multifeed: Multifeed; -}; diff --git a/packages/composition/model/compositionRankingInfo.ts b/packages/composition/model/compositionRankingInfo.ts deleted file mode 100644 index 999eb9f12..000000000 --- a/packages/composition/model/compositionRankingInfo.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 } | undefined; -}; diff --git a/packages/composition/model/compositionRule.ts b/packages/composition/model/compositionRule.ts deleted file mode 100644 index bb1466a80..000000000 --- a/packages/composition/model/compositionRule.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Code generated by OpenAPI Generator (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 = { - /** - * Composition rule unique identifier. - */ - objectID: string; - - /** - * Conditions that trigger a composition rule. - */ - conditions?: Array | undefined; - - consequence: CompositionRuleConsequence; - - /** - * Description of the rule\'s purpose to help you distinguish between different rules. - */ - description?: string | undefined; - - /** - * Whether the rule is active. - */ - enabled?: boolean | undefined; - - /** - * Time periods when the rule is active. - */ - validity?: Array | undefined; - - /** - * A list of tags. - */ - tags?: Array | undefined; -}; diff --git a/packages/composition/model/compositionRuleConsequence.ts b/packages/composition/model/compositionRuleConsequence.ts deleted file mode 100644 index 51e26567b..000000000 --- a/packages/composition/model/compositionRuleConsequence.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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/composition/model/compositionRulesBatchParams.ts b/packages/composition/model/compositionRulesBatchParams.ts deleted file mode 100644 index a3bebf7db..000000000 --- a/packages/composition/model/compositionRulesBatchParams.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/composition/model/compositionRunAppliedRules.ts b/packages/composition/model/compositionRunAppliedRules.ts deleted file mode 100644 index 8bc0c8b28..000000000 --- a/packages/composition/model/compositionRunAppliedRules.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 = { - /** - * The objectID of the applied composition rule on this query. - */ - objectID: string; -}; diff --git a/packages/composition/model/compositionRunSearchResponse.ts b/packages/composition/model/compositionRunSearchResponse.ts deleted file mode 100644 index 17f836f57..000000000 --- a/packages/composition/model/compositionRunSearchResponse.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (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 & { - /** - * The objectID of the composition which generated this result set. - */ - objectID: string; - - appliedRules?: Array | undefined; -}; diff --git a/packages/composition/model/compositionsSearchResponse.ts b/packages/composition/model/compositionsSearchResponse.ts deleted file mode 100644 index 1db7f3852..000000000 --- a/packages/composition/model/compositionsSearchResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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/condition.ts b/packages/composition/model/condition.ts deleted file mode 100644 index a95de24d4..000000000 --- a/packages/composition/model/condition.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - anchoring?: Anchoring | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Sort criteria that trigger the rule. You can trigger composition rules based on the selected sorting strategy set by the parameter `sortBy`. The rule will trigger if the value passed to `sortBy` matches the one defined in the condition. - */ - sortBy?: string | undefined; -}; diff --git a/packages/composition/model/dedupPositioning.ts b/packages/composition/model/dedupPositioning.ts deleted file mode 100644 index 383d4ef68..000000000 --- a/packages/composition/model/dedupPositioning.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Deduplication positioning configures how a duplicate result should be resolved between an injected item and main search results. Current configuration supports: - \'highest\': always select the item in the highest position, and remove duplicates that appear lower in the results. - \'highestInjected\': duplicate result will be moved to its highest possible injected position, but not higher. If a duplicate appears higher in main search results, it will be removed to stay it\'s intended group position (which could be lower than main). - */ -export type DedupPositioning = 'highest' | 'highestInjected'; diff --git a/packages/composition/model/deduplication.ts b/packages/composition/model/deduplication.ts deleted file mode 100644 index adc0c66bd..000000000 --- a/packages/composition/model/deduplication.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { DedupPositioning } from './dedupPositioning'; - -/** - * Deduplication configures the methods used to resolve duplicate items between main search results and injected group results. - */ -export type Deduplication = { - positioning: DedupPositioning; -}; diff --git a/packages/composition/model/deleteCompositionAction.ts b/packages/composition/model/deleteCompositionAction.ts deleted file mode 100644 index a695b4d32..000000000 --- a/packages/composition/model/deleteCompositionAction.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 = { - /** - * Composition unique identifier. - */ - objectID: string; -}; diff --git a/packages/composition/model/deleteCompositionRuleAction.ts b/packages/composition/model/deleteCompositionRuleAction.ts deleted file mode 100644 index 8ab1475cd..000000000 --- a/packages/composition/model/deleteCompositionRuleAction.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 = { - /** - * Composition rule unique identifier. - */ - objectID: string; -}; diff --git a/packages/composition/model/distinct.ts b/packages/composition/model/distinct.ts deleted file mode 100644 index dc87dfb00..000000000 --- a/packages/composition/model/distinct.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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/composition/model/errorBase.ts b/packages/composition/model/errorBase.ts deleted file mode 100644 index f31be6046..000000000 --- a/packages/composition/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/composition/model/exactOnSingleWordQuery.ts b/packages/composition/model/exactOnSingleWordQuery.ts deleted file mode 100644 index d01b358f6..000000000 --- a/packages/composition/model/exactOnSingleWordQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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/composition/model/exhaustive.ts b/packages/composition/model/exhaustive.ts deleted file mode 100644 index c528c89bc..000000000 --- a/packages/composition/model/exhaustive.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Code generated by 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/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate). - */ - facetsCount?: boolean | undefined; - - /** - * The value is `false` if not all facet values are retrieved. - */ - facetValues?: boolean | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/composition/model/externalInjectedItem.ts b/packages/composition/model/externalInjectedItem.ts deleted file mode 100644 index 7f8170f87..000000000 --- a/packages/composition/model/externalInjectedItem.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { ExternalInjection } from './externalInjection'; - -/** - * Contains a list of objects to inject from an external source. - */ -export type ExternalInjectedItem = { - items: Array; -}; diff --git a/packages/composition/model/externalInjection.ts b/packages/composition/model/externalInjection.ts deleted file mode 100644 index 424474668..000000000 --- a/packages/composition/model/externalInjection.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 ExternalInjection = { - /** - * An objectID injected from an external source and also present in the targeted index. - */ - objectID: string; - - /** - * User-defined key-values that will be added to the injected item in the response. This is identical to Hits metadata defined in Composition or Composition Rule, with the benefit of being set at runtime. - */ - metadata?: { [key: string]: any } | undefined; -}; diff --git a/packages/composition/model/externalOrdering.ts b/packages/composition/model/externalOrdering.ts deleted file mode 100644 index 06c7f8515..000000000 --- a/packages/composition/model/externalOrdering.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Ordering to apply on the injected items coming from the external source. \'default\' means the items will be ordered as they are in the index (natural relevance) in the smart group. \'userDefined\' means the order in which the objectIDs are provided in the run request payload will be preserved in the smart group. - */ -export type ExternalOrdering = 'default' | 'userDefined'; diff --git a/packages/composition/model/facetFilters.ts b/packages/composition/model/facetFilters.ts deleted file mode 100644 index 0dc5e336e..000000000 --- a/packages/composition/model/facetFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 5b8f092aa..000000000 --- a/packages/composition/model/facetHits.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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/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 deleted file mode 100644 index 52d5a82fe..000000000 --- a/packages/composition/model/facetOrdering.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Order of facet values. One object for each facet. - */ - values?: { [key: string]: Value } | undefined; -}; diff --git a/packages/composition/model/facetStats.ts b/packages/composition/model/facetStats.ts deleted file mode 100644 index 706a459a2..000000000 --- a/packages/composition/model/facetStats.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Maximum value in the results. - */ - max?: number | undefined; - - /** - * Average facet value in the results. - */ - avg?: number | undefined; - - /** - * Sum of all values in the results. - */ - sum?: number | undefined; -}; diff --git a/packages/composition/model/feedInjection.ts b/packages/composition/model/feedInjection.ts deleted file mode 100644 index 6098a4fb1..000000000 --- a/packages/composition/model/feedInjection.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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'; - -/** - * Feed formatted as an injection. - */ -export type FeedInjection = { - injection: Injection; -}; diff --git a/packages/composition/model/getTaskResponse.ts b/packages/composition/model/getTaskResponse.ts deleted file mode 100644 index b8a4c6b85..000000000 --- a/packages/composition/model/getTaskResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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/composition/model/highlightResult.ts b/packages/composition/model/highlightResult.ts deleted file mode 100644 index 102271a17..000000000 --- a/packages/composition/model/highlightResult.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 8c7a4b532..000000000 --- a/packages/composition/model/highlightResultOption.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/composition/model/hit.ts b/packages/composition/model/hit.ts deleted file mode 100644 index 28c301d46..000000000 --- a/packages/composition/model/hit.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Code generated by OpenAPI Generator (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 { HitMetadata } from './hitMetadata'; -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 } | undefined; - - /** - * Snippets that show the context around a matching search query. - */ - _snippetResult?: { [key: string]: SnippetResult } | undefined; - - _rankingInfo?: HitRankingInfo | undefined; - - _distinctSeqID?: number | undefined; - - _extra?: HitMetadata | undefined; -}; diff --git a/packages/composition/model/hitMetadata.ts b/packages/composition/model/hitMetadata.ts deleted file mode 100644 index 5a654490b..000000000 --- a/packages/composition/model/hitMetadata.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * An object that contains the extra key-value pairs provided in the injectedItem definition. - */ -export type HitMetadata = Record & { - /** - * The key of the injectedItem that inserted this metadata. - */ - _injectedItemKey?: string | undefined; -}; diff --git a/packages/composition/model/hitRankingInfo.ts b/packages/composition/model/hitRankingInfo.ts deleted file mode 100644 index 7f1379c9a..000000000 --- a/packages/composition/model/hitRankingInfo.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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/ignorePlurals.ts b/packages/composition/model/ignorePlurals.ts deleted file mode 100644 index 2eef62270..000000000 --- a/packages/composition/model/ignorePlurals.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (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. Only use this feature for the languages used in your index. - */ -export type IgnorePlurals = Array | BooleanString | boolean; diff --git a/packages/composition/model/index.ts b/packages/composition/model/index.ts deleted file mode 100644 index 6252d244b..000000000 --- a/packages/composition/model/index.ts +++ /dev/null @@ -1,127 +0,0 @@ -// Code generated by 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 './baseInjectionQueryParameters'; -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 './compositionInjectionBehavior'; -export * from './compositionMultifeedBehavior'; -export * from './compositionRankingInfo'; -export * from './compositionRule'; -export * from './compositionRuleConsequence'; -export * from './compositionRulesBatchParams'; -export * from './compositionRunAppliedRules'; -export * from './compositionRunSearchResponse'; -export * from './compositionsSearchResponse'; -export * from './condition'; -export * from './deduplication'; -export * from './dedupPositioning'; -export * from './deleteCompositionAction'; -export * from './deleteCompositionRuleAction'; -export * from './distinct'; -export * from './errorBase'; -export * from './exactOnSingleWordQuery'; -export * from './exhaustive'; -export * from './externalInjectedItem'; -export * from './externalInjection'; -export * from './externalOrdering'; -export * from './facetFilters'; -export * from './facetHits'; -export * from './facetOrdering'; -export * from './facetStats'; -export * from './feedInjection'; -export * from './getTaskResponse'; -export * from './highlightResult'; -export * from './highlightResultOption'; -export * from './hit'; -export * from './hitMetadata'; -export * from './hitRankingInfo'; -export * from './ignorePlurals'; -export * from './indexSettingsFacets'; -export * from './injectedItemExternal'; -export * from './injectedItemExternalSource'; -export * from './injectedItemHitsMetadata'; -export * from './injectedItemMetadata'; -export * from './injectedItemRecommendSource'; -export * from './injectedItemSearch'; -export * from './injectedItemSearchSource'; -export * from './injectedItemSource'; -export * from './injection'; -export * from './injectionInjectedItem'; -export * from './injectionMain'; -export * from './injectionMainRecommendSource'; -export * from './injectionMainSearchSource'; -export * from './injectionMainSource'; -export * from './insideBoundingBox'; -export * from './listCompositionsResponse'; -export * from './mainInjectionQueryParameters'; -export * from './mainRecommend'; -export * from './mainSearch'; -export * from './matchedGeoLocation'; -export * from './matchLevel'; -export * from './model'; -export * from './multifeed'; -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 './recommend'; -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 './searchFields'; -export * from './searchForFacetValuesParams'; -export * from './searchForFacetValuesRequest'; -export * from './searchForFacetValuesResponse'; -export * from './searchForFacetValuesResults'; -export * from './searchResponse'; -export * from './searchResults'; -export * from './searchResultsItem'; -export * from './snippetResult'; -export * from './snippetResultOption'; -export * from './sortRemainingBy'; -export * from './supportedLanguage'; -export * from './taskIDResponse'; -export * from './taskStatus'; -export * from './timeRange'; -export * from './typoTolerance'; -export * from './typoToleranceEnum'; -export * from './value'; -export * from './widgets'; diff --git a/packages/composition/model/indexSettingsFacets.ts b/packages/composition/model/indexSettingsFacets.ts deleted file mode 100644 index 65956b664..000000000 --- a/packages/composition/model/indexSettingsFacets.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/composition/model/injectedItemExternal.ts b/packages/composition/model/injectedItemExternal.ts deleted file mode 100644 index 2f2db7769..000000000 --- a/packages/composition/model/injectedItemExternal.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { BaseInjectionQueryParameters } from './baseInjectionQueryParameters'; -import type { ExternalOrdering } from './externalOrdering'; - -export type InjectedItemExternal = { - /** - * Composition Index name. - */ - index: string; - - params?: BaseInjectionQueryParameters | undefined; - - ordering?: ExternalOrdering | undefined; -}; diff --git a/packages/composition/model/injectedItemExternalSource.ts b/packages/composition/model/injectedItemExternalSource.ts deleted file mode 100644 index 1fb6f10d0..000000000 --- a/packages/composition/model/injectedItemExternalSource.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { InjectedItemExternal } from './injectedItemExternal'; - -/** - * Injected items will originate from externally provided objectIDs (that must exist in the index) given at runtime in the run request payload. - */ -export type InjectedItemExternalSource = { - external: InjectedItemExternal; -}; diff --git a/packages/composition/model/injectedItemHitsMetadata.ts b/packages/composition/model/injectedItemHitsMetadata.ts deleted file mode 100644 index f6d6f4f2d..000000000 --- a/packages/composition/model/injectedItemHitsMetadata.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Adds the provided metadata to each injected hit via an `_extra` attribute. - */ -export type InjectedItemHitsMetadata = { - /** - * When true, the `_injectedItemKey` field is set in the `_extra` object of each affected hit. - */ - addItemKey?: boolean | undefined; - - /** - * The user-defined key-value pairs that will be placed in the `_extra` field of each affected hit. - */ - extra?: { [key: string]: any } | undefined; -}; diff --git a/packages/composition/model/injectedItemMetadata.ts b/packages/composition/model/injectedItemMetadata.ts deleted file mode 100644 index d33362407..000000000 --- a/packages/composition/model/injectedItemMetadata.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { InjectedItemHitsMetadata } from './injectedItemHitsMetadata'; - -/** - * Used to add metadata to the results of the injectedItem. - */ -export type InjectedItemMetadata = { - hits?: InjectedItemHitsMetadata | undefined; -}; diff --git a/packages/composition/model/injectedItemRecommendSource.ts b/packages/composition/model/injectedItemRecommendSource.ts deleted file mode 100644 index 1667f6a2f..000000000 --- a/packages/composition/model/injectedItemRecommendSource.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { Recommend } from './recommend'; - -/** - * Injected items will originate from a recommendation request performed on the specified index. - */ -export type InjectedItemRecommendSource = { - recommend: Recommend; -}; diff --git a/packages/composition/model/injectedItemSearch.ts b/packages/composition/model/injectedItemSearch.ts deleted file mode 100644 index 4ad6395dd..000000000 --- a/packages/composition/model/injectedItemSearch.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { BaseInjectionQueryParameters } from './baseInjectionQueryParameters'; - -export type InjectedItemSearch = { - /** - * Composition Index name. - */ - index: string; - - params?: BaseInjectionQueryParameters | undefined; -}; diff --git a/packages/composition/model/injectedItemSearchSource.ts b/packages/composition/model/injectedItemSearchSource.ts deleted file mode 100644 index c77c4ccc2..000000000 --- a/packages/composition/model/injectedItemSearchSource.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { InjectedItemSearch } from './injectedItemSearch'; - -/** - * Injected items will originate from a search request performed on the specified index. - */ -export type InjectedItemSearchSource = { - search: InjectedItemSearch; -}; diff --git a/packages/composition/model/injectedItemSource.ts b/packages/composition/model/injectedItemSource.ts deleted file mode 100644 index 4cadb1e6d..000000000 --- a/packages/composition/model/injectedItemSource.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { InjectedItemExternalSource } from './injectedItemExternalSource'; -import type { InjectedItemRecommendSource } from './injectedItemRecommendSource'; -import type { InjectedItemSearchSource } from './injectedItemSearchSource'; - -export type InjectedItemSource = InjectedItemSearchSource | InjectedItemExternalSource | InjectedItemRecommendSource; diff --git a/packages/composition/model/injection.ts b/packages/composition/model/injection.ts deleted file mode 100644 index 20fe1a535..000000000 --- a/packages/composition/model/injection.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { Deduplication } from './deduplication'; -import type { InjectionInjectedItem } from './injectionInjectedItem'; -import type { InjectionMain } from './injectionMain'; - -export type Injection = { - main: InjectionMain; - - /** - * list of injected items of the current Composition. - */ - injectedItems?: Array | undefined; - - deduplication?: Deduplication | undefined; -}; diff --git a/packages/composition/model/injectionInjectedItem.ts b/packages/composition/model/injectionInjectedItem.ts deleted file mode 100644 index 9bd57eeb2..000000000 --- a/packages/composition/model/injectionInjectedItem.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { InjectedItemMetadata } from './injectedItemMetadata'; -import type { InjectedItemSource } from './injectedItemSource'; - -export type InjectionInjectedItem = { - /** - * injected Item unique identifier. - */ - key: string; - - source: InjectedItemSource; - - position: number; - - length: number; - - metadata?: InjectedItemMetadata | undefined; -}; diff --git a/packages/composition/model/injectionMain.ts b/packages/composition/model/injectionMain.ts deleted file mode 100644 index 585dfa08c..000000000 --- a/packages/composition/model/injectionMain.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { InjectionMainSource } from './injectionMainSource'; - -/** - * Main defines the organic result set of the injection. - */ -export type InjectionMain = { - source?: InjectionMainSource | undefined; -}; diff --git a/packages/composition/model/injectionMainRecommendSource.ts b/packages/composition/model/injectionMainRecommendSource.ts deleted file mode 100644 index 8e3dc33ac..000000000 --- a/packages/composition/model/injectionMainRecommendSource.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { MainRecommend } from './mainRecommend'; - -/** - * Organic result set will originate from a recommend request. - */ -export type InjectionMainRecommendSource = { - recommend: MainRecommend; -}; diff --git a/packages/composition/model/injectionMainSearchSource.ts b/packages/composition/model/injectionMainSearchSource.ts deleted file mode 100644 index 1a663370b..000000000 --- a/packages/composition/model/injectionMainSearchSource.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { MainSearch } from './mainSearch'; - -/** - * Organic result set will originate from a search request performed on the specified index. - */ -export type InjectionMainSearchSource = { - search: MainSearch; -}; diff --git a/packages/composition/model/injectionMainSource.ts b/packages/composition/model/injectionMainSource.ts deleted file mode 100644 index e31b44e71..000000000 --- a/packages/composition/model/injectionMainSource.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { InjectionMainRecommendSource } from './injectionMainRecommendSource'; -import type { InjectionMainSearchSource } from './injectionMainSearchSource'; - -/** - * Source to be used to retrieve organic result set. - */ -export type InjectionMainSource = InjectionMainSearchSource | InjectionMainRecommendSource; diff --git a/packages/composition/model/insideBoundingBox.ts b/packages/composition/model/insideBoundingBox.ts deleted file mode 100644 index 8a498532f..000000000 --- a/packages/composition/model/insideBoundingBox.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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/listCompositionsResponse.ts b/packages/composition/model/listCompositionsResponse.ts deleted file mode 100644 index b8a55057e..000000000 --- a/packages/composition/model/listCompositionsResponse.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Code generated by OpenAPI Generator (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; - - /** - * Current page. - */ - page: number; - - /** - * Number of items per page. - */ - hitsPerPage: number; - - /** - * Number of items. - */ - nbHits: number; -}; diff --git a/packages/composition/model/mainInjectionQueryParameters.ts b/packages/composition/model/mainInjectionQueryParameters.ts deleted file mode 100644 index 38c431e4d..000000000 --- a/packages/composition/model/mainInjectionQueryParameters.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { BaseInjectionQueryParameters } from './baseInjectionQueryParameters'; - -export type MainInjectionQueryParameters = BaseInjectionQueryParameters & Record; diff --git a/packages/composition/model/mainRecommend.ts b/packages/composition/model/mainRecommend.ts deleted file mode 100644 index 91e2822b5..000000000 --- a/packages/composition/model/mainRecommend.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (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'; -import type { Model } from './model'; - -export type MainRecommend = { - /** - * Index to retrieve recommendations from. - */ - indexName: string; - - model: Model; - - /** - * Minimum score a recommendation must have to be included. - */ - threshold: number; - - queryParameters?: MainInjectionQueryParameters | undefined; - - fallbackParameters?: MainInjectionQueryParameters | undefined; -}; diff --git a/packages/composition/model/mainSearch.ts b/packages/composition/model/mainSearch.ts deleted file mode 100644 index bcae6da52..000000000 --- a/packages/composition/model/mainSearch.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (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 MainSearch = { - /** - * Index to retrieve search results from. - */ - index: string; - - params?: MainInjectionQueryParameters | undefined; -}; diff --git a/packages/composition/model/matchLevel.ts b/packages/composition/model/matchLevel.ts deleted file mode 100644 index 2cb9f4d21..000000000 --- a/packages/composition/model/matchLevel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index c0ec6611e..000000000 --- a/packages/composition/model/matchedGeoLocation.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Longitude of the matched location. - */ - lng?: number | undefined; - - /** - * Distance between the matched location and the search location (in meters). - */ - distance?: number | undefined; -}; diff --git a/packages/composition/model/model.ts b/packages/composition/model/model.ts deleted file mode 100644 index 1bef3ca21..000000000 --- a/packages/composition/model/model.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Recommendation model to use for retrieving recommendations. - */ -export type Model = 'trending-items'; diff --git a/packages/composition/model/multifeed.ts b/packages/composition/model/multifeed.ts deleted file mode 100644 index eec253246..000000000 --- a/packages/composition/model/multifeed.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { FeedInjection } from './feedInjection'; - -export type Multifeed = { - /** - * A key-value store of Feed ID to Feed. Currently, the only supported Feed type is an Injection. - */ - feeds: { [key: string]: FeedInjection }; - - /** - * A list of Feed IDs that specifies the order in which to order the results in the response. The IDs should be a subset of those in the Feeds object, and only those specified will be processed. When this field is not set, all Feeds are processed and returned with a default ordering. - */ - feedsOrder?: Array | undefined; -}; diff --git a/packages/composition/model/multipleBatchRequest.ts b/packages/composition/model/multipleBatchRequest.ts deleted file mode 100644 index 857bdca1e..000000000 --- a/packages/composition/model/multipleBatchRequest.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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/composition/model/multipleBatchResponse.ts b/packages/composition/model/multipleBatchResponse.ts deleted file mode 100644 index a5fa74e64..000000000 --- a/packages/composition/model/multipleBatchResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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/composition/model/numericFilters.ts b/packages/composition/model/numericFilters.ts deleted file mode 100644 index 6129dc5d3..000000000 --- a/packages/composition/model/numericFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 965eef7be..000000000 --- a/packages/composition/model/optionalFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 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. - On virtual replicas, optional filters are applied _after_ the replica\'s [relevant sort](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/relevant-sort). - */ -export type OptionalFilters = Array | string; diff --git a/packages/composition/model/optionalWords.ts b/packages/composition/model/optionalWords.ts deleted file mode 100644 index e2f58ed97..000000000 --- a/packages/composition/model/optionalWords.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 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 optional, 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 fewer 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 2,000 need 2 matched words. - If `optionalWords` has 10 or more words, the required number of matched words increases by the number of optional words divided by 5 (rounded down). Example: with 18 optional words, results 1 to 1,000 require 1 matched word; results 1,001 to 2,000 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/composition/model/params.ts b/packages/composition/model/params.ts deleted file mode 100644 index bfe056d52..000000000 --- a/packages/composition/model/params.ts +++ /dev/null @@ -1,144 +0,0 @@ -// Code generated by OpenAPI Generator (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 { ExternalInjectedItem } from './externalInjectedItem'; -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 = { - /** - * Whether this search will be included in Analytics. - */ - analytics?: boolean | undefined; - - /** - * Tags to apply to the query for [segmenting analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments). - */ - analyticsTags?: Array | undefined; - - /** - * 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 | undefined; - - /** - * Whether to obtain the coordinates from the request\'s IP address. - */ - aroundLatLngViaIP?: boolean | undefined; - - aroundRadius?: AroundRadius | undefined; - - aroundPrecision?: AroundPrecision | undefined; - - /** - * 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/doc/guides/sending-events/getting-started). - */ - clickAnalytics?: boolean | undefined; - - /** - * Whether to enable index level A/B testing for this run request. If the composition mixes multiple indices, the A/B test is ignored. - */ - enableABTest?: boolean | undefined; - - /** - * Whether to enable Personalization. - */ - enablePersonalization?: boolean | undefined; - - /** - * 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 | undefined; - - /** - * Whether to enable composition rules. - */ - enableRules?: boolean | undefined; - - facetFilters?: FacetFilters | undefined; - - /** - * 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 `*`. To retrieve disjunctive facets lists, annotate any facets with the `disjunctive` modifier. For more information, see [facets](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#contextual-facet-values-and-counts) and [disjunctive faceting for Smart Groups](https://www.algolia.com/doc/guides/managing-results/compositions/search-based-groups#facets-including-disjunctive-faceting). - */ - facets?: Array | undefined; - - /** - * 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 if the facet attribute name or facet value contains 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 | undefined; - - /** - * Whether the run response should include detailed ranking information. - */ - getRankingInfo?: boolean | undefined; - - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; - - /** - * An object containing keys corresponding to the `key`s from an injection\'s `injectedItems` and values containing a list of hits to inject. - */ - injectedItems?: { [key: string]: ExternalInjectedItem } | undefined; - - insideBoundingBox?: InsideBoundingBox | null | undefined; - - /** - * 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> | undefined; - - /** - * Minimum radius (in meters) for a search around a location when `aroundRadius` isn\'t set. - */ - minimumAroundRadius?: number | undefined; - - /** - * 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 | undefined; - - numericFilters?: NumericFilters | undefined; - - optionalFilters?: OptionalFilters | undefined; - - /** - * Page of search results to retrieve. - */ - page?: number | undefined; - - /** - * Search query. - */ - query?: string | undefined; - - /** - * 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, place the CJK language **first**. **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 | undefined; - - /** - * 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 | undefined; - - /** - * Assigns a rule context to the run 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 | undefined; - - /** - * Indicates which sorting strategy to apply for the request. The value must match one of the labels defined in the \"sortingStrategy\" mapping. For example, \"Price (asc)\", see Upsert Composition. At runtime, this label is used to look up the corresponding index or replica configured in \"sortingStrategy\", and the query is executed using that index instead of main\'s. In addition to \"sortingStrategy\", this parameter is also used to apply a matching Composition Rule that contains a condition defined to trigger on \"sortBy\", see Composition Rules. If no value is provided or an invalid value, no sorting strategy is applied. - */ - sortBy?: string | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/composition/model/personalization.ts b/packages/composition/model/personalization.ts deleted file mode 100644 index 2c91ff1ea..000000000 --- a/packages/composition/model/personalization.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * The score of the ranking. - */ - rankingScore?: number | undefined; - - /** - * The score of the event. - */ - score?: number | undefined; -}; diff --git a/packages/composition/model/queryType.ts b/packages/composition/model/queryType.ts deleted file mode 100644 index 5c33be4a6..000000000 --- a/packages/composition/model/queryType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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/composition/model/range.ts b/packages/composition/model/range.ts deleted file mode 100644 index bbe8841d0..000000000 --- a/packages/composition/model/range.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Upper boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. - */ - value?: number | undefined; -}; diff --git a/packages/composition/model/rankingInfo.ts b/packages/composition/model/rankingInfo.ts deleted file mode 100644 index 47a6e5a93..000000000 --- a/packages/composition/model/rankingInfo.ts +++ /dev/null @@ -1,68 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - matchedGeoLocation?: MatchedGeoLocation | undefined; - - personalization?: Personalization | undefined; - - /** - * 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 | undefined; - - /** - * Number of words between multiple matches in the query plus 1. For single word queries, `proximityDistance` is 0. - */ - proximityDistance?: number | undefined; - - /** - * Overall ranking of the record, expressed as a single integer. This attribute is internal. - */ - userScore: number; - - /** - * Number of matched words. - */ - words?: number | undefined; - - /** - * Whether the record is re-ranked. - */ - promotedByReRanking?: boolean | undefined; -}; diff --git a/packages/composition/model/recommend.ts b/packages/composition/model/recommend.ts deleted file mode 100644 index 0b1af5fed..000000000 --- a/packages/composition/model/recommend.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { BaseInjectionQueryParameters } from './baseInjectionQueryParameters'; -import type { Model } from './model'; - -export type Recommend = { - /** - * Index to retrieve recommendations from. - */ - indexName: string; - - model: Model; - - /** - * Minimum score a recommendation must have to be included. - */ - threshold: number; - - queryParameters?: BaseInjectionQueryParameters | undefined; - - fallbackParameters?: BaseInjectionQueryParameters | undefined; -}; diff --git a/packages/composition/model/redirect.ts b/packages/composition/model/redirect.ts deleted file mode 100644 index dfa9312a3..000000000 --- a/packages/composition/model/redirect.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/composition/model/redirectRuleIndexData.ts b/packages/composition/model/redirectRuleIndexData.ts deleted file mode 100644 index fbb7ea140..000000000 --- a/packages/composition/model/redirectRuleIndexData.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 33802fc69..000000000 --- a/packages/composition/model/redirectRuleIndexMetadata.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 58725edd4..000000000 --- a/packages/composition/model/redirectURL.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/composition/model/removeStopWords.ts b/packages/composition/model/removeStopWords.ts deleted file mode 100644 index 0a467cb35..000000000 --- a/packages/composition/model/removeStopWords.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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. Only use this feature for the languages used in your index. - */ -export type RemoveStopWords = Array | boolean; diff --git a/packages/composition/model/removeWordsIfNoResults.ts b/packages/composition/model/removeWordsIfNoResults.ts deleted file mode 100644 index 70e1aa5e7..000000000 --- a/packages/composition/model/removeWordsIfNoResults.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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/composition/model/renderingContent.ts b/packages/composition/model/renderingContent.ts deleted file mode 100644 index a10b97d74..000000000 --- a/packages/composition/model/renderingContent.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - redirect?: RedirectURL | undefined; - - widgets?: Widgets | undefined; -}; diff --git a/packages/composition/model/requestBody.ts b/packages/composition/model/requestBody.ts deleted file mode 100644 index 615e1f23a..000000000 --- a/packages/composition/model/requestBody.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * A list of Feed IDs that specifies the order in which to order the results in the response. The IDs should be a subset of those in the `feeds` object of the targeted `multifeed` Composition / Composition Rule, and only those specified will be processed. The value overrides the value in the defined behavior, and when unspecified, the value defined in the behavior is used. When neither value is present, all feeds are processed. - */ - feedsOrder?: Array | undefined; -}; diff --git a/packages/composition/model/resultsCompositionInfoResponse.ts b/packages/composition/model/resultsCompositionInfoResponse.ts deleted file mode 100644 index 2aa12f6ef..000000000 --- a/packages/composition/model/resultsCompositionInfoResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 05e97aa87..000000000 --- a/packages/composition/model/resultsCompositionsResponse.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (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 = { - /** - * The ID of the feed. - */ - feedID?: string | undefined; - - compositions: { [key: string]: ResultsCompositionInfoResponse }; -}; diff --git a/packages/composition/model/resultsInjectedItemAppliedRulesInfoResponse.ts b/packages/composition/model/resultsInjectedItemAppliedRulesInfoResponse.ts deleted file mode 100644 index b15c054dc..000000000 --- a/packages/composition/model/resultsInjectedItemAppliedRulesInfoResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 = { - /** - * The objectID of the applied index level rule on this injected group. - */ - objectID: string; -}; diff --git a/packages/composition/model/resultsInjectedItemInfoResponse.ts b/packages/composition/model/resultsInjectedItemInfoResponse.ts deleted file mode 100644 index dc7069071..000000000 --- a/packages/composition/model/resultsInjectedItemInfoResponse.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (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 & { - /** - * The key of the injected group. - */ - key: string; - - appliedRules?: Array | undefined; -}; diff --git a/packages/composition/model/rulesBatchCompositionAction.ts b/packages/composition/model/rulesBatchCompositionAction.ts deleted file mode 100644 index 9ebe49623..000000000 --- a/packages/composition/model/rulesBatchCompositionAction.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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/composition/model/rulesMultipleBatchRequest.ts b/packages/composition/model/rulesMultipleBatchRequest.ts deleted file mode 100644 index 3bbbe20be..000000000 --- a/packages/composition/model/rulesMultipleBatchRequest.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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/composition/model/rulesMultipleBatchResponse.ts b/packages/composition/model/rulesMultipleBatchResponse.ts deleted file mode 100644 index 0ebfca052..000000000 --- a/packages/composition/model/rulesMultipleBatchResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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](https://www.algolia.com/doc/rest-api/search/get-task) and this task ID. - */ - taskID: number; -}; diff --git a/packages/composition/model/searchCompositionRulesParams.ts b/packages/composition/model/searchCompositionRulesParams.ts deleted file mode 100644 index b9cf038fe..000000000 --- a/packages/composition/model/searchCompositionRulesParams.ts +++ /dev/null @@ -1,35 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - anchoring?: Anchoring | undefined; - - /** - * Only return composition rules that match the context (exact match). - */ - context?: string | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * If `true`, return only enabled composition rules. If `false`, return only inactive composition rules. By default, _all_ composition rules are returned. - */ - enabled?: boolean | null | undefined; -}; diff --git a/packages/composition/model/searchCompositionRulesResponse.ts b/packages/composition/model/searchCompositionRulesResponse.ts deleted file mode 100644 index 414928cbd..000000000 --- a/packages/composition/model/searchCompositionRulesResponse.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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/composition/model/searchFields.ts b/packages/composition/model/searchFields.ts deleted file mode 100644 index 7ca89b090..000000000 --- a/packages/composition/model/searchFields.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by OpenAPI Generator (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 SearchFields> = { - /** - * Search results (hits). Hits are records from your index that match the search criteria, augmented with additional attributes, such as, for highlighting. - */ - hits?: Hit[] | undefined; - - /** - * Number of hits returned per page. - */ - hitsPerPage?: number | undefined; - - /** - * Number of results (hits). - */ - nbHits?: number | undefined; - - /** - * Number of pages of results. - */ - nbPages?: number | undefined; - - /** - * The current page of the results. - */ - page?: number | undefined; - - /** - * URL-encoded string of all search parameters. - */ - params?: string | undefined; - - /** - * The search query string. - */ - query?: string | undefined; -}; diff --git a/packages/composition/model/searchForFacetValuesParams.ts b/packages/composition/model/searchForFacetValuesParams.ts deleted file mode 100644 index aa1fb3e28..000000000 --- a/packages/composition/model/searchForFacetValuesParams.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - searchQuery?: Params | undefined; -}; diff --git a/packages/composition/model/searchForFacetValuesRequest.ts b/packages/composition/model/searchForFacetValuesRequest.ts deleted file mode 100644 index 8f0ec89de..000000000 --- a/packages/composition/model/searchForFacetValuesRequest.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/composition/model/searchForFacetValuesResponse.ts b/packages/composition/model/searchForFacetValuesResponse.ts deleted file mode 100644 index 00fdc5e30..000000000 --- a/packages/composition/model/searchForFacetValuesResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/composition/model/searchForFacetValuesResults.ts b/packages/composition/model/searchForFacetValuesResults.ts deleted file mode 100644 index cf405aacb..000000000 --- a/packages/composition/model/searchForFacetValuesResults.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (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/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 | undefined; -}; diff --git a/packages/composition/model/searchResponse.ts b/packages/composition/model/searchResponse.ts deleted file mode 100644 index 61fd97428..000000000 --- a/packages/composition/model/searchResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 34e9a400a..000000000 --- a/packages/composition/model/searchResults.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 2803f0424..000000000 --- a/packages/composition/model/searchResultsItem.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (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 { SearchFields } from './searchFields'; - -export type SearchResultsItem> = BaseSearchResponse & - SearchFields & - ResultsCompositionsResponse; diff --git a/packages/composition/model/snippetResult.ts b/packages/composition/model/snippetResult.ts deleted file mode 100644 index 0d9abff48..000000000 --- a/packages/composition/model/snippetResult.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index daab65f2d..000000000 --- a/packages/composition/model/snippetResultOption.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 85fc5bd88..000000000 --- a/packages/composition/model/sortRemainingBy.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 85f2111cc..000000000 --- a/packages/composition/model/supportedLanguage.ts +++ /dev/null @@ -1,74 +0,0 @@ -// Code generated by 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/taskIDResponse.ts b/packages/composition/model/taskIDResponse.ts deleted file mode 100644 index 3867578a0..000000000 --- a/packages/composition/model/taskIDResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 TaskIDResponse = { - /** - * 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](https://www.algolia.com/doc/rest-api/search/get-task) and this task ID. - */ - taskID: number; -}; diff --git a/packages/composition/model/taskStatus.ts b/packages/composition/model/taskStatus.ts deleted file mode 100644 index 5b312a99c..000000000 --- a/packages/composition/model/taskStatus.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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/composition/model/timeRange.ts b/packages/composition/model/timeRange.ts deleted file mode 100644 index ca2ed7b81..000000000 --- a/packages/composition/model/timeRange.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 = { - /** - * Timestamp when the rule should start to be active, measured in seconds since the Unix epoch. - */ - from?: number | undefined; - - /** - * Timestamp when the rule should stop to be active, measured in seconds since the Unix epoch. - */ - until?: number | undefined; -}; diff --git a/packages/composition/model/typoTolerance.ts b/packages/composition/model/typoTolerance.ts deleted file mode 100644 index c825bee3b..000000000 --- a/packages/composition/model/typoTolerance.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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/composition/model/typoToleranceEnum.ts b/packages/composition/model/typoToleranceEnum.ts deleted file mode 100644 index fd97a0ed0..000000000 --- a/packages/composition/model/typoToleranceEnum.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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' | 'true' | 'false'; diff --git a/packages/composition/model/value.ts b/packages/composition/model/value.ts deleted file mode 100644 index d8c72bc53..000000000 --- a/packages/composition/model/value.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - sortRemainingBy?: SortRemainingBy | undefined; - - /** - * Hide facet values. - */ - hide?: Array | undefined; -}; diff --git a/packages/composition/model/widgets.ts b/packages/composition/model/widgets.ts deleted file mode 100644 index 12fe2bf4f..000000000 --- a/packages/composition/model/widgets.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/composition/package.json b/packages/composition/package.json deleted file mode 100644 index cc3d8268d..000000000 --- a/packages/composition/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "version": "1.31.0", - "repository": { - "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" - }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/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": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/builds/browser.js" - }, - "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", - "./dist/builds/*.js": "./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.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "26.1.2", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" - } -} diff --git a/packages/composition/rollup.config.js b/packages/composition/rollup.config.js deleted file mode 100644 index 1746eabe0..000000000 --- a/packages/composition/rollup.config.js +++ /dev/null @@ -1,17 +0,0 @@ -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 deleted file mode 100644 index 167e07d4b..000000000 --- a/packages/composition/src/compositionClient.ts +++ /dev/null @@ -1,1456 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - CreateClientOptions, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, -} from '@algolia/client-common'; -import { - createAuth, - createIterablePromise, - createTransporter, - getAlgoliaAgent, - shuffle, - validateRequired, - withRequestId, -} 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 { TaskIDResponse } from '../model/taskIDResponse'; - -import type { - CustomDeleteProps, - CustomGetProps, - CustomPostProps, - CustomPutProps, - DeleteCompositionProps, - DeleteCompositionRuleProps, - GetCompositionProps, - GetRuleProps, - GetTaskProps, - ListCompositionsProps, - PutCompositionProps, - PutCompositionRuleProps, - SaveRulesProps, - SearchCompositionRulesProps, - SearchForFacetValuesProps, - SearchProps, - UpdateSortingStrategyCompositionProps, - WaitForCompositionTaskOptions, -} from '../model/clientMethodProps'; - -export const apiClientVersion = '1.31.0'; - -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 | undefined): 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. 100 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 = 100, - timeout = (retryCount: number): number => Math.min(retryCount * 200, 5000), - }: WaitForCompositionTaskOptions, - requestOptions?: RequestOptions, - ): Promise { - requestOptions = withRequestId(transporter, requestOptions); - let retryCount = 0; - - return createIterablePromise({ - func: () => this.getTask({ compositionID, taskID }, requestOptions), - validate: (response) => response.status === 'published', - aggregator: () => (retryCount += 1), - error: { - validate: () => retryCount >= maxRetries, - message: () => - `Stopped waiting for the task after ${maxRetries} retries. This does not mean the operation failed; it may still complete. If you need to keep polling, retry with a higher 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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customDelete', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customDelete - The customDelete object. - * @param customDelete.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customDelete for the plain version. - */ - customDeleteWithHTTPInfo( - { path, parameters }: CustomDeleteProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customDeleteWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customGet', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customGet - The customGet object. - * @param customGet.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customGet for the plain version. - */ - customGetWithHTTPInfo( - { path, parameters }: CustomGetProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customGetWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPut', path); - - 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); - }, - /** - * This method lets you send requests to the Algolia REST API. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPut - The customPut object. - * @param customPut.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPut for the plain version. - */ - customPutWithHTTPInfo( - { path, parameters, body }: CustomPutProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPutWithHTTPInfo', path); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Delete a composition from the current Algolia application. - * - * Required API Key ACLs: - * - editSettings - * @param deleteComposition - The deleteComposition object. - * @param deleteComposition.compositionID - Unique Composition ObjectID. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - deleteComposition( - { compositionID }: DeleteCompositionProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('compositionID', 'deleteComposition', compositionID); - - const requestPath = '/1/compositions/{compositionID}'.replace( - '{compositionID}', - encodeURIComponent(compositionID), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Delete a composition from the current Algolia application. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param deleteComposition - The deleteComposition object. - * @param deleteComposition.compositionID - Unique Composition ObjectID. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see deleteComposition for the plain version. - */ - deleteCompositionWithHTTPInfo( - { compositionID }: DeleteCompositionProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('compositionID', 'deleteCompositionWithHTTPInfo', compositionID); - - const requestPath = '/1/compositions/{compositionID}'.replace( - '{compositionID}', - encodeURIComponent(compositionID), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Delete a Composition Rule from the specified Composition ID. - * - * Required API Key ACLs: - * - editSettings - * @param deleteCompositionRule - The deleteCompositionRule object. - * @param deleteCompositionRule.compositionID - Unique Composition ObjectID. - * @param deleteCompositionRule.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. - */ - deleteCompositionRule( - { compositionID, objectID }: DeleteCompositionRuleProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('compositionID', 'deleteCompositionRule', compositionID); - - validateRequired('objectID', 'deleteCompositionRule', objectID); - - 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: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Delete a Composition Rule from the specified Composition ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param deleteCompositionRule - The deleteCompositionRule object. - * @param deleteCompositionRule.compositionID - Unique Composition ObjectID. - * @param deleteCompositionRule.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. - * @see deleteCompositionRule for the plain version. - */ - deleteCompositionRuleWithHTTPInfo( - { compositionID, objectID }: DeleteCompositionRuleProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('compositionID', 'deleteCompositionRuleWithHTTPInfo', compositionID); - - validateRequired('objectID', 'deleteCompositionRuleWithHTTPInfo', objectID); - - 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: 'DELETE', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('compositionID', 'getComposition', compositionID); - - 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); - }, - /** - * Retrieve a single composition in the current Algolia application. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getComposition for the plain version. - */ - getCompositionWithHTTPInfo( - { compositionID }: GetCompositionProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('compositionID', 'getCompositionWithHTTPInfo', compositionID); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves a rule by its ID. To find the object ID of a rule, use the [`search` operation](https://www.algolia.com/doc/rest-api/composition/search-composition-rules). - * - * Required API Key ACLs: - * - editSettings - * - 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 { - validateRequired('compositionID', 'getRule', compositionID); - - validateRequired('objectID', 'getRule', objectID); - - 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); - }, - /** - * Retrieves a rule by its ID. To find the object ID of a rule, use the [`search` operation](https://www.algolia.com/doc/rest-api/composition/search-composition-rules). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * - 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. - * @see getRule for the plain version. - */ - getRuleWithHTTPInfo( - { compositionID, objectID }: GetRuleProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('compositionID', 'getRuleWithHTTPInfo', compositionID); - - validateRequired('objectID', 'getRuleWithHTTPInfo', objectID); - - 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.requestWithHttpInfo(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 { - validateRequired('compositionID', 'getTask', compositionID); - - validateRequired('taskID', 'getTask', taskID); - - 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); - }, - /** - * Checks the status of a given task. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getTask for the plain version. - */ - getTaskWithHTTPInfo( - { compositionID, taskID }: GetTaskProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('compositionID', 'getTaskWithHTTPInfo', compositionID); - - validateRequired('taskID', 'getTaskWithHTTPInfo', taskID); - - 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.requestWithHttpInfo(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); - }, - /** - * Lists all compositions in the current Algolia application. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see listCompositions for the plain version. - */ - listCompositionsWithHTTPInfo( - { 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.requestWithHttpInfo(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 { - validateRequired('batchParams', 'multipleBatch', batchParams); - - validateRequired('batchParams.requests', 'multipleBatch', batchParams.requests); - - 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); - }, - /** - * Adds, updates, or deletes compositions with a single API request. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see multipleBatch for the plain version. - */ - multipleBatchWithHTTPInfo( - batchParams: BatchParams, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('batchParams', 'multipleBatchWithHTTPInfo', batchParams); - - validateRequired('batchParams.requests', 'multipleBatchWithHTTPInfo', batchParams.requests); - - const requestPath = '/1/compositions/*/batch'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: batchParams, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Update and insert a composition in the current Algolia application. - * - * Required API Key ACLs: - * - editSettings - * @param putComposition - The putComposition object. - * @param putComposition.compositionID - Unique Composition ObjectID. - * @param putComposition.composition - The composition object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - putComposition( - { compositionID, composition }: PutCompositionProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('compositionID', 'putComposition', compositionID); - - validateRequired('composition', 'putComposition', composition); - - validateRequired('composition.objectID', 'putComposition', composition.objectID); - validateRequired('composition.name', 'putComposition', composition.name); - validateRequired('composition.behavior', 'putComposition', composition.behavior); - - const requestPath = '/1/compositions/{compositionID}'.replace( - '{compositionID}', - encodeURIComponent(compositionID), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PUT', - path: requestPath, - queryParameters, - headers, - data: composition, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Update and insert a composition in the current Algolia application. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param putComposition - The putComposition object. - * @param putComposition.compositionID - Unique Composition ObjectID. - * @param putComposition.composition - The composition object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see putComposition for the plain version. - */ - putCompositionWithHTTPInfo( - { compositionID, composition }: PutCompositionProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('compositionID', 'putCompositionWithHTTPInfo', compositionID); - - validateRequired('composition', 'putCompositionWithHTTPInfo', composition); - - validateRequired('composition.objectID', 'putCompositionWithHTTPInfo', composition.objectID); - validateRequired('composition.name', 'putCompositionWithHTTPInfo', composition.name); - validateRequired('composition.behavior', 'putCompositionWithHTTPInfo', composition.behavior); - - const requestPath = '/1/compositions/{compositionID}'.replace( - '{compositionID}', - encodeURIComponent(compositionID), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PUT', - path: requestPath, - queryParameters, - headers, - data: composition, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * If a composition rule with the provided ID already exists, it\'s replaced. Otherwise, a new one is added. - * - * Required API Key ACLs: - * - editSettings - * @param putCompositionRule - The putCompositionRule object. - * @param putCompositionRule.compositionID - Unique Composition ObjectID. - * @param putCompositionRule.objectID - Unique identifier of a rule object. - * @param putCompositionRule.compositionRule - The compositionRule object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - putCompositionRule( - { compositionID, objectID, compositionRule }: PutCompositionRuleProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('compositionID', 'putCompositionRule', compositionID); - - validateRequired('objectID', 'putCompositionRule', objectID); - - validateRequired('compositionRule', 'putCompositionRule', compositionRule); - - validateRequired('compositionRule.objectID', 'putCompositionRule', compositionRule.objectID); - validateRequired('compositionRule.consequence', 'putCompositionRule', compositionRule.consequence); - - 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: 'PUT', - path: requestPath, - queryParameters, - headers, - data: compositionRule, - }; - - return transporter.request(request, requestOptions); - }, - /** - * If a composition rule with the provided ID already exists, it\'s replaced. Otherwise, a new one is added. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param putCompositionRule - The putCompositionRule object. - * @param putCompositionRule.compositionID - Unique Composition ObjectID. - * @param putCompositionRule.objectID - Unique identifier of a rule object. - * @param putCompositionRule.compositionRule - The compositionRule object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see putCompositionRule for the plain version. - */ - putCompositionRuleWithHTTPInfo( - { compositionID, objectID, compositionRule }: PutCompositionRuleProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('compositionID', 'putCompositionRuleWithHTTPInfo', compositionID); - - validateRequired('objectID', 'putCompositionRuleWithHTTPInfo', objectID); - - validateRequired('compositionRule', 'putCompositionRuleWithHTTPInfo', compositionRule); - - validateRequired('compositionRule.objectID', 'putCompositionRuleWithHTTPInfo', compositionRule.objectID); - validateRequired('compositionRule.consequence', 'putCompositionRuleWithHTTPInfo', compositionRule.consequence); - - 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: 'PUT', - path: requestPath, - queryParameters, - headers, - data: compositionRule, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('compositionID', 'saveRules', compositionID); - - validateRequired('rules', 'saveRules', rules); - - 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); - }, - /** - * Create or update or delete multiple composition rules. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see saveRules for the plain version. - */ - saveRulesWithHTTPInfo( - { compositionID, rules }: SaveRulesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('compositionID', 'saveRulesWithHTTPInfo', compositionID); - - validateRequired('rules', 'saveRulesWithHTTPInfo', rules); - - 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.requestWithHttpInfo(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> { - validateRequired('compositionID', 'search', compositionID); - - validateRequired('requestBody', 'search', requestBody); - - 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); - }, - /** - * Runs a query on a single composition and returns matching results. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see search for the plain version. - */ - searchWithHTTPInfo( - { compositionID, requestBody }: SearchProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('compositionID', 'searchWithHTTPInfo', compositionID); - - validateRequired('requestBody', 'searchWithHTTPInfo', requestBody); - - 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.requestWithHttpInfo(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 { - validateRequired('compositionID', 'searchCompositionRules', compositionID); - - 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 composition rules in your index. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchCompositionRules for the plain version. - */ - searchCompositionRulesWithHTTPInfo( - { compositionID, searchCompositionRulesParams }: SearchCompositionRulesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('compositionID', 'searchCompositionRulesWithHTTPInfo', compositionID); - - 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.requestWithHttpInfo(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 { - validateRequired('compositionID', 'searchForFacetValues', compositionID); - - validateRequired('facetName', 'searchForFacetValues', facetName); - - 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); - }, - /** - * 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**. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchForFacetValues for the plain version. - */ - searchForFacetValuesWithHTTPInfo( - { compositionID, facetName, searchForFacetValuesRequest }: SearchForFacetValuesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('compositionID', 'searchForFacetValuesWithHTTPInfo', compositionID); - - validateRequired('facetName', 'searchForFacetValuesWithHTTPInfo', facetName); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Updates the \"sortingStrategy\" field of an existing composition. This endpoint lets you create a new sorting strategy mapping or replace the configured one. The provided sorting indices must be associated indices or replicas of the main targeted index. This endpoint can\'t validate whether the sort index is related to the composition\'s main index. Validation fails at runtime if the index you updated isn\'t related. The update is applied to the specified composition within the current Algolia application and returns a taskID that can be used to track the operation’s completion. - * - * Required API Key ACLs: - * - editSettings - * @param updateSortingStrategyComposition - The updateSortingStrategyComposition object. - * @param updateSortingStrategyComposition.compositionID - Unique Composition ObjectID. - * @param updateSortingStrategyComposition.requestBody - The requestBody object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - updateSortingStrategyComposition( - { compositionID, requestBody }: UpdateSortingStrategyCompositionProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('compositionID', 'updateSortingStrategyComposition', compositionID); - - validateRequired('requestBody', 'updateSortingStrategyComposition', requestBody); - - const requestPath = '/1/compositions/{compositionID}/sortingStrategy'.replace( - '{compositionID}', - encodeURIComponent(compositionID), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: requestBody, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Updates the \"sortingStrategy\" field of an existing composition. This endpoint lets you create a new sorting strategy mapping or replace the configured one. The provided sorting indices must be associated indices or replicas of the main targeted index. This endpoint can\'t validate whether the sort index is related to the composition\'s main index. Validation fails at runtime if the index you updated isn\'t related. The update is applied to the specified composition within the current Algolia application and returns a taskID that can be used to track the operation’s completion. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - editSettings - * @param updateSortingStrategyComposition - The updateSortingStrategyComposition object. - * @param updateSortingStrategyComposition.compositionID - Unique Composition ObjectID. - * @param updateSortingStrategyComposition.requestBody - The requestBody object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see updateSortingStrategyComposition for the plain version. - */ - updateSortingStrategyCompositionWithHTTPInfo( - { compositionID, requestBody }: UpdateSortingStrategyCompositionProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('compositionID', 'updateSortingStrategyCompositionWithHTTPInfo', compositionID); - - validateRequired('requestBody', 'updateSortingStrategyCompositionWithHTTPInfo', requestBody); - - const requestPath = '/1/compositions/{compositionID}/sortingStrategy'.replace( - '{compositionID}', - encodeURIComponent(compositionID), - ); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: requestBody, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/composition/tsconfig.json b/packages/composition/tsconfig.json deleted file mode 100644 index 444e8bb64..000000000 --- a/packages/composition/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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 deleted file mode 100644 index e39b5912d..000000000 --- a/packages/composition/tsup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -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', - target: 'es2018', - 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 deleted file mode 100644 index fddf416f9..000000000 --- a/packages/ingestion/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index bd03be25b..000000000 --- a/packages/ingestion/README.md +++ /dev/null @@ -1,76 +0,0 @@ -

- - 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 • - 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.56.0 -# or -npm install @algolia/ingestion@1.56.0 -# or -pnpm add @algolia/ingestion@1.56.0 -``` - -### 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/sdk/methods/ingestion/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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 deleted file mode 100644 index 3f1f536bf..000000000 --- a/packages/ingestion/builds/browser.ts +++ /dev/null @@ -1,66 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -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 | undefined, -): 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(', ')}`); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - 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()], - }), - ...browserOptions, - }); -} - -export type IngestionClient = ReturnType; diff --git a/packages/ingestion/builds/fetch.ts b/packages/ingestion/builds/fetch.ts deleted file mode 100644 index 54da67c1e..000000000 --- a/packages/ingestion/builds/fetch.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -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 | undefined, -): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/ingestion/builds/node.ts b/packages/ingestion/builds/node.ts deleted file mode 100644 index 8d4b591be..000000000 --- a/packages/ingestion/builds/node.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -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 | undefined, -): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/ingestion/builds/worker.ts b/packages/ingestion/builds/worker.ts deleted file mode 100644 index 11bc8b896..000000000 --- a/packages/ingestion/builds/worker.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Code generated by 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 | undefined, -): 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(', ')}`); - } - - const { compression: _compression, ...workerOptions } = options || {}; - - 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(), - ...workerOptions, - }), - }; -} diff --git a/packages/ingestion/index.d.ts b/packages/ingestion/index.d.ts deleted file mode 100644 index e81a1cd3e..000000000 --- a/packages/ingestion/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/node'; diff --git a/packages/ingestion/index.js b/packages/ingestion/index.js deleted file mode 100644 index 21e26aad3..000000000 --- a/packages/ingestion/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/ingestion/model/action.ts b/packages/ingestion/model/action.ts deleted file mode 100644 index c560b65d1..000000000 --- a/packages/ingestion/model/action.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 indexing operation to perform: - `addObject`: adds records to an index. Equivalent to the \"Add a new record (with auto-generated object ID)\" operation. - `updateObject`: adds or replaces records in an index. Equivalent to the \"Add or replace a record\" operation. - `partialUpdateObject`: adds or updates attributes within records. Equivalent to the \"Add or update attributes\" operation with the `createIfNoExists` parameter set to true. (If a record with the specified `objectID` doesn\'t exist in the specified index, this action creates adds the record to the index) - `partialUpdateObjectNoCreate`: same as `partialUpdateObject`, but with `createIfNoExists` set to false. (A record isn\'t added to the index if its `objectID` doesn\'t exist) - `deleteObject`: delete records from an index. Equivalent to the \"Delete a record\" operation. - `delete`. Delete an index. Equivalent to the \"Delete an index\" operation. - `clear`: delete all records from an index. Equivalent to the \"Delete all records from an index 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 deleted file mode 100644 index 44f3870c9..000000000 --- a/packages/ingestion/model/actionType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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' | 'partialNoCreate' | 'append'; diff --git a/packages/ingestion/model/authAPIKey.ts b/packages/ingestion/model/authAPIKey.ts deleted file mode 100644 index 3adfa15a1..000000000 --- a/packages/ingestion/model/authAPIKey.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index b012ca9ca..000000000 --- a/packages/ingestion/model/authAPIKeyPartial.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/ingestion/model/authAlgolia.ts b/packages/ingestion/model/authAlgolia.ts deleted file mode 100644 index 2e81fd24c..000000000 --- a/packages/ingestion/model/authAlgolia.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 5731c14fe..000000000 --- a/packages/ingestion/model/authAlgoliaInsights.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 4409e3137..000000000 --- a/packages/ingestion/model/authAlgoliaInsightsPartial.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Algolia API key with the ACL: `search`. This field is `null` in the API response. - */ - apiKey?: string | undefined; -}; diff --git a/packages/ingestion/model/authAlgoliaPartial.ts b/packages/ingestion/model/authAlgoliaPartial.ts deleted file mode 100644 index b1375ef74..000000000 --- a/packages/ingestion/model/authAlgoliaPartial.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Algolia API key with the ACL: `addObject`, `deleteObject`, `settings`, `editSettings`, `listIndexes`, `deleteIndex`. This field is `null` in the API response. - */ - apiKey?: string | undefined; -}; diff --git a/packages/ingestion/model/authBasic.ts b/packages/ingestion/model/authBasic.ts deleted file mode 100644 index cf779d92c..000000000 --- a/packages/ingestion/model/authBasic.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 436e2ce51..000000000 --- a/packages/ingestion/model/authBasicPartial.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Password. This field is `null` in the API response. - */ - password?: string | undefined; -}; diff --git a/packages/ingestion/model/authGoogleServiceAccount.ts b/packages/ingestion/model/authGoogleServiceAccount.ts deleted file mode 100644 index 6cd4c6ff6..000000000 --- a/packages/ingestion/model/authGoogleServiceAccount.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index e7178c403..000000000 --- a/packages/ingestion/model/authGoogleServiceAccountPartial.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Private key of the Google service account. This field is `null` in the API response. - */ - privateKey?: string | undefined; -}; diff --git a/packages/ingestion/model/authInput.ts b/packages/ingestion/model/authInput.ts deleted file mode 100644 index 788fdec7c..000000000 --- a/packages/ingestion/model/authInput.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 965f2cb5a..000000000 --- a/packages/ingestion/model/authInputPartial.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 92ab33519..000000000 --- a/packages/ingestion/model/authOAuth.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Client secret. This field is `null` in the API response. - */ - client_secret?: string | undefined; - - /** - * Authorization code. Used during an `authorization_code` grant type flow, to request an access_token when creating/updating the authentication. This field is not returned in the API response. - */ - code?: string | undefined; - - /** - * OAuth scope. - */ - scope?: string | undefined; -}; diff --git a/packages/ingestion/model/authOAuthPartial.ts b/packages/ingestion/model/authOAuthPartial.ts deleted file mode 100644 index 1a83d2a67..000000000 --- a/packages/ingestion/model/authOAuthPartial.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Client ID. - */ - client_id?: string | undefined; - - /** - * Client secret. This field is `null` in the API response. - */ - client_secret?: string | undefined; - - /** - * Authorization code. Used during an `authorization_code` grant type flow, to request an access_token when creating/updating the authentication. This field is not returned in the API response. - */ - code?: string | undefined; - - /** - * OAuth scope. - */ - scope?: string | undefined; -}; diff --git a/packages/ingestion/model/authentication.ts b/packages/ingestion/model/authentication.ts deleted file mode 100644 index cca277a06..000000000 --- a/packages/ingestion/model/authentication.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Owner of the resource. - */ - owner?: string | null | undefined; - - input: AuthInputPartial; - - /** - * Date and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; - - /** - * Date and time when the resource was last updated, in RFC 3339 format. - */ - updatedAt: string; -}; diff --git a/packages/ingestion/model/authenticationCreate.ts b/packages/ingestion/model/authenticationCreate.ts deleted file mode 100644 index d1570adc4..000000000 --- a/packages/ingestion/model/authenticationCreate.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - input: AuthInput; -}; diff --git a/packages/ingestion/model/authenticationCreateResponse.ts b/packages/ingestion/model/authenticationCreateResponse.ts deleted file mode 100644 index 5ee6fcc3d..000000000 --- a/packages/ingestion/model/authenticationCreateResponse.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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 and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; -}; diff --git a/packages/ingestion/model/authenticationSearch.ts b/packages/ingestion/model/authenticationSearch.ts deleted file mode 100644 index 62f1faf84..000000000 --- a/packages/ingestion/model/authenticationSearch.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index c876d0657..000000000 --- a/packages/ingestion/model/authenticationSortKeys.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 5790b94eb..000000000 --- a/packages/ingestion/model/authenticationType.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index d45246ca4..000000000 --- a/packages/ingestion/model/authenticationUpdate.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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'; - -/** - * Request body for updating an authentication resource. - */ -export type AuthenticationUpdate = { - /** - * Descriptive name for the resource. - */ - name?: string | undefined; - - input?: AuthInputPartial | undefined; -}; diff --git a/packages/ingestion/model/authenticationUpdateResponse.ts b/packages/ingestion/model/authenticationUpdateResponse.ts deleted file mode 100644 index 5fea3b08e..000000000 --- a/packages/ingestion/model/authenticationUpdateResponse.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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 and time when the resource was last updated, in RFC 3339 format. - */ - updatedAt: string; -}; diff --git a/packages/ingestion/model/bigCommerceChannel.ts b/packages/ingestion/model/bigCommerceChannel.ts deleted file mode 100644 index 229a25697..000000000 --- a/packages/ingestion/model/bigCommerceChannel.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/ingestion/model/bigCommerceMetafield.ts b/packages/ingestion/model/bigCommerceMetafield.ts deleted file mode 100644 index 6be2ffb5b..000000000 --- a/packages/ingestion/model/bigCommerceMetafield.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index ed9d8a8db..000000000 --- a/packages/ingestion/model/bigQueryDataType.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 10785636d..000000000 --- a/packages/ingestion/model/clientMethodProps.ts +++ /dev/null @@ -1,796 +0,0 @@ -// Code generated by OpenAPI Generator (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 { 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 { RunTaskPayload } from '../model/runTaskPayload'; -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 { TaskReplace } from '../model/taskReplace'; -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 { TransformationType } from '../model/transformationType'; -import type { TriggerType } from '../model/triggerType'; - -import type { ChunkedHelperOptions } from '@algolia/client-common'; - -/** - * Properties for the `customDelete` method. - */ -export type CustomDeleteProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customGet` method. - */ -export type CustomGetProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customPost` method. - */ -export type CustomPostProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `customPut` method. - */ -export type CustomPutProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * 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 | undefined; - /** - * Page number of the paginated API response. - */ - page?: number | undefined; - /** - * Type of authentication resource to retrieve. - */ - type?: Array | undefined; - /** - * Ecommerce platform for which to retrieve authentications. - */ - platform?: Array | undefined; - /** - * Property by which to sort the list of authentications. - */ - sort?: AuthenticationSortKeys | undefined; - /** - * Sort order of the response, ascending or descending. - */ - order?: OrderKeys | undefined; -}; - -/** - * Properties for the `listDestinations` method. - */ -export type ListDestinationsProps = { - /** - * Number of items per page. - */ - itemsPerPage?: number | undefined; - /** - * Page number of the paginated API response. - */ - page?: number | undefined; - /** - * Destination type. - */ - type?: Array | undefined; - /** - * Authentication ID used by destinations. - */ - authenticationID?: Array | undefined; - /** - * Get the list of destinations used by a transformation. - */ - transformationID?: string | undefined; - /** - * Property by which to sort the destinations. - */ - sort?: DestinationSortKeys | undefined; - /** - * Sort order of the response, ascending or descending. - */ - order?: OrderKeys | undefined; -}; - -/** - * Properties for the `listEvents` method. - */ -export type ListEventsProps = { - /** - * Unique identifier of a task run. - */ - runID: string; - /** - * Number of items per page. - */ - itemsPerPage?: number | undefined; - /** - * Page number of the paginated API response. - */ - page?: number | undefined; - /** - * Event status for filtering the list of task runs. - */ - status?: Array | undefined; - /** - * Event type for filtering the list of task runs. - */ - type?: Array | undefined; - /** - * Property by which to sort the list of task run events. - */ - sort?: EventSortKeys | undefined; - /** - * Sort order of the response, ascending or descending. - */ - order?: OrderKeys | undefined; - /** - * 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 | undefined; - /** - * Date and time in RFC 3339 format for the latest events to retrieve. By default, the current time is used. - */ - endDate?: string | undefined; -}; - -/** - * Properties for the `listRuns` method. - */ -export type ListRunsProps = { - /** - * Number of items per page. - */ - itemsPerPage?: number | undefined; - /** - * Page number of the paginated API response. - */ - page?: number | undefined; - /** - * Run status for filtering the list of task runs. - */ - status?: Array | undefined; - /** - * Run type for filtering the list of task runs. - */ - type?: Array | undefined; - /** - * Task ID for filtering the list of task runs. - */ - taskID?: string | undefined; - /** - * Property by which to sort the list of task runs. - */ - sort?: RunSortKeys | undefined; - /** - * Sort order of the response, ascending or descending. - */ - order?: OrderKeys | undefined; - /** - * Date and time for the earliest run to retrieve, in RFC 3339 format. By default, the current day minus seven days is used. - */ - startDate?: string | undefined; - /** - * Date and time for the latest run to retrieve, in RFC 3339 format. By default, the current day is used. - */ - endDate?: string | undefined; -}; - -/** - * Properties for the `listSources` method. - */ -export type ListSourcesProps = { - /** - * Number of items per page. - */ - itemsPerPage?: number | undefined; - /** - * Page number of the paginated API response. - */ - page?: number | undefined; - /** - * Source type. Some sources require authentication. - */ - type?: Array | undefined; - /** - * Authentication IDs of the sources to retrieve. \'none\' returns sources that doesn\'t have an authentication. - */ - authenticationID?: Array | undefined; - /** - * Property by which to sort the list of sources. - */ - sort?: SourceSortKeys | undefined; - /** - * Sort order of the response, ascending or descending. - */ - order?: OrderKeys | undefined; -}; - -/** - * Properties for the `listTasks` method. - */ -export type ListTasksProps = { - /** - * Number of items per page. - */ - itemsPerPage?: number | undefined; - /** - * Page number of the paginated API response. - */ - page?: number | undefined; - /** - * Actions for filtering the list of tasks. - */ - action?: Array | undefined; - /** - * Whether to filter the list of tasks by the `enabled` status. - */ - enabled?: boolean | undefined; - /** - * Source IDs for filtering the list of tasks. - */ - sourceID?: Array | undefined; - /** - * Filters the tasks with the specified source type. - */ - sourceType?: Array | undefined; - /** - * Destination IDs for filtering the list of tasks. - */ - destinationID?: Array | undefined; - /** - * Type of task trigger for filtering the list of tasks. - */ - triggerType?: Array | undefined; - /** - * If specified, the response only includes tasks with notifications.email.enabled set to this value. - */ - withEmailNotifications?: boolean | undefined; - /** - * Property by which to sort the list of tasks. - */ - sort?: TaskSortKeys | undefined; - /** - * Sort order of the response, ascending or descending. - */ - order?: OrderKeys | undefined; -}; - -/** - * Properties for the `listTasksV1` method. - */ -export type ListTasksV1Props = { - /** - * Number of items per page. - */ - itemsPerPage?: number | undefined; - /** - * Page number of the paginated API response. - */ - page?: number | undefined; - /** - * Actions for filtering the list of tasks. - */ - action?: Array | undefined; - /** - * Whether to filter the list of tasks by the `enabled` status. - */ - enabled?: boolean | undefined; - /** - * Source IDs for filtering the list of tasks. - */ - sourceID?: Array | undefined; - /** - * Destination IDs for filtering the list of tasks. - */ - destinationID?: Array | undefined; - /** - * Type of task trigger for filtering the list of tasks. - */ - triggerType?: Array | undefined; - /** - * Property by which to sort the list of tasks. - */ - sort?: TaskSortKeys | undefined; - /** - * Sort order of the response, ascending or descending. - */ - order?: OrderKeys | undefined; -}; - -/** - * Properties for the `listTransformations` method. - */ -export type ListTransformationsProps = { - /** - * Number of items per page. - */ - itemsPerPage?: number | undefined; - /** - * Page number of the paginated API response. - */ - page?: number | undefined; - /** - * Property by which to sort the list of transformations. - */ - sort?: TransformationSortKeys | undefined; - /** - * Sort order of the response, ascending or descending. - */ - order?: OrderKeys | undefined; - /** - * Whether to filter the list of transformations by the type of transformation. - */ - type?: TransformationType | undefined; -}; - -/** - * Properties for the `push` method. - */ -export type PushProps = { - /** - * Name of the index on which to perform the operation. - */ - indexName: string; - 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 | undefined; - /** - * This is required when targeting an index that does not have a push connector setup (e.g. a tmp index), but you wish to attach another index\'s transformation to it (e.g. the source index name). - */ - referenceIndexName?: string | undefined; -}; - -/** - * Properties for the `pushTask` method. - */ -export type PushTaskProps = { - /** - * Unique identifier of a task. - */ - taskID: string; - 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 | undefined; -}; - -/** - * Properties for the `replaceTask` method. - */ -export type ReplaceTaskProps = { - /** - * Unique identifier of a task. - */ - taskID: string; - taskReplace: TaskReplace; -}; - -/** - * Properties for the `runSource` method. - */ -export type RunSourceProps = { - /** - * Unique identifier of a source. - */ - sourceID: string; - /** - * - */ - runSourcePayload?: RunSourcePayload | undefined; -}; - -/** - * Properties for the `runTask` method. - */ -export type RunTaskProps = { - /** - * Unique identifier of a task. - */ - taskID: string; - /** - * - */ - runTaskPayload?: RunTaskPayload | undefined; -}; - -/** - * Properties for the `runTaskV1` method. - */ -export type RunTaskV1Props = { - /** - * Unique identifier of a task. - */ - taskID: string; - /** - * - */ - runTaskPayload?: RunTaskPayload | undefined; -}; - -/** - * 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; -}; - -export type ChunkedPushOptions = ChunkedHelperOptions & { - /** - * The `indexName` to replace `objects` in. - */ - indexName: string; - - /** - * The `batch` `action` to perform on the given array of `objects`, defaults to `addObject`. - */ - action?: Action | undefined; - - /** - * 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 | undefined; - - /** - * The size of the chunk of `objects`. The number of `batch` calls will be equal to `length(objects) / batchSize`. Defaults to 1000. - */ - batchSize?: number | undefined; - - /** - * This is required when targeting an index that does not have a push connector setup (e.g. a tmp index), but you wish to attach another index's transformation to it (e.g. the source index name). - */ - referenceIndexName?: string | undefined; - - /** - * The array of `objects` to store in the given Algolia `indexName`. - */ - objects: Array>; -}; diff --git a/packages/ingestion/model/commercetoolsCustomFields.ts b/packages/ingestion/model/commercetoolsCustomFields.ts deleted file mode 100644 index 1f5bfd4e5..000000000 --- a/packages/ingestion/model/commercetoolsCustomFields.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Price custom fields. - */ - price?: Array | null | undefined; - - /** - * Category custom fields. - */ - category?: Array | null | undefined; -}; diff --git a/packages/ingestion/model/deleteResponse.ts b/packages/ingestion/model/deleteResponse.ts deleted file mode 100644 index c76e0352f..000000000 --- a/packages/ingestion/model/deleteResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 and time when the resource was deleted, in RFC 3339 format. - */ - deletedAt: string; -}; diff --git a/packages/ingestion/model/destination.ts b/packages/ingestion/model/destination.ts deleted file mode 100644 index 53b19913c..000000000 --- a/packages/ingestion/model/destination.ts +++ /dev/null @@ -1,45 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - input: DestinationInput; - - /** - * Date and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; - - /** - * Date and time when the resource was last updated, in RFC 3339 format. - */ - updatedAt: string; - - /** - * Universally unique identifier (UUID) of an authentication resource. - */ - authenticationID?: string | undefined; - - transformationIDs?: Array | undefined; -}; diff --git a/packages/ingestion/model/destinationCreate.ts b/packages/ingestion/model/destinationCreate.ts deleted file mode 100644 index a271f48eb..000000000 --- a/packages/ingestion/model/destinationCreate.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - transformationIDs?: Array | undefined; -}; diff --git a/packages/ingestion/model/destinationCreateResponse.ts b/packages/ingestion/model/destinationCreateResponse.ts deleted file mode 100644 index 3e3e472a3..000000000 --- a/packages/ingestion/model/destinationCreateResponse.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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 and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; -}; diff --git a/packages/ingestion/model/destinationInput.ts b/packages/ingestion/model/destinationInput.ts deleted file mode 100644 index 8c96be70f..000000000 --- a/packages/ingestion/model/destinationInput.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 DestinationInput = { - /** - * Algolia index name (case-sensitive). - */ - indexName: string; - - recordType?: RecordType | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/ingestion/model/destinationSearch.ts b/packages/ingestion/model/destinationSearch.ts deleted file mode 100644 index bbb601021..000000000 --- a/packages/ingestion/model/destinationSearch.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index c4feb53e9..000000000 --- a/packages/ingestion/model/destinationSortKeys.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index c970c8589..000000000 --- a/packages/ingestion/model/destinationType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 0111c8ee4..000000000 --- a/packages/ingestion/model/destinationUpdate.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { DestinationUpdateInput } from './destinationUpdateInput'; - -/** - * API request body for updating a destination. - */ -export type DestinationUpdate = { - /** - * Descriptive name for the resource. - */ - name?: string | undefined; - - input?: DestinationUpdateInput | undefined; - - /** - * Universally unique identifier (UUID) of an authentication resource. - */ - authenticationID?: string | undefined; - - transformationIDs?: Array | undefined; -}; diff --git a/packages/ingestion/model/destinationUpdateInput.ts b/packages/ingestion/model/destinationUpdateInput.ts deleted file mode 100644 index ed39624d4..000000000 --- a/packages/ingestion/model/destinationUpdateInput.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 DestinationUpdateInput = { - /** - * Algolia index name (case-sensitive). - */ - indexName?: string | undefined; - - recordType?: RecordType | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/ingestion/model/destinationUpdateResponse.ts b/packages/ingestion/model/destinationUpdateResponse.ts deleted file mode 100644 index 5fbb1afb9..000000000 --- a/packages/ingestion/model/destinationUpdateResponse.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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 and time when the resource was last updated, in RFC 3339 format. - */ - updatedAt: string; -}; diff --git a/packages/ingestion/model/dockerStreams.ts b/packages/ingestion/model/dockerStreams.ts deleted file mode 100644 index 4d6e5068f..000000000 --- a/packages/ingestion/model/dockerStreams.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - syncMode: DockerStreamsSyncMode; -}; diff --git a/packages/ingestion/model/dockerStreamsInput.ts b/packages/ingestion/model/dockerStreamsInput.ts deleted file mode 100644 index d01999d29..000000000 --- a/packages/ingestion/model/dockerStreamsInput.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 05e40ce54..000000000 --- a/packages/ingestion/model/dockerStreamsSyncMode.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 22b4aae47..000000000 --- a/packages/ingestion/model/emailNotifications.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/ingestion/model/entityType.ts b/packages/ingestion/model/entityType.ts deleted file mode 100644 index 5fe42d4d4..000000000 --- a/packages/ingestion/model/entityType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index f31be6046..000000000 --- a/packages/ingestion/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/ingestion/model/event.ts b/packages/ingestion/model/event.ts deleted file mode 100644 index a2366f6f2..000000000 --- a/packages/ingestion/model/event.ts +++ /dev/null @@ -1,35 +0,0 @@ -// Code generated by OpenAPI Generator (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 | null; - - type: EventType; - - /** - * The extracted record batch size. - */ - batchSize: number; - - data?: { [key: string]: any } | null | undefined; - - /** - * Date and time when the resource was published, in RFC 3339 format. - */ - publishedAt: string; -}; diff --git a/packages/ingestion/model/eventSortKeys.ts b/packages/ingestion/model/eventSortKeys.ts deleted file mode 100644 index ab3c32630..000000000 --- a/packages/ingestion/model/eventSortKeys.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 16fb14c85..000000000 --- a/packages/ingestion/model/eventStatus.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 1be6a0e70..000000000 --- a/packages/ingestion/model/eventType.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index dd8ac93dc..000000000 --- a/packages/ingestion/model/index.ts +++ /dev/null @@ -1,156 +0,0 @@ -// Code generated by 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 './destinationInput'; -export * from './destinationSearch'; -export * from './destinationSortKeys'; -export * from './destinationType'; -export * from './destinationUpdate'; -export * from './destinationUpdateInput'; -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 './runTaskPayload'; -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 './sourceAlgoliaIndex'; -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 './sourceUpdateAlgoliaIndex'; -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 './taskReplace'; -export * from './taskSearch'; -export * from './taskSortKeys'; -export * from './taskUpdate'; -export * from './taskUpdateResponse'; -export * from './taskUpdateV1'; -export * from './taskV1'; -export * from './transformation'; -export * from './transformationCode'; -export * from './transformationCreate'; -export * from './transformationCreateResponse'; -export * from './transformationError'; -export * from './transformationInput'; -export * from './transformationNoCode'; -export * from './transformationSearch'; -export * from './transformationSortKeys'; -export * from './transformationTry'; -export * from './transformationTryResponse'; -export * from './transformationType'; -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 deleted file mode 100644 index 2b95fa6eb..000000000 --- a/packages/ingestion/model/listAuthenticationsResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 05922d886..000000000 --- a/packages/ingestion/model/listDestinationsResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 6771785c7..000000000 --- a/packages/ingestion/model/listEventsResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 2d42ccbb8..000000000 --- a/packages/ingestion/model/listSourcesResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index abc5250f7..000000000 --- a/packages/ingestion/model/listTasksResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 5abccbc9c..000000000 --- a/packages/ingestion/model/listTasksResponseV1.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index d2e920236..000000000 --- a/packages/ingestion/model/listTransformationsResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index e4a083f63..000000000 --- a/packages/ingestion/model/mappingFieldDirective.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index ba47ff4fe..000000000 --- a/packages/ingestion/model/mappingFormatSchema.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 3979b6f79..000000000 --- a/packages/ingestion/model/mappingInput.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index b4712cfbd..000000000 --- a/packages/ingestion/model/mappingKitAction.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 deleted file mode 100644 index 4a41ccb06..000000000 --- a/packages/ingestion/model/mappingTypeCSV.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 9f50aca5b..000000000 --- a/packages/ingestion/model/methodType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 67e3fa4e5..000000000 --- a/packages/ingestion/model/notifications.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 3a8d6a1e9..000000000 --- a/packages/ingestion/model/onDemandTrigger.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/ingestion/model/onDemandTriggerInput.ts b/packages/ingestion/model/onDemandTriggerInput.ts deleted file mode 100644 index 947b5e17d..000000000 --- a/packages/ingestion/model/onDemandTriggerInput.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index fbc5b504b..000000000 --- a/packages/ingestion/model/onDemandTriggerType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 215e6d6d4..000000000 --- a/packages/ingestion/model/orderKeys.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index fc359ae3c..000000000 --- a/packages/ingestion/model/pagination.ts +++ /dev/null @@ -1,26 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 03bb1273c..000000000 --- a/packages/ingestion/model/platform.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index be1069c9e..000000000 --- a/packages/ingestion/model/platformNone.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 30fefad8b..000000000 --- a/packages/ingestion/model/platformWithNone.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 740d60e32..000000000 --- a/packages/ingestion/model/policies.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/ingestion/model/pushTaskPayload.ts b/packages/ingestion/model/pushTaskPayload.ts deleted file mode 100644 index 70402bb23..000000000 --- a/packages/ingestion/model/pushTaskPayload.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index ce64ade2e..000000000 --- a/packages/ingestion/model/pushTaskRecords.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 56f6b33c6..000000000 --- a/packages/ingestion/model/recordType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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' | 'collection'; diff --git a/packages/ingestion/model/run.ts b/packages/ingestion/model/run.ts deleted file mode 100644 index af383d7e7..000000000 --- a/packages/ingestion/model/run.ts +++ /dev/null @@ -1,56 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - outcome?: RunOutcome | undefined; - - /** - * Maximum accepted percentage of failures for a task run to finish successfully. - */ - failureThreshold?: number | undefined; - - /** - * More information about the task run\'s outcome. - */ - reason?: string | undefined; - - reasonCode?: RunReasonCode | undefined; - - type: RunType; - - /** - * Date and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; - - /** - * Date and time when the task started, in RFC 3339 format. - */ - startedAt?: string | undefined; - - /** - * Date and time when the task finished, in RFC 3339 format. - */ - finishedAt?: string | undefined; -}; diff --git a/packages/ingestion/model/runListResponse.ts b/packages/ingestion/model/runListResponse.ts deleted file mode 100644 index 785329627..000000000 --- a/packages/ingestion/model/runListResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 48bddb6a4..000000000 --- a/packages/ingestion/model/runOutcome.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 545f98517..000000000 --- a/packages/ingestion/model/runProgress.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 21ecfdc08..000000000 --- a/packages/ingestion/model/runReasonCode.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by 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' - | 'cancelled' - | 'critical' - | 'no_events' - | 'too_many_errors' - | 'lacking_events' - | 'ok' - | 'blocking' - | 'idle'; diff --git a/packages/ingestion/model/runResponse.ts b/packages/ingestion/model/runResponse.ts deleted file mode 100644 index 3c9868bf0..000000000 --- a/packages/ingestion/model/runResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; -}; diff --git a/packages/ingestion/model/runSortKeys.ts b/packages/ingestion/model/runSortKeys.ts deleted file mode 100644 index 7215c8781..000000000 --- a/packages/ingestion/model/runSortKeys.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 9f592e9ba..000000000 --- a/packages/ingestion/model/runSourcePayload.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by OpenAPI Generator (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 reindex/update. - */ - indexToInclude?: Array | undefined; - - /** - * List of index names to exclude in reindex/update. - */ - indexToExclude?: Array | undefined; - - /** - * List of entityIDs to update. - */ - entityIDs?: Array | undefined; - - entityType?: EntityType | undefined; - - /** - * Additional information that will be passed to the created runs. - */ - runMetadata?: { [key: string]: any } | undefined; -}; diff --git a/packages/ingestion/model/runSourceResponse.ts b/packages/ingestion/model/runSourceResponse.ts deleted file mode 100644 index ec46f12a9..000000000 --- a/packages/ingestion/model/runSourceResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; -}; diff --git a/packages/ingestion/model/runStatus.ts b/packages/ingestion/model/runStatus.ts deleted file mode 100644 index 21f9db498..000000000 --- a/packages/ingestion/model/runStatus.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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' | 'finished' | 'skipped'; diff --git a/packages/ingestion/model/runTaskPayload.ts b/packages/ingestion/model/runTaskPayload.ts deleted file mode 100644 index 1d4145a9b..000000000 --- a/packages/ingestion/model/runTaskPayload.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 RunTaskPayload = { - /** - * Additional information that will be passed to the created run. - */ - runMetadata?: { [key: string]: any } | undefined; -}; diff --git a/packages/ingestion/model/runType.ts b/packages/ingestion/model/runType.ts deleted file mode 100644 index 4ec88b3a3..000000000 --- a/packages/ingestion/model/runType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 0103cdd94..000000000 --- a/packages/ingestion/model/scheduleTrigger.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 deleted file mode 100644 index f96e656e0..000000000 --- a/packages/ingestion/model/scheduleTriggerInput.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a5cebe1ed..000000000 --- a/packages/ingestion/model/scheduleTriggerType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 726a5d1f1..000000000 --- a/packages/ingestion/model/shopifyInput.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 68af37e90..000000000 --- a/packages/ingestion/model/shopifyMarket.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index af6ba8e47..000000000 --- a/packages/ingestion/model/shopifyMetafield.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index b7e1d8e02..000000000 --- a/packages/ingestion/model/source.ts +++ /dev/null @@ -1,37 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - input?: SourceInput | undefined; - - /** - * Universally unique identifier (UUID) of an authentication resource. - */ - authenticationID?: string | undefined; - - /** - * Date and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; - - /** - * Date and time when the resource was last updated, in RFC 3339 format. - */ - updatedAt: string; -}; diff --git a/packages/ingestion/model/sourceAlgoliaIndex.ts b/packages/ingestion/model/sourceAlgoliaIndex.ts deleted file mode 100644 index 6fd6c5b5c..000000000 --- a/packages/ingestion/model/sourceAlgoliaIndex.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Specific configuration attributes of an `algoliaIndex` source. - */ -export type SourceAlgoliaIndex = { - /** - * Name of the Algolia index to read records from. - */ - indexName: string; - - /** - * SQL-like filter expression applied while browsing the source index. See [filters](https://www.algolia.com/doc/api-reference/api-parameters/filters/). - */ - filters?: string | undefined; -}; diff --git a/packages/ingestion/model/sourceBigCommerce.ts b/packages/ingestion/model/sourceBigCommerce.ts deleted file mode 100644 index 2b8df7d86..000000000 --- a/packages/ingestion/model/sourceBigCommerce.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (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'; - -/** - * Specific configuration attributes of a `bigcommerce` source. - */ -export type SourceBigCommerce = { - /** - * Store hash identifying your BigCommerce store. - */ - storeHash: string; - - channel?: BigCommerceChannel | undefined; - - customFields?: Array | undefined; - - productMetafields?: Array | undefined; - - variantMetafields?: Array | undefined; -}; diff --git a/packages/ingestion/model/sourceBigQuery.ts b/packages/ingestion/model/sourceBigQuery.ts deleted file mode 100644 index 7ea7d46c0..000000000 --- a/packages/ingestion/model/sourceBigQuery.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by OpenAPI Generator (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'; - -/** - * Specific configuration attributes of a `bigquery` source. - */ -export type SourceBigQuery = { - /** - * Project ID of the BigQuery source. - */ - projectID: string; - - /** - * Dataset ID of the BigQuery source. - */ - datasetID: string; - - dataType?: BigQueryDataType | undefined; - - /** - * Table name for the BigQuery export. - */ - table?: string | undefined; - - /** - * Table prefix for a Google Analytics 4 data export to BigQuery. - */ - tablePrefix?: string | undefined; - - /** - * Custom SQL request to extract data from the BigQuery table. - */ - customSQLRequest?: string | undefined; - - /** - * Name of a column that contains a unique ID which will be used as `objectID` in Algolia. - */ - uniqueIDColumn?: string | undefined; -}; diff --git a/packages/ingestion/model/sourceCSV.ts b/packages/ingestion/model/sourceCSV.ts deleted file mode 100644 index 200dd89f9..000000000 --- a/packages/ingestion/model/sourceCSV.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Code generated by OpenAPI Generator (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'; - -/** - * Specific configuration attributes of a `csv` source. - */ -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 | undefined; - - /** - * Key-value pairs of column names and their expected types. - */ - mapping?: { [key: string]: MappingTypeCSV } | undefined; - - method?: MethodType | undefined; - - /** - * The character used to split the value on each line, default to a comma (\\r, \\n, 0xFFFD, and space are forbidden). - */ - delimiter?: string | undefined; -}; diff --git a/packages/ingestion/model/sourceCommercetools.ts b/packages/ingestion/model/sourceCommercetools.ts deleted file mode 100644 index e2659ee6d..000000000 --- a/packages/ingestion/model/sourceCommercetools.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Code generated by OpenAPI Generator (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'; - -/** - * Specific configuration attributes of a `commercetools` source. - */ -export type SourceCommercetools = { - storeKeys?: Array | undefined; - - /** - * Locales for your commercetools stores. - */ - locales?: Array | undefined; - - 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 | undefined; - - /** - * Predicate to filter out specific products when indexing. For more information, see [Query Predicate](https://docs.commercetools.com/api/predicates/query). - */ - productQueryPredicate?: string | undefined; - - /** - * When set to true, the connector indexes objects with all images attributes instead of only the URLs. - */ - useImagesObjects?: boolean | undefined; - - customFields?: CommercetoolsCustomFields | undefined; -}; diff --git a/packages/ingestion/model/sourceCreate.ts b/packages/ingestion/model/sourceCreate.ts deleted file mode 100644 index be57f737d..000000000 --- a/packages/ingestion/model/sourceCreate.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Universally unique identifier (UUID) of an authentication resource. - */ - authenticationID?: string | undefined; -}; diff --git a/packages/ingestion/model/sourceCreateResponse.ts b/packages/ingestion/model/sourceCreateResponse.ts deleted file mode 100644 index b96aea7a6..000000000 --- a/packages/ingestion/model/sourceCreateResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; -}; diff --git a/packages/ingestion/model/sourceDocker.ts b/packages/ingestion/model/sourceDocker.ts deleted file mode 100644 index aeb5f6199..000000000 --- a/packages/ingestion/model/sourceDocker.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Specific configuration attributes of a `docker` source. - */ -export type SourceDocker = { - /** - * Name of the connector. - */ - image: string; - - /** - * Configuration of the spec. - */ - configuration: Record; -}; diff --git a/packages/ingestion/model/sourceGA4BigQueryExport.ts b/packages/ingestion/model/sourceGA4BigQueryExport.ts deleted file mode 100644 index e83979476..000000000 --- a/packages/ingestion/model/sourceGA4BigQueryExport.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Specific configuration attributes of a `ga4BigqueryExport` source. - */ -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 deleted file mode 100644 index cc0d67293..000000000 --- a/packages/ingestion/model/sourceInput.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { SourceAlgoliaIndex } from './sourceAlgoliaIndex'; -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 - | SourceAlgoliaIndex; diff --git a/packages/ingestion/model/sourceJSON.ts b/packages/ingestion/model/sourceJSON.ts deleted file mode 100644 index 929b31625..000000000 --- a/packages/ingestion/model/sourceJSON.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by OpenAPI Generator (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'; - -/** - * Specific configuration attributes of a `json` source. - */ -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 | undefined; - - method?: MethodType | undefined; -}; diff --git a/packages/ingestion/model/sourceSearch.ts b/packages/ingestion/model/sourceSearch.ts deleted file mode 100644 index 4a57588a8..000000000 --- a/packages/ingestion/model/sourceSearch.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index e355e5069..000000000 --- a/packages/ingestion/model/sourceShopify.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index e2f776541..000000000 --- a/packages/ingestion/model/sourceShopifyBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 19ebbe59f..000000000 --- a/packages/ingestion/model/sourceSortKeys.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 9e545797e..000000000 --- a/packages/ingestion/model/sourceType.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 = - | 'algoliaIndex' - | 'bigcommerce' - | 'bigquery' - | 'commercetools' - | 'csv' - | 'docker' - | 'ga4BigqueryExport' - | 'json' - | 'shopify' - | 'push'; diff --git a/packages/ingestion/model/sourceUpdate.ts b/packages/ingestion/model/sourceUpdate.ts deleted file mode 100644 index 4ad961fe9..000000000 --- a/packages/ingestion/model/sourceUpdate.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - input?: SourceUpdateInput | undefined; - - /** - * Universally unique identifier (UUID) of an authentication resource. - */ - authenticationID?: string | undefined; -}; diff --git a/packages/ingestion/model/sourceUpdateAlgoliaIndex.ts b/packages/ingestion/model/sourceUpdateAlgoliaIndex.ts deleted file mode 100644 index 0b4477bf4..000000000 --- a/packages/ingestion/model/sourceUpdateAlgoliaIndex.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Specific configuration attributes of an `algoliaIndex` source. - */ -export type SourceUpdateAlgoliaIndex = { - /** - * Name of the Algolia index to read records from. - */ - indexName?: string | undefined; - - /** - * SQL-like filter expression applied while browsing the source index. See [filters](https://www.algolia.com/doc/api-reference/api-parameters/filters/). - */ - filters?: string | undefined; -}; diff --git a/packages/ingestion/model/sourceUpdateCommercetools.ts b/packages/ingestion/model/sourceUpdateCommercetools.ts deleted file mode 100644 index a528deb1a..000000000 --- a/packages/ingestion/model/sourceUpdateCommercetools.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Code generated by OpenAPI Generator (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'; - -/** - * Specific configuration attributes of a `commercetools` source. - */ -export type SourceUpdateCommercetools = { - storeKeys?: Array | undefined; - - /** - * Locales for your commercetools stores. - */ - locales?: Array | undefined; - - url?: string | undefined; - - /** - * Whether a fallback value is stored in the Algolia record if there\'s no inventory information about the product. - */ - fallbackIsInStockValue?: boolean | undefined; - - /** - * Predicate to filter out specific products when indexing. For more information, see [Query Predicate](https://docs.commercetools.com/api/predicates/query). - */ - productQueryPredicate?: string | undefined; - - /** - * When set to true, the connector indexes objects with all images attributes instead of only the URLs. - */ - useImagesObjects?: boolean | undefined; - - customFields?: CommercetoolsCustomFields | undefined; -}; diff --git a/packages/ingestion/model/sourceUpdateDocker.ts b/packages/ingestion/model/sourceUpdateDocker.ts deleted file mode 100644 index 500568182..000000000 --- a/packages/ingestion/model/sourceUpdateDocker.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Specific configuration attributes of a `docker` source. - */ -export type SourceUpdateDocker = { - /** - * Configuration of the spec. - */ - configuration: Record; -}; diff --git a/packages/ingestion/model/sourceUpdateInput.ts b/packages/ingestion/model/sourceUpdateInput.ts deleted file mode 100644 index 867c720cd..000000000 --- a/packages/ingestion/model/sourceUpdateInput.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by OpenAPI Generator (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 { SourceUpdateAlgoliaIndex } from './sourceUpdateAlgoliaIndex'; -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 - | SourceUpdateAlgoliaIndex; diff --git a/packages/ingestion/model/sourceUpdateResponse.ts b/packages/ingestion/model/sourceUpdateResponse.ts deleted file mode 100644 index 5795e6d61..000000000 --- a/packages/ingestion/model/sourceUpdateResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 and time when the resource was last updated, in RFC 3339 format. - */ - updatedAt: string; -}; diff --git a/packages/ingestion/model/sourceUpdateShopify.ts b/packages/ingestion/model/sourceUpdateShopify.ts deleted file mode 100644 index dfb59eb38..000000000 --- a/packages/ingestion/model/sourceUpdateShopify.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Specific configuration attributes of a `shopify` source. - */ -export type SourceUpdateShopify = { - /** - * Feature flags for the Shopify source. - */ - featureFlags?: { [key: string]: any } | undefined; -}; diff --git a/packages/ingestion/model/streamingInput.ts b/packages/ingestion/model/streamingInput.ts deleted file mode 100644 index ecd003dc5..000000000 --- a/packages/ingestion/model/streamingInput.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index df5fee4ff..000000000 --- a/packages/ingestion/model/streamingTrigger.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 218b70a24..000000000 --- a/packages/ingestion/model/streamingTriggerType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index a579c42c8..000000000 --- a/packages/ingestion/model/subscriptionTrigger.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 99d7fb416..000000000 --- a/packages/ingestion/model/subscriptionTriggerType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index ec15e0015..000000000 --- a/packages/ingestion/model/task.ts +++ /dev/null @@ -1,78 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * The last time the scheduled task ran in RFC 3339 format. - */ - lastRun?: string | undefined; - - /** - * The next scheduled run of the task in RFC 3339 format. - */ - nextRun?: string | undefined; - - /** - * Owner of the resource. - */ - owner?: string | null | undefined; - - input?: TaskInput | undefined; - - /** - * Whether the task is enabled. - */ - enabled: boolean; - - /** - * Maximum accepted percentage of failures for a task run to finish successfully. - */ - failureThreshold?: number | undefined; - - action?: ActionType | undefined; - - subscriptionAction?: ActionType | undefined; - - /** - * Date and time when the last cursor was created, in RFC 3339 format. - */ - cursor?: string | undefined; - - notifications?: Notifications | undefined; - - policies?: Policies | undefined; - - /** - * Date and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; - - /** - * Date and time when the resource was last updated, in RFC 3339 format. - */ - updatedAt: string; -}; diff --git a/packages/ingestion/model/taskCreate.ts b/packages/ingestion/model/taskCreate.ts deleted file mode 100644 index a94f3a224..000000000 --- a/packages/ingestion/model/taskCreate.ts +++ /dev/null @@ -1,51 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Cron expression for the task\'s schedule. - */ - cron?: string | undefined; - - /** - * Whether the task is enabled. - */ - enabled?: boolean | undefined; - - /** - * Maximum accepted percentage of failures for a task run to finish successfully. - */ - failureThreshold?: number | undefined; - - input?: TaskInput | undefined; - - /** - * Date and time when the last cursor was created, in RFC 3339 format. - */ - cursor?: string | undefined; - - notifications?: Notifications | undefined; - - policies?: Policies | undefined; -}; diff --git a/packages/ingestion/model/taskCreateResponse.ts b/packages/ingestion/model/taskCreateResponse.ts deleted file mode 100644 index 95155963c..000000000 --- a/packages/ingestion/model/taskCreateResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; -}; diff --git a/packages/ingestion/model/taskCreateTrigger.ts b/packages/ingestion/model/taskCreateTrigger.ts deleted file mode 100644 index 7708cc8bf..000000000 --- a/packages/ingestion/model/taskCreateTrigger.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index b40960df6..000000000 --- a/packages/ingestion/model/taskCreateV1.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Code generated by OpenAPI Generator (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. 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 | undefined; - - /** - * Maximum accepted percentage of failures for a task run to finish successfully. - */ - failureThreshold?: number | undefined; - - input?: TaskInput | undefined; - - /** - * Date and time when the last cursor was created, in RFC 3339 format. - */ - cursor?: string | undefined; -}; diff --git a/packages/ingestion/model/taskInput.ts b/packages/ingestion/model/taskInput.ts deleted file mode 100644 index ac8a8f23b..000000000 --- a/packages/ingestion/model/taskInput.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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/taskReplace.ts b/packages/ingestion/model/taskReplace.ts deleted file mode 100644 index 3c30f80f5..000000000 --- a/packages/ingestion/model/taskReplace.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Code generated by OpenAPI Generator (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 TaskReplace = { - /** - * Universally unique identifier (UUID) of a destination resource. - */ - destinationID: string; - - action: ActionType; - - subscriptionAction?: ActionType | undefined; - - /** - * Cron expression for the task\'s schedule. - */ - cron?: string | undefined; - - /** - * Whether the task is enabled. - */ - enabled?: boolean | undefined; - - /** - * Maximum accepted percentage of failures for a task run to finish successfully. - */ - failureThreshold?: number | undefined; - - input?: TaskInput | undefined; - - /** - * Date and time when the last cursor was created, in RFC 3339 format. - */ - cursor?: string | undefined; - - notifications?: Notifications | undefined; - - policies?: Policies | undefined; -}; diff --git a/packages/ingestion/model/taskSearch.ts b/packages/ingestion/model/taskSearch.ts deleted file mode 100644 index 8ec874919..000000000 --- a/packages/ingestion/model/taskSearch.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 457d011cc..000000000 --- a/packages/ingestion/model/taskSortKeys.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 10056963e..000000000 --- a/packages/ingestion/model/taskUpdate.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Code generated by OpenAPI Generator (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 partially updating a task. - */ -export type TaskUpdate = { - /** - * Universally unique identifier (UUID) of a destination resource. - */ - destinationID?: string | undefined; - - /** - * Cron expression for the task\'s schedule. - */ - cron?: string | undefined; - - input?: TaskInput | undefined; - - /** - * Whether the task is enabled. - */ - enabled?: boolean | undefined; - - subscriptionAction?: ActionType | undefined; - - /** - * Maximum accepted percentage of failures for a task run to finish successfully. - */ - failureThreshold?: number | undefined; - - notifications?: Notifications | undefined; - - policies?: Policies | undefined; -}; diff --git a/packages/ingestion/model/taskUpdateResponse.ts b/packages/ingestion/model/taskUpdateResponse.ts deleted file mode 100644 index 9489023ac..000000000 --- a/packages/ingestion/model/taskUpdateResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 and time when the resource was last updated, in RFC 3339 format. - */ - updatedAt: string; -}; diff --git a/packages/ingestion/model/taskUpdateV1.ts b/packages/ingestion/model/taskUpdateV1.ts deleted file mode 100644 index d80b4cf9f..000000000 --- a/packages/ingestion/model/taskUpdateV1.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by OpenAPI Generator (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. Use methods and types that don\'t contain the V1 suffix. - */ -export type TaskUpdateV1 = { - /** - * Universally unique identifier (UUID) of a destination resource. - */ - destinationID?: string | undefined; - - trigger?: TriggerUpdateInput | undefined; - - input?: TaskInput | undefined; - - /** - * Whether the task is enabled. - */ - enabled?: boolean | undefined; - - /** - * Maximum accepted percentage of failures for a task run to finish successfully. - */ - failureThreshold?: number | undefined; -}; diff --git a/packages/ingestion/model/taskV1.ts b/packages/ingestion/model/taskV1.ts deleted file mode 100644 index ff0c24764..000000000 --- a/packages/ingestion/model/taskV1.ts +++ /dev/null @@ -1,62 +0,0 @@ -// Code generated by OpenAPI Generator (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. 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 | undefined; - - /** - * Whether the task is enabled. - */ - enabled: boolean; - - /** - * Maximum accepted percentage of failures for a task run to finish successfully. - */ - failureThreshold?: number | undefined; - - action?: ActionType | undefined; - - /** - * Date and time when the last cursor was created, in RFC 3339 format. - */ - cursor?: string | undefined; - - notifications?: Notifications | undefined; - - policies?: Policies | undefined; - - /** - * Date and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; - - /** - * Date and time when the resource was last updated, in RFC 3339 format. - */ - updatedAt: string; -}; diff --git a/packages/ingestion/model/transformation.ts b/packages/ingestion/model/transformation.ts deleted file mode 100644 index 63b3b19e8..000000000 --- a/packages/ingestion/model/transformation.ts +++ /dev/null @@ -1,50 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { TransformationInput } from './transformationInput'; -import type { TransformationType } from './transformationType'; - -export type Transformation = { - /** - * Universally unique identifier (UUID) of a transformation. - */ - transformationID: string; - - /** - * The authentications associated with the current transformation. - */ - authenticationIDs?: Array | undefined; - - /** - * It is deprecated. Use the `input` field with proper `type` instead to specify the transformation code. - */ - code: string; - - type?: TransformationType | undefined; - - input?: TransformationInput | undefined; - - /** - * The uniquely identified name of your transformation. - */ - name: string; - - /** - * A descriptive name for your transformation of what it does. - */ - description?: string | undefined; - - /** - * Owner of the resource. - */ - owner?: string | null | undefined; - - /** - * Date and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; - - /** - * Date and time when the resource was last updated, in RFC 3339 format. - */ - updatedAt: string; -}; diff --git a/packages/ingestion/model/transformationCode.ts b/packages/ingestion/model/transformationCode.ts deleted file mode 100644 index 0d49398cb..000000000 --- a/packages/ingestion/model/transformationCode.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Input for a transformation that contains the source code of the transformation. - */ -export type TransformationCode = { - /** - * The source code of the transformation. - */ - code: string; -}; diff --git a/packages/ingestion/model/transformationCreate.ts b/packages/ingestion/model/transformationCreate.ts deleted file mode 100644 index 922db4c05..000000000 --- a/packages/ingestion/model/transformationCreate.ts +++ /dev/null @@ -1,33 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { TransformationInput } from './transformationInput'; -import type { TransformationType } from './transformationType'; - -/** - * API request body for creating a transformation. - */ -export type TransformationCreate = { - /** - * It is deprecated. Use the `input` field with proper `type` instead to specify the transformation code. - */ - code?: string | undefined; - - /** - * The uniquely identified name of your transformation. - */ - name: string; - - type?: TransformationType | undefined; - - input?: TransformationInput | undefined; - - /** - * A descriptive name for your transformation of what it does. - */ - description?: string | undefined; - - /** - * The authentications associated with the current transformation. - */ - authenticationIDs?: Array | undefined; -}; diff --git a/packages/ingestion/model/transformationCreateResponse.ts b/packages/ingestion/model/transformationCreateResponse.ts deleted file mode 100644 index a884540a9..000000000 --- a/packages/ingestion/model/transformationCreateResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 and time when the resource was created, in RFC 3339 format. - */ - createdAt: string; -}; diff --git a/packages/ingestion/model/transformationError.ts b/packages/ingestion/model/transformationError.ts deleted file mode 100644 index e0b4d1330..000000000 --- a/packages/ingestion/model/transformationError.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * A descriptive message explaining the failure. - */ - message?: string | undefined; -}; diff --git a/packages/ingestion/model/transformationInput.ts b/packages/ingestion/model/transformationInput.ts deleted file mode 100644 index 17238b7e1..000000000 --- a/packages/ingestion/model/transformationInput.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { TransformationCode } from './transformationCode'; -import type { TransformationNoCode } from './transformationNoCode'; - -/** - * The input for the transformation, which can be either code or a no-code configuration. - */ -export type TransformationInput = TransformationCode | TransformationNoCode; diff --git a/packages/ingestion/model/transformationNoCode.ts b/packages/ingestion/model/transformationNoCode.ts deleted file mode 100644 index 7696fca94..000000000 --- a/packages/ingestion/model/transformationNoCode.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -/** - * Input for a no-code transformation that contains a series of steps. - */ -export type TransformationNoCode = { - steps: Array>; -}; diff --git a/packages/ingestion/model/transformationSearch.ts b/packages/ingestion/model/transformationSearch.ts deleted file mode 100644 index e57e44e0e..000000000 --- a/packages/ingestion/model/transformationSearch.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index b0c4cbb47..000000000 --- a/packages/ingestion/model/transformationSortKeys.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index ff5cc2ad6..000000000 --- a/packages/ingestion/model/transformationTry.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by OpenAPI Generator (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'; -import type { TransformationInput } from './transformationInput'; -import type { TransformationType } from './transformationType'; - -export type TransformationTry = { - /** - * It is deprecated. Use the `input` field with proper `type` instead to specify the transformation code. - */ - code?: string | undefined; - - type?: TransformationType | undefined; - - input?: TransformationInput | undefined; - - /** - * The record to apply the given code to. - */ - sampleRecord: Record; - - authentications?: Array | undefined; -}; diff --git a/packages/ingestion/model/transformationTryResponse.ts b/packages/ingestion/model/transformationTryResponse.ts deleted file mode 100644 index b5ecbf93a..000000000 --- a/packages/ingestion/model/transformationTryResponse.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/ingestion/model/transformationType.ts b/packages/ingestion/model/transformationType.ts deleted file mode 100644 index f934559a4..000000000 --- a/packages/ingestion/model/transformationType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 type of transformation, which can be either \'code\' or \'noCode\'. - */ -export type TransformationType = 'code' | 'noCode'; diff --git a/packages/ingestion/model/transformationUpdateResponse.ts b/packages/ingestion/model/transformationUpdateResponse.ts deleted file mode 100644 index 1a61d012b..000000000 --- a/packages/ingestion/model/transformationUpdateResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 and time when the resource was last updated, in RFC 3339 format. - */ - updatedAt: string; -}; diff --git a/packages/ingestion/model/trigger.ts b/packages/ingestion/model/trigger.ts deleted file mode 100644 index 48a3757b7..000000000 --- a/packages/ingestion/model/trigger.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 5c9a3b782..000000000 --- a/packages/ingestion/model/triggerType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 9179499b0..000000000 --- a/packages/ingestion/model/triggerUpdateInput.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 6ed206a01..000000000 --- a/packages/ingestion/model/watchResponse.ts +++ /dev/null @@ -1,35 +0,0 @@ -// Code generated by OpenAPI Generator (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; - - /** - * Universally unique identifier (UUID) of an event. - */ - eventID?: string | undefined; - - /** - * This field is always null when used with the Push endpoint. When used for a source discover or source validate run, it will include the sampled data of the source. - */ - data?: Array> | undefined; - - /** - * in case of error, observability events will be added to the response. - */ - events?: Array | undefined; - - /** - * a message describing the outcome of the operation that has been ran (push, discover or validate) run. - */ - message?: string | undefined; - - /** - * Date and time when the resource was created, in RFC 3339 format. - */ - createdAt?: string | undefined; -}; diff --git a/packages/ingestion/model/window.ts b/packages/ingestion/model/window.ts deleted file mode 100644 index 408751993..000000000 --- a/packages/ingestion/model/window.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 and time representing the oldest data in the time window, in RFC 3339 format. - */ - startDate: string; - - /** - * Date and time representing the newest data in the time window, in RFC 3339 format. - */ - endDate: string; -}; diff --git a/packages/ingestion/package.json b/packages/ingestion/package.json deleted file mode 100644 index f1abdfe07..000000000 --- a/packages/ingestion/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "version": "1.56.0", - "repository": { - "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" - }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/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": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/builds/browser.js" - }, - "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", - "./dist/builds/*.js": "./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.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "26.1.2", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" - } -} diff --git a/packages/ingestion/rollup.config.js b/packages/ingestion/rollup.config.js deleted file mode 100644 index a464798e4..000000000 --- a/packages/ingestion/rollup.config.js +++ /dev/null @@ -1,17 +0,0 @@ -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 deleted file mode 100644 index ae4b1be39..000000000 --- a/packages/ingestion/src/ingestionClient.ts +++ /dev/null @@ -1,5068 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - ApiError, - CreateClientOptions, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, -} from '@algolia/client-common'; -import { - createAuth, - createIterablePromise, - createTransporter, - getAlgoliaAgent, - validateRequired, -} 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 { - ChunkedPushOptions, - 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, - PushProps, - PushTaskProps, - ReplaceTaskProps, - RunSourceProps, - RunTaskProps, - RunTaskV1Props, - TriggerDockerSourceDiscoverProps, - TryTransformationBeforeUpdateProps, - UpdateAuthenticationProps, - UpdateDestinationProps, - UpdateSourceProps, - UpdateTaskProps, - UpdateTaskV1Props, - UpdateTransformationProps, - ValidateSourceBeforeUpdateProps, -} from '../model/clientMethodProps'; - -import type { OnDemandTrigger } from '../model/onDemandTrigger'; -import type { PushTaskRecords } from '../model/pushTaskRecords'; -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.56.0'; - -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 | undefined): 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: Chunks the given `objects` list in subset of 1000 elements max in order to make it fit in `push` requests by leveraging the Transformation pipeline setup in the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/connectors/push/). - * - * @summary Helper: Chunks the given `objects` list in subset of 1000 elements max in order to make it fit in `batch` requests. - * @param chunkedPush - The `chunkedPush` object. - * @param chunkedPush.indexName - The `indexName` to replace `objects` in. - * @param chunkedPush.objects - The array of `objects` to store in the given Algolia `indexName`. - * @param chunkedPush.action - The `batch` `action` to perform on the given array of `objects`, defaults to `addObject`. - * @param chunkedPush.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 chunkedPush.batchSize - The size of the chunk of `objects`. The number of `batch` calls will be equal to `length(objects) / batchSize`. Defaults to 1000. - * @param chunkedPush.referenceIndexName - This is required when targeting an index that does not have a push connector setup (e.g. a tmp index), but you wish to attach another index's transformation to it (e.g. the source index name). - * @param chunkedPush.maxRetries - The maximum number of retries when polling for task completion. 100 by default. - * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `getEvent` method and merged with the transporter requestOptions. - */ - async chunkedPush( - { - indexName, - objects, - action = 'addObject', - waitForTasks, - batchSize = 1000, - referenceIndexName, - maxRetries = 100, - }: ChunkedPushOptions, - requestOptions?: RequestOptions, - ): Promise> { - if (batchSize < 1) { - throw new Error('`batchSize` must be at least 1.'); - } - - let records: Array = []; - let offset = 0; - const responses: Array = []; - const waitBatchSize = Math.floor(batchSize / 10) || batchSize; - - // Polls every task in the `[start, end)` window of `responses` until it completes. - const waitForBatch = async (start: number, end: number): Promise => { - for (const resp of responses.slice(start, end)) { - if (!resp.eventID) { - throw new Error('received unexpected response from the push endpoint, eventID must not be undefined'); - } - - let retryCount = 0; - - await createIterablePromise({ - func: async () => { - if (resp.eventID === undefined || !resp.eventID) { - throw new Error('received unexpected response from the push endpoint, eventID must not be undefined'); - } - - return this.getEvent({ runID: resp.runID, eventID: resp.eventID }).catch((error: ApiError) => { - if (error.status === 404) { - return undefined; - } - - throw error; - }); - }, - validate: (response) => response !== undefined, - aggregator: () => (retryCount += 1), - error: { - validate: () => retryCount >= maxRetries, - message: () => - `Stopped waiting for the task after ${maxRetries} retries. This does not mean the operation failed; it may still complete. If you need to keep polling, retry with a higher maxRetries.`, - }, - timeout: (): number => Math.min(retryCount * 1500, 5000), - }); - } - }; - - const objectEntries = objects.entries(); - for (const [i, obj] of objectEntries) { - records.push(obj as PushTaskRecords); - if (records.length === batchSize || i === objects.length - 1) { - responses.push( - await this.push({ indexName, pushTaskPayload: { action, records }, referenceIndexName }, requestOptions), - ); - records = []; - } - - // Only wait once at least `waitBatchSize` un-polled responses have accumulated, and advance the - // cursor by exactly that many, so every pushed task is polled once and only once. - if (waitForTasks && responses.length - offset >= waitBatchSize) { - await waitForBatch(offset, offset + waitBatchSize); - offset += waitBatchSize; - } - } - - // Drain the remaining responses that didn't fill a complete `waitBatchSize` window. - if (waitForTasks) { - await waitForBatch(offset, responses.length); - } - - return responses; - }, - /** - * 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 { - validateRequired('authenticationCreate', 'createAuthentication', authenticationCreate); - - validateRequired('authenticationCreate.type', 'createAuthentication', authenticationCreate.type); - validateRequired('authenticationCreate.name', 'createAuthentication', authenticationCreate.name); - validateRequired('authenticationCreate.input', 'createAuthentication', authenticationCreate.input); - - 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 authentication resource. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see createAuthentication for the plain version. - */ - createAuthenticationWithHTTPInfo( - authenticationCreate: AuthenticationCreate, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('authenticationCreate', 'createAuthenticationWithHTTPInfo', authenticationCreate); - - validateRequired('authenticationCreate.type', 'createAuthenticationWithHTTPInfo', authenticationCreate.type); - validateRequired('authenticationCreate.name', 'createAuthenticationWithHTTPInfo', authenticationCreate.name); - validateRequired('authenticationCreate.input', 'createAuthenticationWithHTTPInfo', authenticationCreate.input); - - const requestPath = '/1/authentications'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: authenticationCreate, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('destinationCreate', 'createDestination', destinationCreate); - - validateRequired('destinationCreate.type', 'createDestination', destinationCreate.type); - validateRequired('destinationCreate.name', 'createDestination', destinationCreate.name); - validateRequired('destinationCreate.input', 'createDestination', destinationCreate.input); - - 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 destination. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see createDestination for the plain version. - */ - createDestinationWithHTTPInfo( - destinationCreate: DestinationCreate, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('destinationCreate', 'createDestinationWithHTTPInfo', destinationCreate); - - validateRequired('destinationCreate.type', 'createDestinationWithHTTPInfo', destinationCreate.type); - validateRequired('destinationCreate.name', 'createDestinationWithHTTPInfo', destinationCreate.name); - validateRequired('destinationCreate.input', 'createDestinationWithHTTPInfo', destinationCreate.input); - - const requestPath = '/1/destinations'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: destinationCreate, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('sourceCreate', 'createSource', sourceCreate); - - validateRequired('sourceCreate.type', 'createSource', sourceCreate.type); - validateRequired('sourceCreate.name', 'createSource', sourceCreate.name); - - 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 source. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see createSource for the plain version. - */ - createSourceWithHTTPInfo( - sourceCreate: SourceCreate, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('sourceCreate', 'createSourceWithHTTPInfo', sourceCreate); - - validateRequired('sourceCreate.type', 'createSourceWithHTTPInfo', sourceCreate.type); - validateRequired('sourceCreate.name', 'createSourceWithHTTPInfo', sourceCreate.name); - - const requestPath = '/1/sources'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: sourceCreate, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Creates a new task. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @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 { - validateRequired('taskCreate', 'createTask', taskCreate); - - validateRequired('taskCreate.sourceID', 'createTask', taskCreate.sourceID); - validateRequired('taskCreate.destinationID', 'createTask', taskCreate.destinationID); - validateRequired('taskCreate.action', 'createTask', taskCreate.action); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @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. - * @see createTask for the plain version. - */ - createTaskWithHTTPInfo( - taskCreate: TaskCreate, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskCreate', 'createTaskWithHTTPInfo', taskCreate); - - validateRequired('taskCreate.sourceID', 'createTaskWithHTTPInfo', taskCreate.sourceID); - validateRequired('taskCreate.destinationID', 'createTaskWithHTTPInfo', taskCreate.destinationID); - validateRequired('taskCreate.action', 'createTaskWithHTTPInfo', taskCreate.action); - - const requestPath = '/2/tasks'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: taskCreate, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Creates a new task using the v1 endpoint. Use `createTask` instead. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * - * @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 { - validateRequired('taskCreate', 'createTaskV1', taskCreate); - - validateRequired('taskCreate.sourceID', 'createTaskV1', taskCreate.sourceID); - validateRequired('taskCreate.destinationID', 'createTaskV1', taskCreate.destinationID); - validateRequired('taskCreate.trigger', 'createTaskV1', taskCreate.trigger); - validateRequired('taskCreate.action', 'createTaskV1', taskCreate.action); - - 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 task using the v1 endpoint. Use `createTask` instead. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * - * @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. - * @see createTaskV1 for the plain version. - */ - createTaskV1WithHTTPInfo( - taskCreate: TaskCreateV1, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskCreate', 'createTaskV1WithHTTPInfo', taskCreate); - - validateRequired('taskCreate.sourceID', 'createTaskV1WithHTTPInfo', taskCreate.sourceID); - validateRequired('taskCreate.destinationID', 'createTaskV1WithHTTPInfo', taskCreate.destinationID); - validateRequired('taskCreate.trigger', 'createTaskV1WithHTTPInfo', taskCreate.trigger); - validateRequired('taskCreate.action', 'createTaskV1WithHTTPInfo', taskCreate.action); - - const requestPath = '/1/tasks'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: taskCreate, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Creates a new transformation. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @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 { - validateRequired('transformationCreate', 'createTransformation', transformationCreate); - - validateRequired('transformationCreate.name', 'createTransformation', transformationCreate.name); - - 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); - }, - /** - * Creates a new transformation. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @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. - * @see createTransformation for the plain version. - */ - createTransformationWithHTTPInfo( - transformationCreate: TransformationCreate, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('transformationCreate', 'createTransformationWithHTTPInfo', transformationCreate); - - validateRequired('transformationCreate.name', 'createTransformationWithHTTPInfo', transformationCreate.name); - - const requestPath = '/1/transformations'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: transformationCreate, - }; - - return transporter.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customDelete', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customDelete - The customDelete object. - * @param customDelete.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customDelete for the plain version. - */ - customDeleteWithHTTPInfo( - { path, parameters }: CustomDeleteProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customDeleteWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customGet', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customGet - The customGet object. - * @param customGet.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customGet for the plain version. - */ - customGetWithHTTPInfo( - { path, parameters }: CustomGetProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customGetWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPut', path); - - 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); - }, - /** - * This method lets you send requests to the Algolia REST API. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPut - The customPut object. - * @param customPut.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPut for the plain version. - */ - customPutWithHTTPInfo( - { path, parameters, body }: CustomPutProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPutWithHTTPInfo', path); - - 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.requestWithHttpInfo(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 { - validateRequired('authenticationID', 'deleteAuthentication', authenticationID); - - 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 an authentication resource. You can\'t delete authentication resources that are used by a source or a destination. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteAuthentication for the plain version. - */ - deleteAuthenticationWithHTTPInfo( - { authenticationID }: DeleteAuthenticationProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('authenticationID', 'deleteAuthenticationWithHTTPInfo', authenticationID); - - 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.requestWithHttpInfo(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 { - validateRequired('destinationID', 'deleteDestination', destinationID); - - 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 destination by its ID. You can\'t delete destinations that are referenced in tasks. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteDestination for the plain version. - */ - deleteDestinationWithHTTPInfo( - { destinationID }: DeleteDestinationProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('destinationID', 'deleteDestinationWithHTTPInfo', destinationID); - - 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.requestWithHttpInfo(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 { - validateRequired('sourceID', 'deleteSource', sourceID); - - 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 source by its ID. You can\'t delete sources that are referenced in tasks. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteSource for the plain version. - */ - deleteSourceWithHTTPInfo( - { sourceID }: DeleteSourceProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('sourceID', 'deleteSourceWithHTTPInfo', sourceID); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Deletes a task by its ID. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @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 { - validateRequired('taskID', 'deleteTask', taskID); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @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. - * @see deleteTask for the plain version. - */ - deleteTaskWithHTTPInfo( - { taskID }: DeleteTaskProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'deleteTaskWithHTTPInfo', taskID); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Deletes a task by its ID using the v1 endpoint. Use `deleteTask` instead. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * - * @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 { - validateRequired('taskID', 'deleteTaskV1', taskID); - - 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 task by its ID using the v1 endpoint. Use `deleteTask` instead. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * - * @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. - * @see deleteTaskV1 for the plain version. - */ - deleteTaskV1WithHTTPInfo( - { taskID }: DeleteTaskV1Props, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'deleteTaskV1WithHTTPInfo', taskID); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Deletes a transformation by its ID. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @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 { - validateRequired('transformationID', 'deleteTransformation', transformationID); - - 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); - }, - /** - * Deletes a transformation by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @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. - * @see deleteTransformation for the plain version. - */ - deleteTransformationWithHTTPInfo( - { transformationID }: DeleteTransformationProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('transformationID', 'deleteTransformationWithHTTPInfo', transformationID); - - 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.requestWithHttpInfo(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 { - validateRequired('taskID', 'disableTask', taskID); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see disableTask for the plain version. - */ - disableTaskWithHTTPInfo( - { taskID }: DisableTaskProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'disableTaskWithHTTPInfo', taskID); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Disables a task using the v1 endpoint. 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 { - validateRequired('taskID', 'disableTaskV1', taskID); - - 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); - }, - /** - * Disables a task using the v1 endpoint. Use `disableTask` instead. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see disableTaskV1 for the plain version. - */ - disableTaskV1WithHTTPInfo( - { taskID }: DisableTaskV1Props, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'disableTaskV1WithHTTPInfo', taskID); - - 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.requestWithHttpInfo(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 { - validateRequired('taskID', 'enableTask', taskID); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see enableTask for the plain version. - */ - enableTaskWithHTTPInfo( - { taskID }: EnableTaskProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'enableTaskWithHTTPInfo', taskID); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Enables a task using the v1 endpoint. 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 { - validateRequired('taskID', 'enableTaskV1', taskID); - - 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); - }, - /** - * Enables a task using the v1 endpoint. Use `enableTask` instead. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see enableTaskV1 for the plain version. - */ - enableTaskV1WithHTTPInfo( - { taskID }: EnableTaskV1Props, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'enableTaskV1WithHTTPInfo', taskID); - - 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.requestWithHttpInfo(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 { - validateRequired('authenticationID', 'getAuthentication', authenticationID); - - 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 an authentication resource by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getAuthentication for the plain version. - */ - getAuthenticationWithHTTPInfo( - { authenticationID }: GetAuthenticationProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('authenticationID', 'getAuthenticationWithHTTPInfo', authenticationID); - - 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.requestWithHttpInfo(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 { - validateRequired('destinationID', 'getDestination', destinationID); - - 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 destination by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getDestination for the plain version. - */ - getDestinationWithHTTPInfo( - { destinationID }: GetDestinationProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('destinationID', 'getDestinationWithHTTPInfo', destinationID); - - 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.requestWithHttpInfo(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 { - validateRequired('runID', 'getEvent', runID); - - validateRequired('eventID', 'getEvent', eventID); - - 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); - }, - /** - * Retrieves a single task run event by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getEvent for the plain version. - */ - getEventWithHTTPInfo( - { runID, eventID }: GetEventProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('runID', 'getEventWithHTTPInfo', runID); - - validateRequired('eventID', 'getEventWithHTTPInfo', eventID); - - 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.requestWithHttpInfo(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 { - validateRequired('runID', 'getRun', runID); - - 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 single task run by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getRun for the plain version. - */ - getRunWithHTTPInfo({ runID }: GetRunProps, requestOptions?: RequestOptions): Promise> { - validateRequired('runID', 'getRunWithHTTPInfo', runID); - - 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.requestWithHttpInfo(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 { - validateRequired('sourceID', 'getSource', sourceID); - - 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); - }, - /** - * Retrieve a source by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getSource for the plain version. - */ - getSourceWithHTTPInfo( - { sourceID }: GetSourceProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('sourceID', 'getSourceWithHTTPInfo', sourceID); - - 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.requestWithHttpInfo(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 { - validateRequired('taskID', 'getTask', taskID); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getTask for the plain version. - */ - getTaskWithHTTPInfo({ taskID }: GetTaskProps, requestOptions?: RequestOptions): Promise> { - validateRequired('taskID', 'getTaskWithHTTPInfo', taskID); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves a task by its ID using the v1 endpoint. 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 { - validateRequired('taskID', 'getTaskV1', taskID); - - 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 task by its ID using the v1 endpoint. Use `getTask` instead. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getTaskV1 for the plain version. - */ - getTaskV1WithHTTPInfo( - { taskID }: GetTaskV1Props, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'getTaskV1WithHTTPInfo', taskID); - - 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.requestWithHttpInfo(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 { - validateRequired('transformationID', 'getTransformation', transformationID); - - 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 transformation by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getTransformation for the plain version. - */ - getTransformationWithHTTPInfo( - { transformationID }: GetTransformationProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('transformationID', 'getTransformationWithHTTPInfo', transformationID); - - 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.requestWithHttpInfo(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 all authentication resources. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see listAuthentications for the plain version. - */ - listAuthenticationsWithHTTPInfo( - { 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.requestWithHttpInfo(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 destinations. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see listDestinations for the plain version. - */ - listDestinationsWithHTTPInfo( - { 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.requestWithHttpInfo(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 { - validateRequired('runID', 'listEvents', runID); - - 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); - }, - /** - * Retrieves a list of events for a task run, identified by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see listEvents for the plain version. - */ - listEventsWithHTTPInfo( - { runID, itemsPerPage, page, status, type, sort, order, startDate, endDate }: ListEventsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('runID', 'listEventsWithHTTPInfo', runID); - - 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.requestWithHttpInfo(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 and time for the earliest run to retrieve, in RFC 3339 format. By default, the current day minus seven days is used. - * @param listRuns.endDate - Date and time for the latest run to retrieve, in RFC 3339 format. 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); - }, - /** - * Retrieve a list of task runs. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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 and time for the earliest run to retrieve, in RFC 3339 format. By default, the current day minus seven days is used. - * @param listRuns.endDate - Date and time for the latest run to retrieve, in RFC 3339 format. 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. - * @see listRuns for the plain version. - */ - listRunsWithHTTPInfo( - { 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.requestWithHttpInfo(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 sources. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see listSources for the plain version. - */ - listSourcesWithHTTPInfo( - { 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.requestWithHttpInfo(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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see listTasks for the plain version. - */ - listTasksWithHTTPInfo( - { - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves a list of tasks using the v1 endpoint. 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 tasks using the v1 endpoint. Use `getTasks` instead. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see listTasksV1 for the plain version. - */ - listTasksV1WithHTTPInfo( - { 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.requestWithHttpInfo(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 listTransformations.type - Whether to filter the list of transformations by the type of transformation. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - listTransformations( - { itemsPerPage, page, sort, order, type }: 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(); - } - - if (type !== undefined) { - queryParameters['type'] = type.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Retrieves a list of transformations. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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 listTransformations.type - Whether to filter the list of transformations by the type of transformation. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see listTransformations for the plain version. - */ - listTransformationsWithHTTPInfo( - { itemsPerPage, page, sort, order, type }: 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(); - } - - if (type !== undefined) { - queryParameters['type'] = type.toString(); - } - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Pushes records through the Pipeline, directly to an index. You can make the call synchronous by providing the `watch` parameter, for asynchronous calls, you can use the observability endpoints and/or debugger dashboard to see the status of your task. If you want to leverage the [pre-indexing data transformation](https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/how-to/transform-your-data), this is the recommended way of ingesting your records. This method is similar to `pushTask`, but requires an `indexName` instead of a `taskID`. If zero or many tasks are found, an error will be returned. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @param push - The push object. - * @param push.indexName - Name of the index on which to perform the operation. - * @param push.pushTaskPayload - The pushTaskPayload object. - * @param push.watch - When provided, the push operation will be synchronous and the API will wait for the ingestion to be finished before responding. - * @param push.referenceIndexName - This is required when targeting an index that does not have a push connector setup (e.g. a tmp index), but you wish to attach another index\'s transformation to it (e.g. the source index name). - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - push( - { indexName, pushTaskPayload, watch, referenceIndexName }: PushProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('indexName', 'push', indexName); - - validateRequired('pushTaskPayload', 'push', pushTaskPayload); - - validateRequired('pushTaskPayload.action', 'push', pushTaskPayload.action); - validateRequired('pushTaskPayload.records', 'push', pushTaskPayload.records); - - const requestPath = '/1/push/{indexName}'.replace('{indexName}', encodeURIComponent(indexName)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (watch !== undefined) { - queryParameters['watch'] = watch.toString(); - } - - if (referenceIndexName !== undefined) { - queryParameters['referenceIndexName'] = referenceIndexName.toString(); - } - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: pushTaskPayload, - }; - - requestOptions = { - ...requestOptions, - timeouts: { - connect: 180000, - read: 180000, - write: 180000, - ...requestOptions?.timeouts, - }, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Pushes records through the Pipeline, directly to an index. You can make the call synchronous by providing the `watch` parameter, for asynchronous calls, you can use the observability endpoints and/or debugger dashboard to see the status of your task. If you want to leverage the [pre-indexing data transformation](https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/how-to/transform-your-data), this is the recommended way of ingesting your records. This method is similar to `pushTask`, but requires an `indexName` instead of a `taskID`. If zero or many tasks are found, an error will be returned. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @param push - The push object. - * @param push.indexName - Name of the index on which to perform the operation. - * @param push.pushTaskPayload - The pushTaskPayload object. - * @param push.watch - When provided, the push operation will be synchronous and the API will wait for the ingestion to be finished before responding. - * @param push.referenceIndexName - This is required when targeting an index that does not have a push connector setup (e.g. a tmp index), but you wish to attach another index\'s transformation to it (e.g. the source index name). - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see push for the plain version. - */ - pushWithHTTPInfo( - { indexName, pushTaskPayload, watch, referenceIndexName }: PushProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'pushWithHTTPInfo', indexName); - - validateRequired('pushTaskPayload', 'pushWithHTTPInfo', pushTaskPayload); - - validateRequired('pushTaskPayload.action', 'pushWithHTTPInfo', pushTaskPayload.action); - validateRequired('pushTaskPayload.records', 'pushWithHTTPInfo', pushTaskPayload.records); - - const requestPath = '/1/push/{indexName}'.replace('{indexName}', encodeURIComponent(indexName)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - if (watch !== undefined) { - queryParameters['watch'] = watch.toString(); - } - - if (referenceIndexName !== undefined) { - queryParameters['referenceIndexName'] = referenceIndexName.toString(); - } - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: pushTaskPayload, - }; - - requestOptions = { - ...requestOptions, - timeouts: { - connect: 180000, - read: 180000, - write: 180000, - ...requestOptions?.timeouts, - }, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Pushes records through the pipeline, directly to an index. You can make the call synchronous by providing the `watch` parameter, for asynchronous calls, you can use the observability endpoints or the debugger dashboard to see the status of your task. If you want to transform your data before indexing, this is the recommended way of ingesting your records. This method is similar to `push`, but requires a `taskID` instead of a `indexName`, which is useful when many `destinations` target the same `indexName`. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @param pushTask - The pushTask object. - * @param pushTask.taskID - Unique identifier of a task. - * @param pushTask.pushTaskPayload - The pushTaskPayload object. - * @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 { - validateRequired('taskID', 'pushTask', taskID); - - validateRequired('pushTaskPayload', 'pushTask', pushTaskPayload); - - validateRequired('pushTaskPayload.action', 'pushTask', pushTaskPayload.action); - validateRequired('pushTaskPayload.records', 'pushTask', pushTaskPayload.records); - - 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 = { - ...requestOptions, - timeouts: { - connect: 180000, - read: 180000, - write: 180000, - ...requestOptions?.timeouts, - }, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Pushes records through the pipeline, directly to an index. You can make the call synchronous by providing the `watch` parameter, for asynchronous calls, you can use the observability endpoints or the debugger dashboard to see the status of your task. If you want to transform your data before indexing, this is the recommended way of ingesting your records. This method is similar to `push`, but requires a `taskID` instead of a `indexName`, which is useful when many `destinations` target the same `indexName`. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @param pushTask - The pushTask object. - * @param pushTask.taskID - Unique identifier of a task. - * @param pushTask.pushTaskPayload - The pushTaskPayload object. - * @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. - * @see pushTask for the plain version. - */ - pushTaskWithHTTPInfo( - { taskID, pushTaskPayload, watch }: PushTaskProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'pushTaskWithHTTPInfo', taskID); - - validateRequired('pushTaskPayload', 'pushTaskWithHTTPInfo', pushTaskPayload); - - validateRequired('pushTaskPayload.action', 'pushTaskWithHTTPInfo', pushTaskPayload.action); - validateRequired('pushTaskPayload.records', 'pushTaskWithHTTPInfo', pushTaskPayload.records); - - 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 = { - ...requestOptions, - timeouts: { - connect: 180000, - read: 180000, - write: 180000, - ...requestOptions?.timeouts, - }, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Fully updates a task by its ID, use partialUpdateTask if you only want to update a subset of fields. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @param replaceTask - The replaceTask object. - * @param replaceTask.taskID - Unique identifier of a task. - * @param replaceTask.taskReplace - The taskReplace object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - replaceTask( - { taskID, taskReplace }: ReplaceTaskProps, - requestOptions?: RequestOptions, - ): Promise { - validateRequired('taskID', 'replaceTask', taskID); - - validateRequired('taskReplace', 'replaceTask', taskReplace); - - validateRequired('taskReplace.destinationID', 'replaceTask', taskReplace.destinationID); - validateRequired('taskReplace.action', 'replaceTask', taskReplace.action); - - const requestPath = '/2/tasks/{taskID}'.replace('{taskID}', encodeURIComponent(taskID)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PUT', - path: requestPath, - queryParameters, - headers, - data: taskReplace, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Fully updates a task by its ID, use partialUpdateTask if you only want to update a subset of fields. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @param replaceTask - The replaceTask object. - * @param replaceTask.taskID - Unique identifier of a task. - * @param replaceTask.taskReplace - The taskReplace object. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see replaceTask for the plain version. - */ - replaceTaskWithHTTPInfo( - { taskID, taskReplace }: ReplaceTaskProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'replaceTaskWithHTTPInfo', taskID); - - validateRequired('taskReplace', 'replaceTaskWithHTTPInfo', taskReplace); - - validateRequired('taskReplace.destinationID', 'replaceTaskWithHTTPInfo', taskReplace.destinationID); - validateRequired('taskReplace.action', 'replaceTaskWithHTTPInfo', taskReplace.action); - - const requestPath = '/2/tasks/{taskID}'.replace('{taskID}', encodeURIComponent(taskID)); - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'PUT', - path: requestPath, - queryParameters, - headers, - data: taskReplace, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Runs all tasks linked to a source, only available for Shopify, BigCommerce and commercetools sources. Creates one 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 { - validateRequired('sourceID', 'runSource', sourceID); - - 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 all tasks linked to a source, only available for Shopify, BigCommerce and commercetools sources. Creates one run per task. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see runSource for the plain version. - */ - runSourceWithHTTPInfo( - { sourceID, runSourcePayload }: RunSourceProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('sourceID', 'runSourceWithHTTPInfo', sourceID); - - 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.requestWithHttpInfo(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 runTask.runTaskPayload - - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - runTask({ taskID, runTaskPayload }: RunTaskProps, requestOptions?: RequestOptions): Promise { - validateRequired('taskID', 'runTask', taskID); - - 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, - data: runTaskPayload ? runTaskPayload : {}, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Runs a task. You can check the status of task runs with the observability endpoints. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @param runTask - The runTask object. - * @param runTask.taskID - Unique identifier of a task. - * @param runTask.runTaskPayload - - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see runTask for the plain version. - */ - runTaskWithHTTPInfo( - { taskID, runTaskPayload }: RunTaskProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'runTaskWithHTTPInfo', taskID); - - 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, - data: runTaskPayload ? runTaskPayload : {}, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Runs a task using the v1 endpoint. 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 runTaskV1.runTaskPayload - - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - */ - runTaskV1({ taskID, runTaskPayload }: RunTaskV1Props, requestOptions?: RequestOptions): Promise { - validateRequired('taskID', 'runTaskV1', taskID); - - 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, - data: runTaskPayload ? runTaskPayload : {}, - }; - - return transporter.request(request, requestOptions); - }, - /** - * Runs a task using the v1 endpoint. Use `runTask` instead. You can check the status of task runs with the observability endpoints. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * - * @deprecated - * @param runTaskV1 - The runTaskV1 object. - * @param runTaskV1.taskID - Unique identifier of a task. - * @param runTaskV1.runTaskPayload - - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see runTaskV1 for the plain version. - */ - runTaskV1WithHTTPInfo( - { taskID, runTaskPayload }: RunTaskV1Props, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'runTaskV1WithHTTPInfo', taskID); - - 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, - data: runTaskPayload ? runTaskPayload : {}, - }; - - return transporter.requestWithHttpInfo(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> { - validateRequired('authenticationSearch', 'searchAuthentications', authenticationSearch); - - validateRequired( - 'authenticationSearch.authenticationIDs', - 'searchAuthentications', - authenticationSearch.authenticationIDs, - ); - - 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 authentication resources. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchAuthentications for the plain version. - */ - searchAuthenticationsWithHTTPInfo( - authenticationSearch: AuthenticationSearch, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('authenticationSearch', 'searchAuthenticationsWithHTTPInfo', authenticationSearch); - - validateRequired( - 'authenticationSearch.authenticationIDs', - 'searchAuthenticationsWithHTTPInfo', - authenticationSearch.authenticationIDs, - ); - - const requestPath = '/1/authentications/search'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: authenticationSearch, - }; - - return transporter.requestWithHttpInfo(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> { - validateRequired('destinationSearch', 'searchDestinations', destinationSearch); - - validateRequired('destinationSearch.destinationIDs', 'searchDestinations', destinationSearch.destinationIDs); - - 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 destinations. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchDestinations for the plain version. - */ - searchDestinationsWithHTTPInfo( - destinationSearch: DestinationSearch, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('destinationSearch', 'searchDestinationsWithHTTPInfo', destinationSearch); - - validateRequired( - 'destinationSearch.destinationIDs', - 'searchDestinationsWithHTTPInfo', - destinationSearch.destinationIDs, - ); - - const requestPath = '/1/destinations/search'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: destinationSearch, - }; - - return transporter.requestWithHttpInfo(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> { - validateRequired('sourceSearch', 'searchSources', sourceSearch); - - validateRequired('sourceSearch.sourceIDs', 'searchSources', sourceSearch.sourceIDs); - - 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 sources. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchSources for the plain version. - */ - searchSourcesWithHTTPInfo( - sourceSearch: SourceSearch, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('sourceSearch', 'searchSourcesWithHTTPInfo', sourceSearch); - - validateRequired('sourceSearch.sourceIDs', 'searchSourcesWithHTTPInfo', sourceSearch.sourceIDs); - - const requestPath = '/1/sources/search'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: sourceSearch, - }; - - return transporter.requestWithHttpInfo(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> { - validateRequired('taskSearch', 'searchTasks', taskSearch); - - validateRequired('taskSearch.taskIDs', 'searchTasks', taskSearch.taskIDs); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchTasks for the plain version. - */ - searchTasksWithHTTPInfo( - taskSearch: TaskSearch, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('taskSearch', 'searchTasksWithHTTPInfo', taskSearch); - - validateRequired('taskSearch.taskIDs', 'searchTasksWithHTTPInfo', taskSearch.taskIDs); - - const requestPath = '/2/tasks/search'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: taskSearch, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Searches for tasks using the v1 endpoint. 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> { - validateRequired('taskSearch', 'searchTasksV1', taskSearch); - - validateRequired('taskSearch.taskIDs', 'searchTasksV1', taskSearch.taskIDs); - - 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 tasks using the v1 endpoint. Use `searchTasks` instead. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchTasksV1 for the plain version. - */ - searchTasksV1WithHTTPInfo( - taskSearch: TaskSearch, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('taskSearch', 'searchTasksV1WithHTTPInfo', taskSearch); - - validateRequired('taskSearch.taskIDs', 'searchTasksV1WithHTTPInfo', taskSearch.taskIDs); - - const requestPath = '/1/tasks/search'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: taskSearch, - }; - - return transporter.requestWithHttpInfo(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> { - validateRequired('transformationSearch', 'searchTransformations', transformationSearch); - - validateRequired( - 'transformationSearch.transformationIDs', - 'searchTransformations', - transformationSearch.transformationIDs, - ); - - 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); - }, - /** - * Searches for transformations. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchTransformations for the plain version. - */ - searchTransformationsWithHTTPInfo( - transformationSearch: TransformationSearch, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('transformationSearch', 'searchTransformationsWithHTTPInfo', transformationSearch); - - validateRequired( - 'transformationSearch.transformationIDs', - 'searchTransformationsWithHTTPInfo', - transformationSearch.transformationIDs, - ); - - const requestPath = '/1/transformations/search'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: transformationSearch, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('sourceID', 'triggerDockerSourceDiscover', sourceID); - - 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 = { - ...requestOptions, - timeouts: { - connect: 180000, - read: 180000, - write: 180000, - ...requestOptions?.timeouts, - }, - }; - - 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`. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see triggerDockerSourceDiscover for the plain version. - */ - triggerDockerSourceDiscoverWithHTTPInfo( - { sourceID }: TriggerDockerSourceDiscoverProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('sourceID', 'triggerDockerSourceDiscoverWithHTTPInfo', sourceID); - - 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 = { - ...requestOptions, - timeouts: { - connect: 180000, - read: 180000, - write: 180000, - ...requestOptions?.timeouts, - }, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('transformationTry', 'tryTransformation', transformationTry); - - validateRequired('transformationTry.sampleRecord', 'tryTransformation', transformationTry.sampleRecord); - - 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 creating it. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see tryTransformation for the plain version. - */ - tryTransformationWithHTTPInfo( - transformationTry: TransformationTry, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('transformationTry', 'tryTransformationWithHTTPInfo', transformationTry); - - validateRequired( - 'transformationTry.sampleRecord', - 'tryTransformationWithHTTPInfo', - transformationTry.sampleRecord, - ); - - const requestPath = '/1/transformations/try'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'POST', - path: requestPath, - queryParameters, - headers, - data: transformationTry, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('transformationID', 'tryTransformationBeforeUpdate', transformationID); - - validateRequired('transformationTry', 'tryTransformationBeforeUpdate', transformationTry); - - validateRequired( - 'transformationTry.sampleRecord', - 'tryTransformationBeforeUpdate', - transformationTry.sampleRecord, - ); - - 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); - }, - /** - * Try a transformation before updating it. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see tryTransformationBeforeUpdate for the plain version. - */ - tryTransformationBeforeUpdateWithHTTPInfo( - { transformationID, transformationTry }: TryTransformationBeforeUpdateProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('transformationID', 'tryTransformationBeforeUpdateWithHTTPInfo', transformationID); - - validateRequired('transformationTry', 'tryTransformationBeforeUpdateWithHTTPInfo', transformationTry); - - validateRequired( - 'transformationTry.sampleRecord', - 'tryTransformationBeforeUpdateWithHTTPInfo', - transformationTry.sampleRecord, - ); - - 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.requestWithHttpInfo(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 { - validateRequired('authenticationID', 'updateAuthentication', authenticationID); - - validateRequired('authenticationUpdate', 'updateAuthentication', authenticationUpdate); - - 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 an authentication resource. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see updateAuthentication for the plain version. - */ - updateAuthenticationWithHTTPInfo( - { authenticationID, authenticationUpdate }: UpdateAuthenticationProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('authenticationID', 'updateAuthenticationWithHTTPInfo', authenticationID); - - validateRequired('authenticationUpdate', 'updateAuthenticationWithHTTPInfo', authenticationUpdate); - - 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.requestWithHttpInfo(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 { - validateRequired('destinationID', 'updateDestination', destinationID); - - validateRequired('destinationUpdate', 'updateDestination', destinationUpdate); - - 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 the destination by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see updateDestination for the plain version. - */ - updateDestinationWithHTTPInfo( - { destinationID, destinationUpdate }: UpdateDestinationProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('destinationID', 'updateDestinationWithHTTPInfo', destinationID); - - validateRequired('destinationUpdate', 'updateDestinationWithHTTPInfo', destinationUpdate); - - 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.requestWithHttpInfo(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 { - validateRequired('sourceID', 'updateSource', sourceID); - - validateRequired('sourceUpdate', 'updateSource', sourceUpdate); - - 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 source by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see updateSource for the plain version. - */ - updateSourceWithHTTPInfo( - { sourceID, sourceUpdate }: UpdateSourceProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('sourceID', 'updateSourceWithHTTPInfo', sourceID); - - validateRequired('sourceUpdate', 'updateSourceWithHTTPInfo', sourceUpdate); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Partially updates a task by its ID. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @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 { - validateRequired('taskID', 'updateTask', taskID); - - validateRequired('taskUpdate', 'updateTask', taskUpdate); - - 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); - }, - /** - * Partially updates a task by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @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. - * @see updateTask for the plain version. - */ - updateTaskWithHTTPInfo( - { taskID, taskUpdate }: UpdateTaskProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'updateTaskWithHTTPInfo', taskID); - - validateRequired('taskUpdate', 'updateTaskWithHTTPInfo', taskUpdate); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Updates a task by its ID using the v1 endpoint. Use `updateTask` instead. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * - * @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 { - validateRequired('taskID', 'updateTaskV1', taskID); - - validateRequired('taskUpdate', 'updateTaskV1', taskUpdate); - - 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 task by its ID using the v1 endpoint. Use `updateTask` instead. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * - * @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. - * @see updateTaskV1 for the plain version. - */ - updateTaskV1WithHTTPInfo( - { taskID, taskUpdate }: UpdateTaskV1Props, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('taskID', 'updateTaskV1WithHTTPInfo', taskID); - - validateRequired('taskUpdate', 'updateTaskV1WithHTTPInfo', taskUpdate); - - 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.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Updates a transformation by its ID. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @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 { - validateRequired('transformationID', 'updateTransformation', transformationID); - - validateRequired('transformationCreate', 'updateTransformation', transformationCreate); - - validateRequired('transformationCreate.name', 'updateTransformation', transformationCreate.name); - - 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); - }, - /** - * Updates a transformation by its ID. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * Required API Key ACLs: - * - addObject - * - deleteIndex - * - editSettings - * @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. - * @see updateTransformation for the plain version. - */ - updateTransformationWithHTTPInfo( - { transformationID, transformationCreate }: UpdateTransformationProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('transformationID', 'updateTransformationWithHTTPInfo', transformationID); - - validateRequired('transformationCreate', 'updateTransformationWithHTTPInfo', transformationCreate); - - validateRequired('transformationCreate.name', 'updateTransformationWithHTTPInfo', transformationCreate.name); - - 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.requestWithHttpInfo(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 = { - ...requestOptions, - timeouts: { - connect: 180000, - read: 180000, - write: 180000, - ...requestOptions?.timeouts, - }, - }; - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see validateSource for the plain version. - */ - validateSourceWithHTTPInfo( - 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 = { - ...requestOptions, - timeouts: { - connect: 180000, - read: 180000, - write: 180000, - ...requestOptions?.timeouts, - }, - }; - - return transporter.requestWithHttpInfo(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 { - validateRequired('sourceID', 'validateSourceBeforeUpdate', sourceID); - - validateRequired('sourceUpdate', 'validateSourceBeforeUpdate', sourceUpdate); - - 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 = { - ...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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see validateSourceBeforeUpdate for the plain version. - */ - validateSourceBeforeUpdateWithHTTPInfo( - { sourceID, sourceUpdate }: ValidateSourceBeforeUpdateProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('sourceID', 'validateSourceBeforeUpdateWithHTTPInfo', sourceID); - - validateRequired('sourceUpdate', 'validateSourceBeforeUpdateWithHTTPInfo', sourceUpdate); - - 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 = { - ...requestOptions, - timeouts: { - connect: 180000, - read: 180000, - write: 180000, - ...requestOptions?.timeouts, - }, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/ingestion/tsconfig.json b/packages/ingestion/tsconfig.json deleted file mode 100644 index 444e8bb64..000000000 --- a/packages/ingestion/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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 deleted file mode 100644 index 16a6426e0..000000000 --- a/packages/ingestion/tsup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -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', - target: 'es2018', - 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 new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/logger-common/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 000000000..56c0010ed --- /dev/null +++ b/packages/logger-common/index.js @@ -0,0 +1,2 @@ +// 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 new file mode 100644 index 000000000..2cfc5cd9d --- /dev/null +++ b/packages/logger-common/package.json @@ -0,0 +1,19 @@ +{ + "name": "@algolia/logger-common", + "version": "4.17.2", + "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 new file mode 100644 index 000000000..e71e0319f --- /dev/null +++ b/packages/logger-common/src/__tests__/null-logger.test.ts @@ -0,0 +1,21 @@ +/* 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 new file mode 100644 index 000000000..c7f4457e2 --- /dev/null +++ b/packages/logger-common/src/createNullLogger.ts @@ -0,0 +1,15 @@ +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 new file mode 100644 index 000000000..e3d87cb22 --- /dev/null +++ b/packages/logger-common/src/index.ts @@ -0,0 +1,6 @@ +/** + * @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 new file mode 100644 index 000000000..b01a947a8 --- /dev/null +++ b/packages/logger-common/src/types/LogLevelType.ts @@ -0,0 +1,7 @@ +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 new file mode 100644 index 000000000..a64becaa6 --- /dev/null +++ b/packages/logger-common/src/types/Logger.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..e6087ced5 --- /dev/null +++ b/packages/logger-common/src/types/index.ts @@ -0,0 +1,6 @@ +/** + * @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 new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/logger-console/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 deleted file mode 100644 index 066d2099a..000000000 --- a/packages/logger-console/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/logger'; diff --git a/packages/logger-console/index.js b/packages/logger-console/index.js index 9b6252a52..1a8f955bd 100644 --- a/packages/logger-console/index.js +++ b/packages/logger-console/index.js @@ -1 +1,2 @@ -module.exports = require('./dist/logger.cjs'); +// eslint-disable-next-line functional/immutable-data, import/no-commonjs +module.exports = require('./dist/logger-console.cjs.js'); diff --git a/packages/logger-console/package.json b/packages/logger-console/package.json index be531cd02..2c0543f1e 100644 --- a/packages/logger-console/package.json +++ b/packages/logger-console/package.json @@ -1,53 +1,22 @@ { "name": "@algolia/logger-console", - "version": "5.56.0", + "version": "4.17.2", + "private": false, "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", - "author": "Algolia", - "type": "module", + "sideEffects": false, + "main": "index.js", + "module": "dist/logger-console.esm.js", + "types": "dist/logger-console.d.ts", "files": [ - "dist", "index.js", - "index.d.ts" + "dist" ], - "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.18.5", - "@types/node": "24.13.3", - "jsdom": "30.0.1", - "publint": "0.3.22", - "ts-node": "10.9.2", - "tsup": "8.5.1", - "typescript": "5.9.3", - "vitest": "4.1.10" - }, "dependencies": { - "@algolia/client-common": "5.56.0" - }, - "engines": { - "node": ">= 14.0.0" + "@algolia/logger-common": "4.17.2" } } diff --git a/packages/logger-console/src/__tests__/console-logger.test.ts b/packages/logger-console/src/__tests__/console-logger.test.ts new file mode 100644 index 000000000..9e988444d --- /dev/null +++ b/packages/logger-console/src/__tests__/console-logger.test.ts @@ -0,0 +1,48 @@ +/* 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 deleted file mode 100644 index 00eb146e0..000000000 --- a/packages/logger-console/src/__tests__/logger-console.test.ts +++ /dev/null @@ -1,65 +0,0 @@ -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, 'warn'); - 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.warn?.('foo', {}); - await logger.error('foo', {}); - - expect(console.debug).toHaveBeenCalledTimes(1); - expect(console.info).toHaveBeenCalledTimes(1); - expect(console.warn).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.warn?.('foo', {}); - await logger.error('foo', {}); - - expect(console.debug).toHaveBeenCalledTimes(0); - expect(console.info).toHaveBeenCalledTimes(1); - expect(console.warn).toHaveBeenCalledTimes(1); - expect(console.error).toHaveBeenCalledTimes(1); - }); - - test('omits undefined args from warn output', async () => { - const logger = createConsoleLogger(LogLevelEnum.Info); - - await logger.warn?.('foo'); - - expect(console.warn).toHaveBeenCalledWith('foo'); - }); - - test('respects log level type error', async () => { - const logger = createConsoleLogger(LogLevelEnum.Error); - - await logger.debug('foo', {}); - await logger.info('foo', {}); - await logger.warn?.('foo', {}); - await logger.error('foo', {}); - - expect(console.debug).toHaveBeenCalledTimes(0); - expect(console.info).toHaveBeenCalledTimes(0); - expect(console.warn).toHaveBeenCalledTimes(0); - expect(console.error).toHaveBeenCalledTimes(1); - }); -}); diff --git a/packages/logger-console/src/createConsoleLogger.ts b/packages/logger-console/src/createConsoleLogger.ts new file mode 100644 index 000000000..d3df22f78 --- /dev/null +++ b/packages/logger-console/src/createConsoleLogger.ts @@ -0,0 +1,29 @@ +/* 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 new file mode 100644 index 000000000..49b1759dd --- /dev/null +++ b/packages/logger-console/src/index.ts @@ -0,0 +1,5 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './createConsoleLogger'; diff --git a/packages/logger-console/src/logger.ts b/packages/logger-console/src/logger.ts deleted file mode 100644 index 4aae19559..000000000 --- a/packages/logger-console/src/logger.ts +++ /dev/null @@ -1,41 +0,0 @@ -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 | undefined): Readonly> { - if (LogLevelEnum.Debug >= logLevel) { - console.debug(message, args); - } - - return Promise.resolve(); - }, - - info(message: string, args?: any | undefined): Readonly> { - if (LogLevelEnum.Info >= logLevel) { - console.info(message, args); - } - - return Promise.resolve(); - }, - - warn(message: string, args?: any | undefined): Readonly> { - if (LogLevelEnum.Info >= logLevel) { - // single-arg calls (e.g. via `logWarning`) must not print a trailing `undefined` - if (args === undefined) { - console.warn(message); - } else { - console.warn(message, args); - } - } - - return Promise.resolve(); - }, - - error(message: string, args?: any | undefined): Readonly> { - console.error(message, args); - - return Promise.resolve(); - }, - }; -} diff --git a/packages/logger-console/tsconfig.json b/packages/logger-console/tsconfig.json deleted file mode 100644 index a9a49694a..000000000 --- a/packages/logger-console/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "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 deleted file mode 100644 index 4d2a34b4f..000000000 --- a/packages/logger-console/tsup.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineConfig } from 'tsup'; - -import { getBaseNodeOptions } from '../../base.tsup.config'; - -import pkg from './package.json' with { type: 'json' }; - -export default defineConfig([ - { - ...getBaseNodeOptions(pkg, __dirname, 'http', 'es2018'), - 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.config.ts b/packages/logger-console/vitest.config.ts deleted file mode 100644 index d8f2ed1c2..000000000 --- a/packages/logger-console/vitest.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineConfig } from 'vitest/config'; - -export default defineConfig({ - test: { - projects: [ - { - test: { - name: 'node', - environment: 'node', - }, - }, - { - test: { - name: 'jsdom', - environment: 'jsdom', - }, - }, - ], - }, -}); diff --git a/packages/monitoring/LICENSE b/packages/monitoring/LICENSE deleted file mode 100644 index fddf416f9..000000000 --- a/packages/monitoring/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index fce382692..000000000 --- a/packages/monitoring/README.md +++ /dev/null @@ -1,76 +0,0 @@ -

- - 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 • - 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.56.0 -# or -npm install @algolia/monitoring@1.56.0 -# or -pnpm add @algolia/monitoring@1.56.0 -``` - -### 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/sdk/methods/monitoring/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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 deleted file mode 100644 index eff7060c4..000000000 --- a/packages/monitoring/builds/browser.ts +++ /dev/null @@ -1,51 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -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 | undefined): MonitoringClient { - if (!appId || typeof appId !== 'string') { - throw new Error('`appId` is missing.'); - } - - if (!apiKey || typeof apiKey !== 'string') { - throw new Error('`apiKey` is missing.'); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - 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()], - }), - ...browserOptions, - }); -} - -export type MonitoringClient = ReturnType; diff --git a/packages/monitoring/builds/fetch.ts b/packages/monitoring/builds/fetch.ts deleted file mode 100644 index e0f720016..000000000 --- a/packages/monitoring/builds/fetch.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -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 | undefined): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/monitoring/builds/node.ts b/packages/monitoring/builds/node.ts deleted file mode 100644 index 5c912a31f..000000000 --- a/packages/monitoring/builds/node.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -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 | undefined): 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(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/monitoring/builds/worker.ts b/packages/monitoring/builds/worker.ts deleted file mode 100644 index eb86c0781..000000000 --- a/packages/monitoring/builds/worker.ts +++ /dev/null @@ -1,45 +0,0 @@ -// Code generated by 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 | undefined): MonitoringClient { - if (!appId || typeof appId !== 'string') { - throw new Error('`appId` is missing.'); - } - - if (!apiKey || typeof apiKey !== 'string') { - throw new Error('`apiKey` is missing.'); - } - - const { compression: _compression, ...workerOptions } = options || {}; - - return { - ...createMonitoringClient({ - appId, - apiKey, - timeouts: { - connect: 2000, - read: 5000, - write: 30000, - }, - logger: createNullLogger(), - requester: createFetchRequester(), - algoliaAgents: [{ segment: 'Worker' }], - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - ...workerOptions, - }), - }; -} diff --git a/packages/monitoring/index.d.ts b/packages/monitoring/index.d.ts deleted file mode 100644 index e81a1cd3e..000000000 --- a/packages/monitoring/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/node'; diff --git a/packages/monitoring/index.js b/packages/monitoring/index.js deleted file mode 100644 index 21e26aad3..000000000 --- a/packages/monitoring/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/monitoring/model/badRequest.ts b/packages/monitoring/model/badRequest.ts deleted file mode 100644 index ff63ba531..000000000 --- a/packages/monitoring/model/badRequest.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/monitoring/model/clientMethodProps.ts b/packages/monitoring/model/clientMethodProps.ts deleted file mode 100644 index b32b8e364..000000000 --- a/packages/monitoring/model/clientMethodProps.ts +++ /dev/null @@ -1,132 +0,0 @@ -// Code generated by OpenAPI Generator (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, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customGet` method. - */ -export type CustomGetProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customPost` method. - */ -export type CustomPostProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `customPut` method. - */ -export type CustomPutProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * 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 deleted file mode 100644 index f31be6046..000000000 --- a/packages/monitoring/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/monitoring/model/forbidden.ts b/packages/monitoring/model/forbidden.ts deleted file mode 100644 index 0b09e1c73..000000000 --- a/packages/monitoring/model/forbidden.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/monitoring/model/incident.ts b/packages/monitoring/model/incident.ts deleted file mode 100644 index 4fea40008..000000000 --- a/packages/monitoring/model/incident.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - status?: Status | undefined; -}; diff --git a/packages/monitoring/model/incidentEntry.ts b/packages/monitoring/model/incidentEntry.ts deleted file mode 100644 index cc5b6f15d..000000000 --- a/packages/monitoring/model/incidentEntry.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - v?: Incident | undefined; -}; diff --git a/packages/monitoring/model/incidentsResponse.ts b/packages/monitoring/model/incidentsResponse.ts deleted file mode 100644 index 7907637d3..000000000 --- a/packages/monitoring/model/incidentsResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 } | undefined; -}; diff --git a/packages/monitoring/model/index.ts b/packages/monitoring/model/index.ts deleted file mode 100644 index 1f38523e6..000000000 --- a/packages/monitoring/model/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 8f6c3e192..000000000 --- a/packages/monitoring/model/indexingMetric.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 } | undefined; -}; diff --git a/packages/monitoring/model/indexingTimeResponse.ts b/packages/monitoring/model/indexingTimeResponse.ts deleted file mode 100644 index ed49061f3..000000000 --- a/packages/monitoring/model/indexingTimeResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/monitoring/model/infrastructureResponse.ts b/packages/monitoring/model/infrastructureResponse.ts deleted file mode 100644 index e8efbf0ab..000000000 --- a/packages/monitoring/model/infrastructureResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/monitoring/model/inventoryResponse.ts b/packages/monitoring/model/inventoryResponse.ts deleted file mode 100644 index 5eee0a70f..000000000 --- a/packages/monitoring/model/inventoryResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/monitoring/model/latencyMetric.ts b/packages/monitoring/model/latencyMetric.ts deleted file mode 100644 index 511857d06..000000000 --- a/packages/monitoring/model/latencyMetric.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 } | undefined; -}; diff --git a/packages/monitoring/model/latencyResponse.ts b/packages/monitoring/model/latencyResponse.ts deleted file mode 100644 index 785ea88c5..000000000 --- a/packages/monitoring/model/latencyResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/monitoring/model/metric.ts b/packages/monitoring/model/metric.ts deleted file mode 100644 index f0509fef7..000000000 --- a/packages/monitoring/model/metric.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index c9bfe08a0..000000000 --- a/packages/monitoring/model/metrics.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Code generated by OpenAPI Generator (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 } | undefined; - - /** - * RAM used for indexing in MB. - */ - ram_indexing_usage?: { [key: string]: Array } | undefined; - - /** - * RAM used for search in MB. - */ - ram_search_usage?: { [key: string]: Array } | undefined; - - /** - * 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 } | undefined; - - /** - * Average build time of the indices in seconds. - */ - avg_build_time?: { [key: string]: Array } | undefined; -}; diff --git a/packages/monitoring/model/period.ts b/packages/monitoring/model/period.ts deleted file mode 100644 index 13ef62681..000000000 --- a/packages/monitoring/model/period.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 8fb37a79d..000000000 --- a/packages/monitoring/model/probesMetric.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Value of the metric. - */ - v?: number | undefined; -}; diff --git a/packages/monitoring/model/region.ts b/packages/monitoring/model/region.ts deleted file mode 100644 index b2975475a..000000000 --- a/packages/monitoring/model/region.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 296d4e30f..000000000 --- a/packages/monitoring/model/server.ts +++ /dev/null @@ -1,33 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - region?: Region | undefined; - - /** - * Included to support legacy applications. Use `is_replica` instead. - */ - is_slave?: boolean | undefined; - - /** - * Whether this server is a replica of another server. - */ - is_replica?: boolean | undefined; - - /** - * Name of the cluster to which this server belongs. - */ - cluster?: string | undefined; - - status?: ServerStatus | undefined; - - type?: Type | undefined; -}; diff --git a/packages/monitoring/model/serverStatus.ts b/packages/monitoring/model/serverStatus.ts deleted file mode 100644 index 7dcbc6af7..000000000 --- a/packages/monitoring/model/serverStatus.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index e12c5b53f..000000000 --- a/packages/monitoring/model/status.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index ab96e4162..000000000 --- a/packages/monitoring/model/statusResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 } | undefined; -}; diff --git a/packages/monitoring/model/timeEntry.ts b/packages/monitoring/model/timeEntry.ts deleted file mode 100644 index 0f3f3aaa6..000000000 --- a/packages/monitoring/model/timeEntry.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Time in ms. - */ - v?: number | undefined; -}; diff --git a/packages/monitoring/model/type.ts b/packages/monitoring/model/type.ts deleted file mode 100644 index a35d2910d..000000000 --- a/packages/monitoring/model/type.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index ca7ecd822..000000000 --- a/packages/monitoring/model/unauthorized.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/monitoring/package.json b/packages/monitoring/package.json deleted file mode 100644 index ec79ba677..000000000 --- a/packages/monitoring/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "version": "1.56.0", - "repository": { - "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" - }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/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": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/builds/browser.js" - }, - "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", - "./dist/builds/*.js": "./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.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "26.1.2", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" - } -} diff --git a/packages/monitoring/rollup.config.js b/packages/monitoring/rollup.config.js deleted file mode 100644 index 8b5b5aabb..000000000 --- a/packages/monitoring/rollup.config.js +++ /dev/null @@ -1,17 +0,0 @@ -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 deleted file mode 100644 index c396ff80c..000000000 --- a/packages/monitoring/src/monitoringClient.ts +++ /dev/null @@ -1,796 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - CreateClientOptions, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, -} from '@algolia/client-common'; -import { createAuth, createTransporter, getAlgoliaAgent, validateRequired } 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.56.0'; - -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 | undefined): 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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customDelete', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customDelete - The customDelete object. - * @param customDelete.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customDelete for the plain version. - */ - customDeleteWithHTTPInfo( - { path, parameters }: CustomDeleteProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customDeleteWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customGet', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customGet - The customGet object. - * @param customGet.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customGet for the plain version. - */ - customGetWithHTTPInfo( - { path, parameters }: CustomGetProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customGetWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPut', path); - - 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); - }, - /** - * This method lets you send requests to the Algolia REST API. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPut - The customPut object. - * @param customPut.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPut for the plain version. - */ - customPutWithHTTPInfo( - { path, parameters, body }: CustomPutProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPutWithHTTPInfo', path); - - 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.requestWithHttpInfo(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 { - validateRequired('clusters', 'getClusterIncidents', clusters); - - 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 known incidents for the selected clusters. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @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. - * @see getClusterIncidents for the plain version. - */ - getClusterIncidentsWithHTTPInfo( - { clusters }: GetClusterIncidentsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('clusters', 'getClusterIncidentsWithHTTPInfo', clusters); - - 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.requestWithHttpInfo(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 { - validateRequired('clusters', 'getClusterStatus', clusters); - - 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 the status of selected clusters. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @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. - * @see getClusterStatus for the plain version. - */ - getClusterStatusWithHTTPInfo( - { clusters }: GetClusterStatusProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('clusters', 'getClusterStatusWithHTTPInfo', clusters); - - 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.requestWithHttpInfo(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 | undefined): 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 known incidents for all clusters. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getIncidents for the plain version. - */ - getIncidentsWithHTTPInfo( - requestOptions?: RequestOptions | undefined, - ): Promise> { - const requestPath = '/1/incidents'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - - /** - * Retrieves indexing latency metrics for selected clusters. This endpoint is intended for infrastructure-level monitoring and availability checks. The returned value reflects latency measured on Algolia\'s internal monitoring index and is reported in milliseconds. This metric isn\'t intended to represent the indexing performance of an individual application or index. To measure when an indexing operation has completed for your application, use the `waitTask` method. - * @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 { - validateRequired('clusters', 'getIndexingTime', clusters); - - 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 indexing latency metrics for selected clusters. This endpoint is intended for infrastructure-level monitoring and availability checks. The returned value reflects latency measured on Algolia\'s internal monitoring index and is reported in milliseconds. This metric isn\'t intended to represent the indexing performance of an individual application or index. To measure when an indexing operation has completed for your application, use the `waitTask` method. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @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. - * @see getIndexingTime for the plain version. - */ - getIndexingTimeWithHTTPInfo( - { clusters }: GetIndexingTimeProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('clusters', 'getIndexingTimeWithHTTPInfo', clusters); - - 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.requestWithHttpInfo(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 { - validateRequired('clusters', 'getLatency', clusters); - - 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 the average latency for search requests for selected clusters. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @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. - * @see getLatency for the plain version. - */ - getLatencyWithHTTPInfo( - { clusters }: GetLatencyProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('clusters', 'getLatencyWithHTTPInfo', clusters); - - 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.requestWithHttpInfo(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 { - validateRequired('metric', 'getMetrics', metric); - - validateRequired('period', 'getMetrics', period); - - 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); - }, - /** - * 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). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @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. - * @see getMetrics for the plain version. - */ - getMetricsWithHTTPInfo( - { metric, period }: GetMetricsProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('metric', 'getMetricsWithHTTPInfo', metric); - - validateRequired('period', 'getMetricsWithHTTPInfo', period); - - 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.requestWithHttpInfo(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 } }> { - validateRequired('clusters', 'getReachability', clusters); - - 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); - }, - /** - * Test whether clusters are reachable or not. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @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. - * @see getReachability for the plain version. - */ - getReachabilityWithHTTPInfo( - { clusters }: GetReachabilityProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('clusters', 'getReachabilityWithHTTPInfo', clusters); - - 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.requestWithHttpInfo(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 | undefined): 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 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getServers for the plain version. - */ - getServersWithHTTPInfo( - requestOptions?: RequestOptions | undefined, - ): Promise> { - const requestPath = '/1/inventory/servers'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(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 | undefined): 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); - }, - /** - * Retrieves the status of all Algolia clusters and instances. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. - * @see getStatus for the plain version. - */ - getStatusWithHTTPInfo(requestOptions?: RequestOptions | undefined): Promise> { - const requestPath = '/1/status'; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - - const request: Request = { - method: 'GET', - path: requestPath, - queryParameters, - headers, - }; - - return transporter.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/monitoring/tsconfig.json b/packages/monitoring/tsconfig.json deleted file mode 100644 index 444e8bb64..000000000 --- a/packages/monitoring/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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 deleted file mode 100644 index 6a11bcfbd..000000000 --- a/packages/monitoring/tsup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -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', - target: 'es2018', - 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 deleted file mode 100644 index fddf416f9..000000000 --- a/packages/recommend/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 0aa7e28f8..33c79a68d 100644 --- a/packages/recommend/README.md +++ b/packages/recommend/README.md @@ -1,76 +1,76 @@

- - Algolia for JavaScript - +

Algolia Recommend

-

The perfect starting point to integrate Algolia within your JavaScript project

+

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

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

- Documentation • - InstantSearch • + Documentation • + UI libraryCommunity ForumStack OverflowReport a bug • - Support + Support

## ✨ Features -- Thin & **minimal low-level HTTP client** to interact with Algolia's API +- Thin & **minimal low-level HTTP client** to interact with Algolia's Recommend API - Works both on the **browser** and **node.js** -- **UMD and ESM compatible**, you can use it with any module loader +- **UMD 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/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 +First, install Algolia Recommend API Client via the [npm](https://www.npmjs.com/get-npm) package manager: ```bash -yarn add @algolia/recommend@5.56.0 -# or -npm install @algolia/recommend@5.56.0 -# or -pnpm add @algolia/recommend@5.56.0 -``` - -### Without a package manager - -Add the following JavaScript snippet to the of your website: - -```html - +npm install @algolia/recommend ``` -### Usage - -You can now import the Algolia API client in your project and play with it. +Then, let's retrieve recommendations: ```js -import { recommendClient } from '@algolia/recommend'; - -const client = recommendClient('YOUR_APP_ID', 'YOUR_API_KEY'); +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); + }); ``` -For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/sdk/methods/recommend/)**. - -## ❓ Troubleshooting - -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://support.algolia.com/hc/en-us/sections/15061037630609-API-Client-FAQs) 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) +For full documentation, visit the **[online documentation](https://www.algolia.com/doc/api-client/methods/recommend/)**. ## 📄 License -The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). +Algolia Recommend API Client is an open-sourced software licensed under the [MIT license](LICENSE.md). diff --git a/packages/recommend/api-extractor.json b/packages/recommend/api-extractor.json new file mode 100644 index 000000000..a522871c3 --- /dev/null +++ b/packages/recommend/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 deleted file mode 100644 index 87776bb22..000000000 --- a/packages/recommend/builds/browser.ts +++ /dev/null @@ -1,52 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import { - createBrowserLocalStorageCache, - createFallbackableCache, - createMemoryCache, - createNullLogger, -} from '@algolia/client-common'; -import { createXhrRequester } from '@algolia/requester-browser-xhr'; - -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 | undefined): RecommendClient { - if (!appId || typeof appId !== 'string') { - throw new Error('`appId` is missing.'); - } - - if (!apiKey || typeof apiKey !== 'string') { - throw new Error('`apiKey` is missing.'); - } - - const { compression: _compression, ...browserOptions } = options || {}; - - return createRecommendClient({ - appId, - apiKey, - timeouts: { - connect: 1000, - read: 2000, - write: 30000, - }, - logger: createNullLogger(), - requester: createXhrRequester(), - algoliaAgents: [{ segment: 'Browser' }], - authMode: 'WithinQueryParameters', - requestIdChannel: 'queryParameters', - responsesCache: createMemoryCache(), - requestsCache: createMemoryCache({ serializable: false }), - hostsCache: createFallbackableCache({ - caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], - }), - ...browserOptions, - }); -} - -export type RecommendClient = ReturnType; diff --git a/packages/recommend/builds/fetch.ts b/packages/recommend/builds/fetch.ts deleted file mode 100644 index b76cceedf..000000000 --- a/packages/recommend/builds/fetch.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -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 | undefined): 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' }], - requestIdChannel: 'queryParameters', - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/recommend/builds/node.ts b/packages/recommend/builds/node.ts deleted file mode 100644 index d173dcc62..000000000 --- a/packages/recommend/builds/node.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Code generated by 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 { gzipSync } from 'node:zlib'; - -import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; -import { createHttpRequester } from '@algolia/requester-node-http'; - -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 | undefined): 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 }], - requestIdChannel: 'headers', - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - compress: async (data: string): Promise => gzipSync(Buffer.from(data)), - ...options, - }), - }; -} diff --git a/packages/recommend/builds/worker.ts b/packages/recommend/builds/worker.ts deleted file mode 100644 index ba5077382..000000000 --- a/packages/recommend/builds/worker.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Code generated by 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 | undefined): RecommendClient { - if (!appId || typeof appId !== 'string') { - throw new Error('`appId` is missing.'); - } - - if (!apiKey || typeof apiKey !== 'string') { - throw new Error('`apiKey` is missing.'); - } - - const { compression: _compression, ...workerOptions } = options || {}; - - return { - ...createRecommendClient({ - appId, - apiKey, - timeouts: { - connect: 2000, - read: 5000, - write: 30000, - }, - logger: createNullLogger(), - requester: createFetchRequester(), - algoliaAgents: [{ segment: 'Worker' }], - requestIdChannel: 'queryParameters', - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - ...workerOptions, - }), - }; -} diff --git a/packages/recommend/index.d.ts b/packages/recommend/index.d.ts index e81a1cd3e..70d1e5942 100644 --- a/packages/recommend/index.d.ts +++ b/packages/recommend/index.d.ts @@ -1 +1,3 @@ -export * from './dist/node'; +/* eslint-disable import/no-unresolved*/ +export * from './dist/recommend'; +export { default } from './dist/recommend'; diff --git a/packages/recommend/index.js b/packages/recommend/index.js index 21e26aad3..8122c2480 100644 --- a/packages/recommend/index.js +++ b/packages/recommend/index.js @@ -1 +1,15 @@ -module.exports = require('./dist/builds/node.cjs'); +/* 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; diff --git a/packages/recommend/model/advancedSyntaxFeatures.ts b/packages/recommend/model/advancedSyntaxFeatures.ts deleted file mode 100644 index 61e577d48..000000000 --- a/packages/recommend/model/advancedSyntaxFeatures.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index b4d50c7a5..000000000 --- a/packages/recommend/model/alternativesAsExact.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 79ff0cd59..000000000 --- a/packages/recommend/model/aroundPrecision.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 8198f1e75..000000000 --- a/packages/recommend/model/aroundRadius.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index e5f107060..000000000 --- a/packages/recommend/model/aroundRadiusAll.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 94292dab6..000000000 --- a/packages/recommend/model/autoFacetFilter.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/recommend/model/banner.ts b/packages/recommend/model/banner.ts deleted file mode 100644 index 8eaa250e7..000000000 --- a/packages/recommend/model/banner.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - link?: BannerLink | undefined; -}; diff --git a/packages/recommend/model/bannerImage.ts b/packages/recommend/model/bannerImage.ts deleted file mode 100644 index a41d758ff..000000000 --- a/packages/recommend/model/bannerImage.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - title?: string | undefined; -}; diff --git a/packages/recommend/model/bannerImageUrl.ts b/packages/recommend/model/bannerImageUrl.ts deleted file mode 100644 index 25454a0b9..000000000 --- a/packages/recommend/model/bannerImageUrl.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/recommend/model/bannerLink.ts b/packages/recommend/model/bannerLink.ts deleted file mode 100644 index a9161c475..000000000 --- a/packages/recommend/model/bannerLink.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/recommend/model/baseIndexSettings.ts b/packages/recommend/model/baseIndexSettings.ts deleted file mode 100644 index e5f1d2d96..000000000 --- a/packages/recommend/model/baseIndexSettings.ts +++ /dev/null @@ -1,105 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Attributes for which to split [camel case](https://wikipedia.org/wiki/Camel_case) words. Attribute names are case-sensitive. - */ - camelCaseAttributes?: Array | undefined; - - /** - * 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 | undefined; - - /** - * Languages for language-specific processing steps, such as word detection and dictionary settings. **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 | undefined; - - /** - * 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 | undefined; - - /** - * Whether arrays with exclusively non-negative integers should be compressed for better performance. If true, the compressed arrays may be reordered. - */ - allowCompressionOfIntegerArray?: boolean | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * An object with custom data. You can store up to 32kB as custom data. - */ - userData?: any | null | undefined; - - /** - * 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 } } | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/recommend/model/baseRecommendIndexSettings.ts b/packages/recommend/model/baseRecommendIndexSettings.ts deleted file mode 100644 index 84130da14..000000000 --- a/packages/recommend/model/baseRecommendIndexSettings.ts +++ /dev/null @@ -1,167 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * HTML tag to insert before the highlighted parts in all highlighted results and snippets. - */ - highlightPreTag?: string | undefined; - - /** - * HTML tag to insert after the highlighted parts in all highlighted results and snippets. - */ - highlightPostTag?: string | undefined; - - /** - * String used as an ellipsis indicator when a snippet is truncated. - */ - snippetEllipsisText?: string | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - typoTolerance?: TypoTolerance | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - ignorePlurals?: IgnorePlurals | undefined; - - removeStopWords?: RemoveStopWords | undefined; - - /** - * 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, place the CJK language **first**. **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 | undefined; - - /** - * 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 | undefined; - - /** - * Whether to enable Personalization. - */ - enablePersonalization?: boolean | undefined; - - queryType?: QueryType | undefined; - - removeWordsIfNoResults?: RemoveWordsIfNoResults | undefined; - - /** - * Whether to support phrase matching and excluding words from search queries Use the `advancedSyntaxFeatures` parameter to control which feature is supported. - */ - advancedSyntax?: boolean | undefined; - - optionalWords?: OptionalWords | null | undefined; - - /** - * 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 | undefined; - - exactOnSingleWordQuery?: ExactOnSingleWordQuery | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - distinct?: Distinct | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Maximum number of facet values to return for each facet. - */ - maxValuesPerFacet?: number | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - renderingContent?: RenderingContent | undefined; - - /** - * 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 | undefined; - - reRankingApplyFilter?: ReRankingApplyFilter | null | undefined; -}; diff --git a/packages/recommend/model/baseRecommendRequest.ts b/packages/recommend/model/baseRecommendRequest.ts deleted file mode 100644 index e1605ebf7..000000000 --- a/packages/recommend/model/baseRecommendRequest.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - queryParameters?: RecommendSearchParams | undefined; -}; diff --git a/packages/recommend/model/baseRecommendSearchParams.ts b/packages/recommend/model/baseRecommendSearchParams.ts deleted file mode 100644 index ae3b4e4ee..000000000 --- a/packages/recommend/model/baseRecommendSearchParams.ts +++ /dev/null @@ -1,123 +0,0 @@ -// Code generated by OpenAPI Generator (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 { 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 | undefined; - - /** - * 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 if the facet attribute name or facet value contains 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 | undefined; - - optionalFilters?: OptionalFilters | undefined; - - numericFilters?: NumericFilters | undefined; - - tagFilters?: TagFilters | undefined; - - /** - * 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 | undefined; - - /** - * Restricts a search to a subset of your searchable attributes. Attribute names are case-sensitive. - */ - restrictSearchableAttributes?: Array | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Whether to obtain the coordinates from the request\'s IP address. - */ - aroundLatLngViaIP?: boolean | undefined; - - aroundRadius?: AroundRadius | undefined; - - aroundPrecision?: AroundPrecision | undefined; - - /** - * Minimum radius (in meters) for a search around a location when `aroundRadius` isn\'t set. - */ - minimumAroundRadius?: number | undefined; - - insideBoundingBox?: InsideBoundingBox | null | undefined; - - /** - * 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> | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Whether the search response should include detailed ranking information. - */ - getRankingInfo?: boolean | undefined; - - /** - * Whether to take into account an index\'s synonyms for this search. - */ - synonyms?: boolean | undefined; - - /** - * 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/doc/guides/sending-events/getting-started). - */ - clickAnalytics?: boolean | undefined; - - /** - * Whether this search will be included in Analytics. - */ - analytics?: boolean | undefined; - - /** - * Tags to apply to the query for [segmenting analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments). - */ - analyticsTags?: Array | undefined; - - /** - * Whether to include this search when calculating processing-time percentiles. - */ - percentileComputation?: boolean | undefined; -}; diff --git a/packages/recommend/model/baseSearchResponse.ts b/packages/recommend/model/baseSearchResponse.ts deleted file mode 100644 index b6598e49a..000000000 --- a/packages/recommend/model/baseSearchResponse.ts +++ /dev/null @@ -1,129 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Variant ID. This is only included in the response for indices that are part of an A/B test. - */ - abTestVariantID?: number | undefined; - - /** - * Computed geographical location. - */ - aroundLatLng?: string | undefined; - - /** - * Distance from a central coordinate provided by `aroundLatLng`. - */ - automaticRadius?: string | undefined; - - exhaustive?: Exhaustive | undefined; - - /** - * Rules applied to the query. - */ - appliedRules?: Array> | undefined; - - /** - * See the `facetsCount` field of the `exhaustive` object in the response. - */ - exhaustiveFacetsCount?: boolean | undefined; - - /** - * See the `nbHits` field of the `exhaustive` object in the response. - */ - exhaustiveNbHits?: boolean | undefined; - - /** - * See the `typo` field of the `exhaustive` object in the response. - */ - exhaustiveTypo?: boolean | undefined; - - /** - * Facet counts. - */ - facets?: { [key: string]: { [key: string]: number } } | undefined; - - /** - * Statistics for numerical facets. - */ - facets_stats?: { [key: string]: FacetStats } | undefined; - - /** - * Index name used for the query. - */ - index?: string | undefined; - - /** - * Index name used for the query. During A/B testing, the targeted index isn\'t always the index used by the query. - */ - indexUsed?: string | undefined; - - /** - * Warnings about the query. - */ - message?: string | undefined; - - /** - * Number of hits selected and sorted by the relevant sort algorithm. - */ - nbSortedHits?: number | undefined; - - /** - * 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 | undefined; - - /** - * Time the server took to process the request, in milliseconds. - */ - processingTimeMS?: number | undefined; - - /** - * Experimental. List of processing steps and their times, in milliseconds. You can use this list to investigate performance issues. - */ - processingTimingsMS?: Record | undefined; - - /** - * Markup text indicating which parts of the original query have been removed to retrieve a non-empty result set. - */ - queryAfterRemoval?: string | undefined; - - redirect?: Redirect | undefined; - - renderingContent?: RenderingContent | undefined; - - /** - * Time the server took to process the request, in milliseconds. - */ - serverTimeMS?: number | undefined; - - /** - * Host name of the server that processed the request. - */ - serverUsed?: string | undefined; - - /** - * An object with custom data. You can store up to 32kB as custom data. - */ - userData?: any | null | undefined; - - /** - * Unique identifier for the query. This is used for [click analytics](https://www.algolia.com/doc/guides/analytics/click-analytics). - */ - queryID?: string | undefined; - - /** - * Whether automatic events collection is enabled for the application. - */ - _automaticInsights?: boolean | undefined; -}; diff --git a/packages/recommend/model/booleanString.ts b/packages/recommend/model/booleanString.ts deleted file mode 100644 index 4cf1fb196..000000000 --- a/packages/recommend/model/booleanString.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 19c909cb9..000000000 --- a/packages/recommend/model/boughtTogetherQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a5dbcf71d..000000000 --- a/packages/recommend/model/clientMethodProps.ts +++ /dev/null @@ -1,162 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; - -/** - * Properties for the `customDelete` method. - */ -export type CustomDeleteProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customGet` method. - */ -export type CustomGetProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; -}; - -/** - * Properties for the `customPost` method. - */ -export type CustomPostProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * Properties for the `customPut` method. - */ -export type CustomPutProps = { - /** - * Path of the endpoint, for example `1/newFeature`. - */ - path: string; - /** - * Query parameters to apply to the current query. - */ - parameters?: { [key: string]: any } | undefined; - /** - * Parameters to send with the custom request. - */ - body?: Record | undefined; -}; - -/** - * 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 | undefined; -}; diff --git a/packages/recommend/model/condition.ts b/packages/recommend/model/condition.ts deleted file mode 100644 index 84c87341b..000000000 --- a/packages/recommend/model/condition.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 if the facet attribute name or facet value contains 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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/recommend/model/consequence.ts b/packages/recommend/model/consequence.ts deleted file mode 100644 index 0b7cae0e4..000000000 --- a/packages/recommend/model/consequence.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Place items at specific positions in the list of recommendations. - */ - promote?: Array | undefined; - - params?: ParamsConsequence | undefined; -}; diff --git a/packages/recommend/model/deletedAtResponse.ts b/packages/recommend/model/deletedAtResponse.ts deleted file mode 100644 index 4724e305c..000000000 --- a/packages/recommend/model/deletedAtResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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](https://www.algolia.com/doc/rest-api/search/get-task) and this task ID. - */ - 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 deleted file mode 100644 index dc87dfb00..000000000 --- a/packages/recommend/model/distinct.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index f31be6046..000000000 --- a/packages/recommend/model/errorBase.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/recommend/model/exactOnSingleWordQuery.ts b/packages/recommend/model/exactOnSingleWordQuery.ts deleted file mode 100644 index d01b358f6..000000000 --- a/packages/recommend/model/exactOnSingleWordQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index c528c89bc..000000000 --- a/packages/recommend/model/exhaustive.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Code generated by 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/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate). - */ - facetsCount?: boolean | undefined; - - /** - * The value is `false` if not all facet values are retrieved. - */ - facetValues?: boolean | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/recommend/model/facetFilters.ts b/packages/recommend/model/facetFilters.ts deleted file mode 100644 index 0dc5e336e..000000000 --- a/packages/recommend/model/facetFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 52d5a82fe..000000000 --- a/packages/recommend/model/facetOrdering.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Order of facet values. One object for each facet. - */ - values?: { [key: string]: Value } | undefined; -}; diff --git a/packages/recommend/model/facetStats.ts b/packages/recommend/model/facetStats.ts deleted file mode 100644 index 706a459a2..000000000 --- a/packages/recommend/model/facetStats.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Maximum value in the results. - */ - max?: number | undefined; - - /** - * Average facet value in the results. - */ - avg?: number | undefined; - - /** - * Sum of all values in the results. - */ - sum?: number | undefined; -}; diff --git a/packages/recommend/model/fallbackParams.ts b/packages/recommend/model/fallbackParams.ts deleted file mode 100644 index ed845cd76..000000000 --- a/packages/recommend/model/fallbackParams.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 to use for a fallback request if there aren\'t enough recommendations. - */ -export type FallbackParams = BaseRecommendSearchParams & - SearchParamsQuery & - RecommendIndexSettings & - Record; diff --git a/packages/recommend/model/fbtModel.ts b/packages/recommend/model/fbtModel.ts deleted file mode 100644 index 29ee3206e..000000000 --- a/packages/recommend/model/fbtModel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 5d392b0fa..000000000 --- a/packages/recommend/model/frequentlyBoughtTogether.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 { FbtModel } from './fbtModel'; - -export type FrequentlyBoughtTogether = { - model: FbtModel; - - /** - * Unique record identifier. - */ - objectID: string; - - fallbackParameters?: FallbackParams | undefined; -}; diff --git a/packages/recommend/model/getRecommendTaskResponse.ts b/packages/recommend/model/getRecommendTaskResponse.ts deleted file mode 100644 index c45eb80b3..000000000 --- a/packages/recommend/model/getRecommendTaskResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 55b34d5bc..000000000 --- a/packages/recommend/model/getRecommendationsParams.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index a25c511f4..000000000 --- a/packages/recommend/model/getRecommendationsResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index f757463df..000000000 --- a/packages/recommend/model/hideConsequenceObject.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/recommend/model/highlightResult.ts b/packages/recommend/model/highlightResult.ts deleted file mode 100644 index 102271a17..000000000 --- a/packages/recommend/model/highlightResult.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 8c7a4b532..000000000 --- a/packages/recommend/model/highlightResultOption.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/recommend/model/ignorePlurals.ts b/packages/recommend/model/ignorePlurals.ts deleted file mode 100644 index 2eef62270..000000000 --- a/packages/recommend/model/ignorePlurals.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (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. 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 deleted file mode 100644 index 5cb6abe07..000000000 --- a/packages/recommend/model/index.ts +++ /dev/null @@ -1,100 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 65956b664..000000000 --- a/packages/recommend/model/indexSettingsFacets.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/recommend/model/insideBoundingBox.ts b/packages/recommend/model/insideBoundingBox.ts deleted file mode 100644 index 8a498532f..000000000 --- a/packages/recommend/model/insideBoundingBox.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index a24caf321..000000000 --- a/packages/recommend/model/lookingSimilar.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/recommend/model/lookingSimilarModel.ts b/packages/recommend/model/lookingSimilarModel.ts deleted file mode 100644 index 8b2d4a769..000000000 --- a/packages/recommend/model/lookingSimilarModel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index dc94e36a3..000000000 --- a/packages/recommend/model/lookingSimilarQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 2cb9f4d21..000000000 --- a/packages/recommend/model/matchLevel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index c0ec6611e..000000000 --- a/packages/recommend/model/matchedGeoLocation.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Longitude of the matched location. - */ - lng?: number | undefined; - - /** - * Distance between the matched location and the search location (in meters). - */ - distance?: number | undefined; -}; diff --git a/packages/recommend/model/numericFilters.ts b/packages/recommend/model/numericFilters.ts deleted file mode 100644 index 6129dc5d3..000000000 --- a/packages/recommend/model/numericFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 965eef7be..000000000 --- a/packages/recommend/model/optionalFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 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. - On virtual replicas, optional filters are applied _after_ the replica\'s [relevant sort](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/relevant-sort). - */ -export type OptionalFilters = Array | string; diff --git a/packages/recommend/model/optionalWords.ts b/packages/recommend/model/optionalWords.ts deleted file mode 100644 index e2f58ed97..000000000 --- a/packages/recommend/model/optionalWords.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 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 optional, 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 fewer 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 2,000 need 2 matched words. - If `optionalWords` has 10 or more words, the required number of matched words increases by the number of optional words divided by 5 (rounded down). Example: with 18 optional words, results 1 to 1,000 require 1 matched word; results 1,001 to 2,000 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 deleted file mode 100644 index 0cc221dd7..000000000 --- a/packages/recommend/model/paramsConsequence.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 if the facet attribute name or facet value contains 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 | undefined; - - /** - * 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 | undefined; -}; diff --git a/packages/recommend/model/personalization.ts b/packages/recommend/model/personalization.ts deleted file mode 100644 index 2c91ff1ea..000000000 --- a/packages/recommend/model/personalization.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * The score of the ranking. - */ - rankingScore?: number | undefined; - - /** - * The score of the event. - */ - score?: number | undefined; -}; diff --git a/packages/recommend/model/promoteConsequenceObject.ts b/packages/recommend/model/promoteConsequenceObject.ts deleted file mode 100644 index da7a4e8a6..000000000 --- a/packages/recommend/model/promoteConsequenceObject.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Index in the list of recommendations where to place this item. - */ - position?: number | undefined; -}; diff --git a/packages/recommend/model/queryType.ts b/packages/recommend/model/queryType.ts deleted file mode 100644 index 5c33be4a6..000000000 --- a/packages/recommend/model/queryType.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index bbe8841d0..000000000 --- a/packages/recommend/model/range.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Upper boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. - */ - value?: number | undefined; -}; diff --git a/packages/recommend/model/rankingInfo.ts b/packages/recommend/model/rankingInfo.ts deleted file mode 100644 index 47a6e5a93..000000000 --- a/packages/recommend/model/rankingInfo.ts +++ /dev/null @@ -1,68 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * 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 | undefined; - - matchedGeoLocation?: MatchedGeoLocation | undefined; - - personalization?: Personalization | undefined; - - /** - * 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 | undefined; - - /** - * Number of words between multiple matches in the query plus 1. For single word queries, `proximityDistance` is 0. - */ - proximityDistance?: number | undefined; - - /** - * Overall ranking of the record, expressed as a single integer. This attribute is internal. - */ - userScore: number; - - /** - * Number of matched words. - */ - words?: number | undefined; - - /** - * Whether the record is re-ranked. - */ - promotedByReRanking?: boolean | undefined; -}; diff --git a/packages/recommend/model/reRankingApplyFilter.ts b/packages/recommend/model/reRankingApplyFilter.ts deleted file mode 100644 index 2cbcc86ef..000000000 --- a/packages/recommend/model/reRankingApplyFilter.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index b2043736c..000000000 --- a/packages/recommend/model/recommendHit.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Code generated by OpenAPI Generator (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 } | undefined; - - /** - * Snippets that show the context around a matching search query. - */ - _snippetResult?: { [key: string]: SnippetResult } | undefined; - - _rankingInfo?: RankingInfo | undefined; - - _distinctSeqID?: number | undefined; - - /** - * Recommendation score. - */ - _score?: number | undefined; -}; diff --git a/packages/recommend/model/recommendIndexSettings.ts b/packages/recommend/model/recommendIndexSettings.ts deleted file mode 100644 index 197c5e592..000000000 --- a/packages/recommend/model/recommendIndexSettings.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 17f488596..000000000 --- a/packages/recommend/model/recommendModels.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index ef2407e9f..000000000 --- a/packages/recommend/model/recommendRule.ts +++ /dev/null @@ -1,37 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Unique identifier of a rule object. - */ - objectID?: string | undefined; - - condition?: Condition | undefined; - - consequence?: Consequence | undefined; - - /** - * Description of the rule\'s purpose. This can be helpful for display in the Algolia dashboard. - */ - description?: string | undefined; - - /** - * Indicates whether to enable the rule. If it isn\'t enabled, it isn\'t applied at query time. - */ - enabled?: boolean | undefined; - - /** - * Time periods when the rule is active. - */ - validity?: Array | undefined; -}; diff --git a/packages/recommend/model/recommendSearchParams.ts b/packages/recommend/model/recommendSearchParams.ts deleted file mode 100644 index 660e1547f..000000000 --- a/packages/recommend/model/recommendSearchParams.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 & - Record; diff --git a/packages/recommend/model/recommendUpdatedAtResponse.ts b/packages/recommend/model/recommendUpdatedAtResponse.ts deleted file mode 100644 index 47dcfcce5..000000000 --- a/packages/recommend/model/recommendUpdatedAtResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by 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](https://www.algolia.com/doc/rest-api/search/get-task) and this task ID. - */ - 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 deleted file mode 100644 index 7873cd3f7..000000000 --- a/packages/recommend/model/recommendationsHit.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 832b0acc6..000000000 --- a/packages/recommend/model/recommendationsHits.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index bf204d340..000000000 --- a/packages/recommend/model/recommendationsRequest.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index c9145a4b8..000000000 --- a/packages/recommend/model/recommendationsResults.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index dfa9312a3..000000000 --- a/packages/recommend/model/redirect.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/recommend/model/redirectRuleIndexData.ts b/packages/recommend/model/redirectRuleIndexData.ts deleted file mode 100644 index fbb7ea140..000000000 --- a/packages/recommend/model/redirectRuleIndexData.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 33802fc69..000000000 --- a/packages/recommend/model/redirectRuleIndexMetadata.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 58725edd4..000000000 --- a/packages/recommend/model/redirectURL.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/recommend/model/relatedModel.ts b/packages/recommend/model/relatedModel.ts deleted file mode 100644 index 97761da60..000000000 --- a/packages/recommend/model/relatedModel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 4fac33e53..000000000 --- a/packages/recommend/model/relatedProducts.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/recommend/model/relatedQuery.ts b/packages/recommend/model/relatedQuery.ts deleted file mode 100644 index 4a8672a2d..000000000 --- a/packages/recommend/model/relatedQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 0a467cb35..000000000 --- a/packages/recommend/model/removeStopWords.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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. 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 deleted file mode 100644 index 70e1aa5e7..000000000 --- a/packages/recommend/model/removeWordsIfNoResults.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index a10b97d74..000000000 --- a/packages/recommend/model/renderingContent.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - redirect?: RedirectURL | undefined; - - widgets?: Widgets | undefined; -}; diff --git a/packages/recommend/model/ruleMetadata.ts b/packages/recommend/model/ruleMetadata.ts deleted file mode 100644 index 9d7b89f53..000000000 --- a/packages/recommend/model/ruleMetadata.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/recommend/model/searchPagination.ts b/packages/recommend/model/searchPagination.ts deleted file mode 100644 index fa39f783f..000000000 --- a/packages/recommend/model/searchPagination.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Number of results (hits). - */ - nbHits?: number | undefined; - - /** - * Number of pages of results. - */ - nbPages?: number | undefined; - - /** - * Number of hits per page. - */ - hitsPerPage?: number | undefined; -}; diff --git a/packages/recommend/model/searchParamsQuery.ts b/packages/recommend/model/searchParamsQuery.ts deleted file mode 100644 index ffa28bb14..000000000 --- a/packages/recommend/model/searchParamsQuery.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by 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 | undefined; -}; diff --git a/packages/recommend/model/searchRecommendRulesParams.ts b/packages/recommend/model/searchRecommendRulesParams.ts deleted file mode 100644 index 3726916e3..000000000 --- a/packages/recommend/model/searchRecommendRulesParams.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * Only search for rules with matching context. - */ - context?: string | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * 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 | undefined; - - /** - * Filter expression. This only searches for rules matching the filter expression. - */ - filters?: string | undefined; - - /** - * Include facets and facet values in the response. Use `[\'*\']` to include all facets. - */ - facets?: Array | undefined; - - /** - * Maximum number of values to return for each facet. - */ - maxValuesPerFacet?: number | undefined; -}; diff --git a/packages/recommend/model/searchRecommendRulesResponse.ts b/packages/recommend/model/searchRecommendRulesResponse.ts deleted file mode 100644 index b6edf243e..000000000 --- a/packages/recommend/model/searchRecommendRulesResponse.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 0d9abff48..000000000 --- a/packages/recommend/model/snippetResult.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index daab65f2d..000000000 --- a/packages/recommend/model/snippetResultOption.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index 85fc5bd88..000000000 --- a/packages/recommend/model/sortRemainingBy.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 85f2111cc..000000000 --- a/packages/recommend/model/supportedLanguage.ts +++ /dev/null @@ -1,74 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index b13f801cf..000000000 --- a/packages/recommend/model/tagFilters.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 5b312a99c..000000000 --- a/packages/recommend/model/taskStatus.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index ca2ed7b81..000000000 --- a/packages/recommend/model/timeRange.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by 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 = { - /** - * Timestamp when the rule should start to be active, measured in seconds since the Unix epoch. - */ - from?: number | undefined; - - /** - * Timestamp when the rule should stop to be active, measured in seconds since the Unix epoch. - */ - until?: number | undefined; -}; diff --git a/packages/recommend/model/trendingFacetHit.ts b/packages/recommend/model/trendingFacetHit.ts deleted file mode 100644 index 2830686c6..000000000 --- a/packages/recommend/model/trendingFacetHit.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Code generated by 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 | undefined; - - /** - * 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 deleted file mode 100644 index a3c9d144d..000000000 --- a/packages/recommend/model/trendingFacets.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { TrendingFacetsModel } from './trendingFacetsModel'; - -export type TrendingFacets = { - /** - * 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 | undefined; - - /** - * Facet attribute for which to retrieve trending facet values. - */ - facetName: string; - - model: TrendingFacetsModel; -}; diff --git a/packages/recommend/model/trendingFacetsModel.ts b/packages/recommend/model/trendingFacetsModel.ts deleted file mode 100644 index 424bd0bc2..000000000 --- a/packages/recommend/model/trendingFacetsModel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index a984ab664..000000000 --- a/packages/recommend/model/trendingFacetsQuery.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { TrendingFacets } from './trendingFacets'; - -export type TrendingFacetsQuery = TrendingFacets; diff --git a/packages/recommend/model/trendingItems.ts b/packages/recommend/model/trendingItems.ts deleted file mode 100644 index af7de952f..000000000 --- a/packages/recommend/model/trendingItems.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - /** - * Facet value. To be used in combination with `facetName`. If specified, only recommendations matching the facet filter will be returned. - */ - facetValue?: string | undefined; - - model: TrendingItemsModel; - - fallbackParameters?: FallbackParams | undefined; -}; diff --git a/packages/recommend/model/trendingItemsModel.ts b/packages/recommend/model/trendingItemsModel.ts deleted file mode 100644 index 79bd4740e..000000000 --- a/packages/recommend/model/trendingItemsModel.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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 deleted file mode 100644 index 86740e4bb..000000000 --- a/packages/recommend/model/trendingItemsQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index c825bee3b..000000000 --- a/packages/recommend/model/typoTolerance.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by OpenAPI Generator (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 deleted file mode 100644 index fd97a0ed0..000000000 --- a/packages/recommend/model/typoToleranceEnum.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by 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' | 'true' | 'false'; diff --git a/packages/recommend/model/value.ts b/packages/recommend/model/value.ts deleted file mode 100644 index d8c72bc53..000000000 --- a/packages/recommend/model/value.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; - - sortRemainingBy?: SortRemainingBy | undefined; - - /** - * Hide facet values. - */ - hide?: Array | undefined; -}; diff --git a/packages/recommend/model/widgets.ts b/packages/recommend/model/widgets.ts deleted file mode 100644 index 12fe2bf4f..000000000 --- a/packages/recommend/model/widgets.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by OpenAPI Generator (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 | undefined; -}; diff --git a/packages/recommend/package.json b/packages/recommend/package.json index dcd6e42c4..8854c7a68 100644 --- a/packages/recommend/package.json +++ b/packages/recommend/package.json @@ -1,73 +1,37 @@ { - "version": "5.56.0", + "name": "@algolia/recommend", + "version": "4.17.2", + "private": false, + "description": "The perfect starting point to integrate Algolia Recommend within your JavaScript project.", "repository": { "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git://github.com/algolia/algoliasearch-client-javascript.git" }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript/tree/main/packages/recommend#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/recommend", - "description": "JavaScript client for recommend", - "exports": { - ".": { - "react-native": { - "types": "./dist/browser.d.ts", - "default": "./dist/builds/browser.js" - }, - "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", - "./dist/builds/*.js": "./dist/builds/*.js" + "sideEffects": false, + "main": "index.js", + "jsdelivr": "./dist/recommend.umd.js", + "unpkg": "./dist/recommend.umd.js", + "browser": { + "./index.js": "./dist/recommend.umd.js" }, - "jsdelivr": "./dist/builds/browser.umd.js", - "unpkg": "./dist/builds/browser.umd.js", - "react-native": "./dist/builds/browser.js", + "types": "index.d.ts", "files": [ "dist", "index.js", "index.d.ts" ], "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "26.1.2", - "publint": "0.3.22", - "rollup": "4.62.4", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" + "@algolia/cache-browser-local-storage": "4.17.2", + "@algolia/cache-common": "4.17.2", + "@algolia/cache-in-memory": "4.17.2", + "@algolia/client-common": "4.17.2", + "@algolia/client-search": "4.17.2", + "@algolia/logger-common": "4.17.2", + "@algolia/logger-console": "4.17.2", + "@algolia/requester-browser-xhr": "4.17.2", + "@algolia/requester-common": "4.17.2", + "@algolia/requester-node-http": "4.17.2", + "@algolia/transporter": "4.17.2" } } diff --git a/packages/recommend/rollup.config.js b/packages/recommend/rollup.config.js deleted file mode 100644 index 55cd3150f..000000000 --- a/packages/recommend/rollup.config.js +++ /dev/null @@ -1,17 +0,0 @@ -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 new file mode 100644 index 000000000..4d44fb67c --- /dev/null +++ b/packages/recommend/src/__tests__/getFrequentlyBoughtTogether.test.ts @@ -0,0 +1,81 @@ +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 new file mode 100644 index 000000000..b9c0f4d16 --- /dev/null +++ b/packages/recommend/src/__tests__/getRecommendations.test.ts @@ -0,0 +1,200 @@ +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 new file mode 100644 index 000000000..7c4deb1d4 --- /dev/null +++ b/packages/recommend/src/__tests__/getRelatedProducts.test.ts @@ -0,0 +1,46 @@ +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 new file mode 100644 index 000000000..69a13f2cb --- /dev/null +++ b/packages/recommend/src/__tests__/getTrendingFacets.test.ts @@ -0,0 +1,46 @@ +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 new file mode 100644 index 000000000..03dfcd294 --- /dev/null +++ b/packages/recommend/src/__tests__/getTrendingItems.test.ts @@ -0,0 +1,44 @@ +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 new file mode 100644 index 000000000..d3798a54d --- /dev/null +++ b/packages/recommend/src/__tests__/recommend-client.test.ts @@ -0,0 +1,179 @@ +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 new file mode 100644 index 000000000..60db69674 --- /dev/null +++ b/packages/recommend/src/builds/browser.ts @@ -0,0 +1,67 @@ +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 new file mode 100644 index 000000000..b7646c384 --- /dev/null +++ b/packages/recommend/src/builds/node.ts @@ -0,0 +1,61 @@ +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 new file mode 100644 index 000000000..309dfdb9f --- /dev/null +++ b/packages/recommend/src/createRecommendClient.ts @@ -0,0 +1,64 @@ +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 new file mode 100644 index 000000000..98d771d13 --- /dev/null +++ b/packages/recommend/src/index.ts @@ -0,0 +1,7 @@ +/** + * @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 new file mode 100644 index 000000000..6ffa0cac2 --- /dev/null +++ b/packages/recommend/src/methods/getFrequentlyBoughtTogether.ts @@ -0,0 +1,19 @@ +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 new file mode 100644 index 000000000..5f57595f4 --- /dev/null +++ b/packages/recommend/src/methods/getRecommendations.ts @@ -0,0 +1,32 @@ +import { MethodEnum } from '@algolia/requester-common'; + +import { BaseRecommendClient, RecommendationsQuery, WithRecommendMethods } from '../types'; +import { TrendingQuery } from '../types/TrendingQuery'; + +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 new file mode 100644 index 000000000..456f632d6 --- /dev/null +++ b/packages/recommend/src/methods/getRelatedProducts.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..0bf3b279e --- /dev/null +++ b/packages/recommend/src/methods/getTrendingFacets.ts @@ -0,0 +1,32 @@ +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 new file mode 100644 index 000000000..fb1610dc2 --- /dev/null +++ b/packages/recommend/src/methods/getTrendingItems.ts @@ -0,0 +1,32 @@ +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 new file mode 100644 index 000000000..e30466cc0 --- /dev/null +++ b/packages/recommend/src/methods/index.ts @@ -0,0 +1,9 @@ +/** + * @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 deleted file mode 100644 index 2c11713e9..000000000 --- a/packages/recommend/src/recommendClient.ts +++ /dev/null @@ -1,853 +0,0 @@ -// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. - -import type { - AlgoliaHttpResponse, - CreateClientOptions, - Headers, - Host, - QueryParameters, - Request, - RequestOptions, -} from '@algolia/client-common'; -import { createAuth, createTransporter, getAlgoliaAgent, shuffle, validateRequired } 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.56.0'; - -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 | undefined): 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 { - validateRequired('indexName', 'batchRecommendRules', indexName); - - validateRequired('model', 'batchRecommendRules', model); - - 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); - }, - /** - * 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). - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see batchRecommendRules for the plain version. - */ - batchRecommendRulesWithHTTPInfo( - { indexName, model, recommendRule }: BatchRecommendRulesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'batchRecommendRulesWithHTTPInfo', indexName); - - validateRequired('model', 'batchRecommendRulesWithHTTPInfo', model); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customDelete', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customDelete - The customDelete object. - * @param customDelete.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customDelete for the plain version. - */ - customDeleteWithHTTPInfo( - { path, parameters }: CustomDeleteProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customDeleteWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customGet', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customGet - The customGet object. - * @param customGet.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customGet for the plain version. - */ - customGetWithHTTPInfo( - { path, parameters }: CustomGetProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customGetWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPost', path); - - 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPost - The customPost object. - * @param customPost.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPost for the plain version. - */ - customPostWithHTTPInfo( - { path, parameters, body }: CustomPostProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPostWithHTTPInfo', path); - - 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.requestWithHttpInfo(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, for example `1/newFeature`. - * @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> { - validateRequired('path', 'customPut', path); - - 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); - }, - /** - * This method lets you send requests to the Algolia REST API. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * @param customPut - The customPut object. - * @param customPut.path - Path of the endpoint, for example `1/newFeature`. - * @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. - * @see customPut for the plain version. - */ - customPutWithHTTPInfo( - { path, parameters, body }: CustomPutProps, - requestOptions?: RequestOptions, - ): Promise>> { - validateRequired('path', 'customPutWithHTTPInfo', path); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'deleteRecommendRule', indexName); - - validateRequired('model', 'deleteRecommendRule', model); - - validateRequired('objectID', 'deleteRecommendRule', objectID); - - 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); - }, - /** - * Deletes a Recommend rule from a recommendation scenario. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see deleteRecommendRule for the plain version. - */ - deleteRecommendRuleWithHTTPInfo( - { indexName, model, objectID }: DeleteRecommendRuleProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'deleteRecommendRuleWithHTTPInfo', indexName); - - validateRequired('model', 'deleteRecommendRuleWithHTTPInfo', model); - - validateRequired('objectID', 'deleteRecommendRuleWithHTTPInfo', objectID); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'getRecommendRule', indexName); - - validateRequired('model', 'getRecommendRule', model); - - validateRequired('objectID', 'getRecommendRule', objectID); - - 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); - }, - /** - * Retrieves a Recommend rule that you previously created in the Algolia dashboard. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getRecommendRule for the plain version. - */ - getRecommendRuleWithHTTPInfo( - { indexName, model, objectID }: GetRecommendRuleProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'getRecommendRuleWithHTTPInfo', indexName); - - validateRequired('model', 'getRecommendRuleWithHTTPInfo', model); - - validateRequired('objectID', 'getRecommendRuleWithHTTPInfo', objectID); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'getRecommendStatus', indexName); - - validateRequired('model', 'getRecommendStatus', model); - - validateRequired('taskID', 'getRecommendStatus', taskID); - - 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); - }, - /** - * 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. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getRecommendStatus for the plain version. - */ - getRecommendStatusWithHTTPInfo( - { indexName, model, taskID }: GetRecommendStatusProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'getRecommendStatusWithHTTPInfo', indexName); - - validateRequired('model', 'getRecommendStatusWithHTTPInfo', model); - - validateRequired('taskID', 'getRecommendStatusWithHTTPInfo', taskID); - - 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.requestWithHttpInfo(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; - } - - validateRequired('getRecommendationsParams', 'getRecommendations', getRecommendationsParams); - - validateRequired('getRecommendationsParams.requests', 'getRecommendations', getRecommendationsParams.requests); - - 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); - }, - /** - * Retrieves recommendations from selected AI models. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see getRecommendations for the plain version. - */ - getRecommendationsWithHTTPInfo( - getRecommendationsParams: GetRecommendationsParams | LegacyGetRecommendationsParams, - requestOptions?: RequestOptions, - ): Promise> { - if (getRecommendationsParams && Array.isArray(getRecommendationsParams)) { - const newSignatureRequest: GetRecommendationsParams = { - requests: getRecommendationsParams, - }; - - getRecommendationsParams = newSignatureRequest; - } - - validateRequired('getRecommendationsParams', 'getRecommendationsWithHTTPInfo', getRecommendationsParams); - - validateRequired( - 'getRecommendationsParams.requests', - 'getRecommendationsWithHTTPInfo', - getRecommendationsParams.requests, - ); - - 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.requestWithHttpInfo(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 { - validateRequired('indexName', 'searchRecommendRules', indexName); - - validateRequired('model', 'searchRecommendRules', model); - - 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); - }, - /** - * Searches for Recommend rules. Use an empty query to list all rules for this recommendation scenario. - * - * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call. - * - * 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. - * @see searchRecommendRules for the plain version. - */ - searchRecommendRulesWithHTTPInfo( - { indexName, model, searchRecommendRulesParams }: SearchRecommendRulesProps, - requestOptions?: RequestOptions, - ): Promise> { - validateRequired('indexName', 'searchRecommendRulesWithHTTPInfo', indexName); - - validateRequired('model', 'searchRecommendRulesWithHTTPInfo', model); - - 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.requestWithHttpInfo(request, requestOptions); - }, - }; -} diff --git a/packages/recommend/src/types/BaseRecommendClient.ts b/packages/recommend/src/types/BaseRecommendClient.ts new file mode 100644 index 000000000..dda485250 --- /dev/null +++ b/packages/recommend/src/types/BaseRecommendClient.ts @@ -0,0 +1,23 @@ +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 new file mode 100644 index 000000000..829abd2a8 --- /dev/null +++ b/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..a493f7846 --- /dev/null +++ b/packages/recommend/src/types/RecommendClientOptions.ts @@ -0,0 +1,19 @@ +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 new file mode 100644 index 000000000..e4c5d42fc --- /dev/null +++ b/packages/recommend/src/types/RecommendModel.ts @@ -0,0 +1,2 @@ +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 new file mode 100644 index 000000000..b37634837 --- /dev/null +++ b/packages/recommend/src/types/RecommendOptions.ts @@ -0,0 +1,3 @@ +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 new file mode 100644 index 000000000..e14d9ab6c --- /dev/null +++ b/packages/recommend/src/types/RecommendSearchOptions.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..4d269f869 --- /dev/null +++ b/packages/recommend/src/types/RecommendationsQuery.ts @@ -0,0 +1,41 @@ +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 new file mode 100644 index 000000000..d4fa107a5 --- /dev/null +++ b/packages/recommend/src/types/RelatedProductsQuery.ts @@ -0,0 +1,3 @@ +import { RecommendationsQuery } from './RecommendationsQuery'; + +export type RelatedProductsQuery = Omit; diff --git a/packages/recommend/src/types/TrendingFacetsQuery.ts b/packages/recommend/src/types/TrendingFacetsQuery.ts new file mode 100644 index 000000000..399e9fb49 --- /dev/null +++ b/packages/recommend/src/types/TrendingFacetsQuery.ts @@ -0,0 +1,21 @@ +export type TrendingFacetsQuery = { + /** + * The name of the target index. + */ + readonly indexName: 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; + + /** + * The facet attribute to get recommendations for. + */ + readonly facetName: string; +}; diff --git a/packages/recommend/src/types/TrendingItemsQuery.ts b/packages/recommend/src/types/TrendingItemsQuery.ts new file mode 100644 index 000000000..e04633187 --- /dev/null +++ b/packages/recommend/src/types/TrendingItemsQuery.ts @@ -0,0 +1,40 @@ +import { RecommendSearchOptions } from '@algolia/recommend'; + +export type TrendingItemsQuery = { + /** + * The name of the target index. + */ + readonly indexName: 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; + + /** + * The facet attribute to get recommendations for. + */ + readonly facetName?: string; + + /** + * The value of the target facet. + */ + readonly facetValue?: string; +}; diff --git a/packages/recommend/src/types/TrendingQuery.ts b/packages/recommend/src/types/TrendingQuery.ts new file mode 100644 index 000000000..88a2ef217 --- /dev/null +++ b/packages/recommend/src/types/TrendingQuery.ts @@ -0,0 +1,7 @@ +import { TrendingFacetsQuery } from '../types/TrendingFacetsQuery'; +import { TrendingItemsQuery } from '../types/TrendingItemsQuery'; +import { TrendingModel } from './RecommendModel'; + +export type TrendingQuery = + | (TrendingItemsQuery & { readonly model: TrendingModel }) + | (TrendingFacetsQuery & { readonly model: TrendingModel }); diff --git a/packages/recommend/src/types/WithRecommendMethods.ts b/packages/recommend/src/types/WithRecommendMethods.ts new file mode 100644 index 000000000..780fdfb1f --- /dev/null +++ b/packages/recommend/src/types/WithRecommendMethods.ts @@ -0,0 +1,51 @@ +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'; +import { TrendingQuery } from './TrendingQuery'; + +export type WithRecommendMethods = TType & { + /** + * Returns recommendations. + */ + readonly getRecommendations: ( + queries: ReadonlyArray, + 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 new file mode 100644 index 000000000..13cd2aa34 --- /dev/null +++ b/packages/recommend/src/types/index.ts @@ -0,0 +1,16 @@ +/** + * @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 './TrendingItemsQuery'; +export * from './TrendingQuery'; +export * from './WithRecommendMethods'; diff --git a/packages/recommend/tsconfig.json b/packages/recommend/tsconfig.json index 444e8bb64..39df687c5 100644 --- a/packages/recommend/tsconfig.json +++ b/packages/recommend/tsconfig.json @@ -1,8 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "dist" - }, - "include": ["src", "model", "builds"], - "exclude": ["dist", "node_modules"] + "declaration": true, + "noEmit": false, + "allowJs": false, + "emitDeclarationOnly": true, + "outFile": "dist/types.d.ts" + } } diff --git a/packages/recommend/tsup.config.ts b/packages/recommend/tsup.config.ts deleted file mode 100644 index 26e6e4a2e..000000000 --- a/packages/recommend/tsup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -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', - target: 'es2018', - 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 new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/requester-browser-xhr/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 deleted file mode 100644 index 518b9831f..000000000 --- a/packages/requester-browser-xhr/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/requester.xhr'; diff --git a/packages/requester-browser-xhr/index.js b/packages/requester-browser-xhr/index.js index c92f673cb..bc56b3262 100644 --- a/packages/requester-browser-xhr/index.js +++ b/packages/requester-browser-xhr/index.js @@ -1 +1,2 @@ -module.exports = require('./dist/requester.xhr.js'); +// eslint-disable-next-line functional/immutable-data, import/no-commonjs +module.exports = require('./dist/requester-browser-xhr.cjs.js'); diff --git a/packages/requester-browser-xhr/package.json b/packages/requester-browser-xhr/package.json index 9c4958274..42ac9461c 100644 --- a/packages/requester-browser-xhr/package.json +++ b/packages/requester-browser-xhr/package.json @@ -1,50 +1,22 @@ { "name": "@algolia/requester-browser-xhr", - "version": "5.56.0", + "version": "4.17.2", + "private": false, "description": "Promise-based request library for browser using xhr.", "repository": { "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git://github.com/algolia/algoliasearch-client-javascript.git" }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript#readme", "license": "MIT", - "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", + "sideEffects": false, + "main": "index.js", + "module": "dist/requester-browser-xhr.esm.js", + "types": "dist/requester-browser-xhr.d.ts", "files": [ - "dist", - "index.d.ts", - "index.js" + "index.js", + "dist" ], - "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/client-common": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "24.13.3", - "jsdom": "30.0.1", - "publint": "0.3.22", - "tsup": "8.5.1", - "typescript": "5.9.3", - "vitest": "4.1.10", - "xhr-mock": "2.5.1" - }, - "engines": { - "node": ">= 14.0.0" + "@algolia/requester-common": "4.17.2" } } 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 deleted file mode 100644 index 188619874..000000000 --- a/packages/requester-browser-xhr/src/__tests__/browser-xhr-requester.test.ts +++ /dev/null @@ -1,229 +0,0 @@ -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 new file mode 100644 index 000000000..afc3c0a16 --- /dev/null +++ b/packages/requester-browser-xhr/src/__tests__/unit/browser-xhr-requester.test.ts @@ -0,0 +1,226 @@ +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 new file mode 100644 index 000000000..94911dc0b --- /dev/null +++ b/packages/requester-browser-xhr/src/createBrowserXhrRequester.ts @@ -0,0 +1,71 @@ +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 deleted file mode 100644 index b728938fd..000000000 --- a/packages/requester-browser-xhr/src/createXhrRequester.ts +++ /dev/null @@ -1,81 +0,0 @@ -import type { EndRequest, Requester, Response } from '@algolia/client-common'; - -type Timeout = ReturnType; - -function parseResponseHeaders(rawHeaders: string): Record { - const headers: Record = {}; - - for (const line of rawHeaders.trim().split(/[\r\n]+/)) { - const separatorIndex = line.indexOf(': '); - if (separatorIndex > 0) { - headers[line.slice(0, separatorIndex).toLowerCase()] = line.slice(separatorIndex + 2); - } - } - - return headers; -} - -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, - headers: parseResponseHeaders(baseRequester.getAllResponseHeaders()), - status: baseRequester.status, - isTimedOut: false, - }); - }; - - baseRequester.send(request.data as XMLHttpRequestBodyInit | null | undefined); - }); - } - - return { send }; -} diff --git a/packages/requester-browser-xhr/src/index.ts b/packages/requester-browser-xhr/src/index.ts index 326e279e7..8655e57e6 100644 --- a/packages/requester-browser-xhr/src/index.ts +++ b/packages/requester-browser-xhr/src/index.ts @@ -1 +1,5 @@ -export * from './createXhrRequester'; +/** + * @file Automatically generated by barrelsby. + */ + +export * from './createBrowserXhrRequester'; diff --git a/packages/requester-browser-xhr/tsconfig.json b/packages/requester-browser-xhr/tsconfig.json deleted file mode 100644 index f6efa8845..000000000 --- a/packages/requester-browser-xhr/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "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 deleted file mode 100644 index f1c04700b..000000000 --- a/packages/requester-browser-xhr/tsup.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -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 deleted file mode 100644 index f5a90d06c..000000000 --- a/packages/requester-browser-xhr/vitest.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -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 new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/requester-common/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 000000000..0ced494c4 --- /dev/null +++ b/packages/requester-common/index.js @@ -0,0 +1,2 @@ +// 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 new file mode 100644 index 000000000..a963b7f5e --- /dev/null +++ b/packages/requester-common/package.json @@ -0,0 +1,19 @@ +{ + "name": "@algolia/requester-common", + "version": "4.17.2", + "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 new file mode 100644 index 000000000..e067cd20c --- /dev/null +++ b/packages/requester-common/src/index.ts @@ -0,0 +1,5 @@ +/** + * @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 new file mode 100644 index 000000000..010b30f45 --- /dev/null +++ b/packages/requester-common/src/types/Destroyable.ts @@ -0,0 +1,10 @@ +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 new file mode 100644 index 000000000..325cf39c5 --- /dev/null +++ b/packages/requester-common/src/types/MethodType.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..45f75178d --- /dev/null +++ b/packages/requester-common/src/types/Request.ts @@ -0,0 +1,33 @@ +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 new file mode 100644 index 000000000..81c2c988b --- /dev/null +++ b/packages/requester-common/src/types/Requester.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..963a9741c --- /dev/null +++ b/packages/requester-common/src/types/Response.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..6da17b597 --- /dev/null +++ b/packages/requester-common/src/types/index.ts @@ -0,0 +1,9 @@ +/** + * @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/api-extractor.json b/packages/requester-fetch/api-extractor.json new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/requester-fetch/api-extractor.json @@ -0,0 +1,7 @@ +{ + "extends": "../../api-extractor.json", + "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", + "dtsRollup": { + "untrimmedFilePath": "./dist/.d.ts" + } +} diff --git a/packages/requester-fetch/index.d.ts b/packages/requester-fetch/index.d.ts deleted file mode 100644 index d4b08a1a7..000000000 --- a/packages/requester-fetch/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/requester.fetch.node'; diff --git a/packages/requester-fetch/index.js b/packages/requester-fetch/index.js index 97fd6d402..3ea51a8c5 100644 --- a/packages/requester-fetch/index.js +++ b/packages/requester-fetch/index.js @@ -1 +1,2 @@ -module.exports = require('./dist/requester.fetch.node.cjs'); +// eslint-disable-next-line functional/immutable-data, import/no-commonjs +module.exports = require('./dist/requester-fetch.cjs.js'); diff --git a/packages/requester-fetch/package.json b/packages/requester-fetch/package.json index 34e1b29bb..ddb7163bf 100644 --- a/packages/requester-fetch/package.json +++ b/packages/requester-fetch/package.json @@ -1,66 +1,22 @@ { "name": "@algolia/requester-fetch", - "version": "5.56.0", - "description": "Promise-based request library using Fetch.", + "version": "4.17.2", + "private": false, + "description": "Promise-based request library for Fetch.", "repository": { "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git://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", + "sideEffects": false, + "main": "index.js", + "module": "dist/requester-fetch.esm.js", + "types": "dist/requester-fetch.d.ts", "files": [ - "dist", - "index.d.ts", - "index.js" + "index.js", + "dist" ], - "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.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "24.13.3", - "cross-fetch": "4.1.0", - "nock": "14.0.16", - "publint": "0.3.22", - "tsup": "8.5.1", - "typescript": "5.9.3", - "vitest": "4.1.10" - }, - "engines": { - "node": ">= 14.0.0" + "@algolia/requester-common": "4.17.2" } } diff --git a/packages/requester-fetch/src/__tests__/fetch-requester.test.ts b/packages/requester-fetch/src/__tests__/fetch-requester.test.ts deleted file mode 100644 index 91be2e6aa..000000000 --- a/packages/requester-fetch/src/__tests__/fetch-requester.test.ts +++ /dev/null @@ -1,278 +0,0 @@ -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/__tests__/unit/fetch-requester.test.ts b/packages/requester-fetch/src/__tests__/unit/fetch-requester.test.ts new file mode 100644 index 000000000..b4b64f3f1 --- /dev/null +++ b/packages/requester-fetch/src/__tests__/unit/fetch-requester.test.ts @@ -0,0 +1,270 @@ +import { MethodEnum, Request } from '@algolia/requester-common'; +import crossFetch from 'cross-fetch'; +import nock from 'nock'; +// @ts-ignore +import { Readable } from 'readable-stream'; + +import { createFetchRequester } from '../..'; + +const originalFetch = window.fetch; + +beforeEach(() => { + window.fetch = crossFetch; +}); + +afterEach(() => { + window.fetch = originalFetch; +}); + +const requester = createFetchRequester(); + +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); + }); +}); + +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( + 'request to https://algolia-dns.net/foo?x-algolia-header=foo failed, reason: 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 = createFetchRequester({ + 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-fetch/src/createFetchRequester.ts b/packages/requester-fetch/src/createFetchRequester.ts index 547c09744..3489505f7 100644 --- a/packages/requester-fetch/src/createFetchRequester.ts +++ b/packages/requester-fetch/src/createFetchRequester.ts @@ -1,4 +1,4 @@ -import type { Response as AlgoliaResponse, EndRequest, Requester } from '@algolia/client-common'; +import { Request, Requester, Response as AlgoliaResponse } from '@algolia/requester-common'; function isAbortError(error: unknown): boolean { return error instanceof Error && error.name === 'AbortError'; @@ -7,97 +7,74 @@ function isAbortError(error: unknown): boolean { function getErrorMessage(error: unknown, abortContent: string): string { if (isAbortError(error)) { return abortContent; + } else { + return error instanceof Error ? error.message : 'Network request failed'; } - return error instanceof Error ? error.message : 'Network request failed'; } export type FetchRequesterOptions = { - readonly requesterOptions?: RequestInit | undefined; + 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 as BodyInit) || 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(); - const headers: Record = {}; - fetchRes.headers.forEach((value, name) => { - headers[name] = value; - }); - - return { - content, - headers, - isTimedOut: false, - status: fetchRes.status, +export function createFetchRequester({ + requesterOptions = {}, +}: FetchRequesterOptions = {}): Requester { + return { + async send(request: Request): Promise> { + const abortController = new AbortController(); + const signal = abortController.signal; + + const createTimeout = (timeout: number): NodeJS.Timeout => { + return setTimeout(() => { + abortController.abort(); + }, timeout * 1000); }; - } catch (error) { - return { - status: 0, - content: getErrorMessage(error, 'Socket timeout'), - isTimedOut: isAbortError(error), - }; - } - } - - async function sendStream(request: EndRequest): Promise> { - const fetchRes = await fetch(request.url, { - method: request.method, - body: (request.data as BodyInit) || null, - redirect: 'manual', - ...requesterOptions, - headers: { - ...requesterOptions.headers, - ...request.headers, - }, - }); - - if (!fetchRes.ok) { - const text = await fetchRes.text(); - throw new Error(`HTTP ${fetchRes.status}: ${text}`); - } - - if (fetchRes.body === null) { - throw new Error('Response body is null — streaming not supported'); - } - - return fetchRes.body; - } - return { send, sendStream }; + const connectTimeout = createTimeout(request.connectTimeout); + + // eslint-disable-next-line functional/no-let + let fetchRes: Response; + // eslint-disable-next-line functional/no-try-statement + try { + fetchRes = await fetch(request.url, { + ...requesterOptions, + method: request.method, + headers: { + ...(requesterOptions.headers || {}), + ...request.headers, + }, + body: request.data || null, + redirect: 'manual', + signal, + }); + } catch (error) { + return { + status: 0, + content: getErrorMessage(error, 'Connection timeout'), + isTimedOut: isAbortError(error), + }; + } + + clearTimeout(connectTimeout); + + createTimeout(request.responseTimeout); + + // eslint-disable-next-line functional/no-try-statement + 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), + }; + } + }, + }; } diff --git a/packages/requester-fetch/src/index.ts b/packages/requester-fetch/src/index.ts index 7d1445702..6eaed90a6 100644 --- a/packages/requester-fetch/src/index.ts +++ b/packages/requester-fetch/src/index.ts @@ -1 +1,5 @@ +/** + * @file Automatically generated by barrelsby. + */ + export * from './createFetchRequester'; diff --git a/packages/requester-fetch/tsconfig.json b/packages/requester-fetch/tsconfig.json deleted file mode 100644 index f6efa8845..000000000 --- a/packages/requester-fetch/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "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 deleted file mode 100644 index 1a3c5f219..000000000 --- a/packages/requester-fetch/tsup.config.ts +++ /dev/null @@ -1,30 +0,0 @@ -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, 'http', 'es2018'), - 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 deleted file mode 100644 index f5a90d06c..000000000 --- a/packages/requester-fetch/vitest.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -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 new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/requester-node-http/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 deleted file mode 100644 index 90aa3b2c6..000000000 --- a/packages/requester-node-http/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/requester.http'; diff --git a/packages/requester-node-http/index.js b/packages/requester-node-http/index.js index 2f27540e5..fb864517c 100644 --- a/packages/requester-node-http/index.js +++ b/packages/requester-node-http/index.js @@ -1 +1,2 @@ -module.exports = require('./dist/requester.http.cjs'); +// eslint-disable-next-line functional/immutable-data, import/no-commonjs +module.exports = require('./dist/requester-node-http.cjs.js'); diff --git a/packages/requester-node-http/package.json b/packages/requester-node-http/package.json index 63792ced0..2613881d5 100644 --- a/packages/requester-node-http/package.json +++ b/packages/requester-node-http/package.json @@ -1,52 +1,22 @@ { "name": "@algolia/requester-node-http", - "version": "5.56.0", + "version": "4.17.2", + "private": false, "description": "Promise-based request library for node using the native http module.", "repository": { "type": "git", - "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git://github.com/algolia/algoliasearch-client-javascript.git" }, - "homepage": "https://github.com/algolia/algoliasearch-client-javascript#readme", "license": "MIT", - "author": "Algolia", - "type": "module", + "sideEffects": false, + "main": "index.js", + "module": "dist/requester-node-http.esm.js", + "types": "dist/requester-node-http.d.ts", "files": [ - "dist", - "index.d.ts", - "index.js" + "index.js", + "dist" ], - "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/client-common": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "24.13.3", - "nock": "14.0.16", - "publint": "0.3.22", - "tsup": "8.5.1", - "typescript": "5.9.3", - "vitest": "4.1.10" - }, - "engines": { - "node": ">= 14.0.0" + "@algolia/requester-common": "4.17.2" } } 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 deleted file mode 100644 index 123cfcb81..000000000 --- a/packages/requester-node-http/src/__tests__/node-http-requester.test.ts +++ /dev/null @@ -1,321 +0,0 @@ -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); - }); - - test('resolves response stream errors', async () => { - nock(testQueryBaseUrl, { reqheaders: headers }) - .post('/foo') - .query(testQueryHeader) - .replyWithError('This is a response stream error'); - - const response = await requester.send(requestStub); - - expect(response.status).toBe(0); - expect(response.content).toBe('This is a response stream error'); - expect(response.isTimedOut).toBe(false); - }); -}); - -describe('response stream error handling', () => { - let server: http.Server; - - beforeAll(() => { - server = createTestServer(); - server.listen('1114'); - }); - - afterAll( - () => - new Promise((done) => { - done(); - }), - ); - - test('resolves response stream errors when connection drops mid-transfer', async () => { - const response = await requester.send({ - ...timeoutRequest, - url: 'http://localhost:1114/response_stream_error', - }); - - expect(response.status).toBe(0); - expect(response.content).toBeTruthy(); - 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 new file mode 100644 index 000000000..6314689b6 --- /dev/null +++ b/packages/requester-node-http/src/__tests__/unit/node-http-requester.test.ts @@ -0,0 +1,281 @@ +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 deleted file mode 100644 index 7cd5ca843..000000000 --- a/packages/requester-node-http/src/createHttpRequester.ts +++ /dev/null @@ -1,192 +0,0 @@ -import http from 'http'; -import https from 'https'; -import { Readable } from 'stream'; -import { URL } from 'url'; -import zlib from 'zlib'; - -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); - -function toResponseHeaders(incomingHeaders: http.IncomingHttpHeaders): Record { - const headers: Record = {}; - - for (const [name, value] of Object.entries(incomingHeaders)) { - if (value !== undefined) { - headers[name] = Array.isArray(value) ? value.join(', ') : value; - } - } - - return headers; -} - -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 privateHeaders: Record = { - 'accept-encoding': 'gzip', - }; - - if (request.data !== undefined && request.method === 'DELETE') { - privateHeaders['content-length'] = String( - typeof request.data === 'string' ? Buffer.byteLength(request.data) : (request.data as Uint8Array).byteLength, - ); - } - - const options: https.RequestOptions = { - agent: url.protocol === 'https:' ? httpsAgent : httpAgent, - hostname: url.hostname, - path, - method: request.method, - ...requesterOptions, - headers: { - ...privateHeaders, - ...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); - - let buffer = Buffer.concat(contentBuffers); - if (response.headers['content-encoding'] === 'gzip') { - buffer = zlib.gunzipSync(buffer); - } - - resolve({ - status: response.statusCode || 0, - content: buffer.toString(), - headers: toResponseHeaders(response.headers), - isTimedOut: false, - }); - }); - - response.on('error', (error) => { - clearTimeout(connectTimeout as NodeJS.Timeout); - clearTimeout(responseTimeout as NodeJS.Timeout); - resolve({ status: 0, content: error.message, 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(); - }); - } - - function sendStream(request: EndRequest): Promise> { - return new Promise((resolve, reject) => { - 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) => { - const statusCode = response.statusCode || 0; - - if (statusCode < 200 || statusCode >= 300) { - let body = ''; - response.on('data', (chunk) => { - body += chunk; - }); - response.on('end', () => { - reject(new Error(`HTTP ${statusCode}: ${body}`)); - }); - return; - } - - resolve(Readable.toWeb(response) as ReadableStream); - }); - - req.on('error', (error) => { - reject(error); - }); - - if (request.data !== undefined) { - req.write(request.data); - } - - req.end(); - }); - } - - return { send, sendStream }; -} diff --git a/packages/requester-node-http/src/createNodeHttpRequester.ts b/packages/requester-node-http/src/createNodeHttpRequester.ts new file mode 100644 index 000000000..ec3e66b00 --- /dev/null +++ b/packages/requester-node-http/src/createNodeHttpRequester.ts @@ -0,0 +1,114 @@ +/* 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 4c4838f49..c5982c330 100644 --- a/packages/requester-node-http/src/index.ts +++ b/packages/requester-node-http/src/index.ts @@ -1 +1,5 @@ -export * from './createHttpRequester'; +/** + * @file Automatically generated by barrelsby. + */ + +export * from './createNodeHttpRequester'; diff --git a/packages/requester-node-http/tsconfig.json b/packages/requester-node-http/tsconfig.json deleted file mode 100644 index f6efa8845..000000000 --- a/packages/requester-node-http/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "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 deleted file mode 100644 index 97a3b8e11..000000000 --- a/packages/requester-node-http/tsup.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineConfig } from 'tsup'; - -import { getBaseNodeOptions } from '../../base.tsup.config'; - -import pkg from './package.json' with { type: 'json' }; - -export default defineConfig([ - { - ...getBaseNodeOptions(pkg, __dirname, 'http', 'es2018'), - 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 deleted file mode 100644 index d09e4d203..000000000 --- a/packages/requester-node-http/vitest.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index e81a1cd3e..000000000 --- a/packages/requester-testing/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/node'; diff --git a/packages/requester-testing/index.js b/packages/requester-testing/index.js deleted file mode 100644 index 4a9cdb9ef..000000000 --- a/packages/requester-testing/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/node.cjs'); diff --git a/packages/requester-testing/package.json b/packages/requester-testing/package.json deleted file mode 100644 index bda971cda..000000000 --- a/packages/requester-testing/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "@algolia/requester-testing", - "version": "5.56.0", - "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.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" - }, - "devDependencies": { - "@arethetypeswrong/cli": "0.18.5", - "@types/node": "24.13.3", - "publint": "0.3.22", - "tsup": "8.5.1", - "typescript": "5.9.3" - }, - "engines": { - "node": ">= 14.0.0" - } -} diff --git a/packages/requester-testing/src/browserEchoRequester.ts b/packages/requester-testing/src/browserEchoRequester.ts deleted file mode 100644 index fb03c8bce..000000000 --- a/packages/requester-testing/src/browserEchoRequester.ts +++ /dev/null @@ -1,9 +0,0 @@ -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 deleted file mode 100644 index 302d810d7..000000000 --- a/packages/requester-testing/src/createEchoRequester.ts +++ /dev/null @@ -1,107 +0,0 @@ -import type { EndRequest, Request, Requester, Response } from '@algolia/client-common'; - -export type EchoResponse = Omit & - Pick & { - host: string; - algoliaAgent: string; - searchParams?: Record | undefined; - }; - -type BasicURL = { - host: string; - search: string; - pathname: string; -}; - -export type EchoRequesterParams = { - getURL: (url: string) => BasicURL; - status?: number | undefined; -}; - -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 as string) : undefined, - path, - host, - algoliaAgent, - searchParams, - }; - - return Promise.resolve({ - content: JSON.stringify(content), - headers: request.headers, - isTimedOut: false, - status, - }); - } - - function sendStream(request: EndRequest): Promise> { - const { host, searchParams, algoliaAgent, path } = getUrlParams(getURL(request.url)); - - const content: EchoResponse = { - ...request, - data: request.data ? JSON.parse(request.data as string) : undefined, - path, - host, - algoliaAgent, - searchParams, - }; - - const ssePayload = `data: ${JSON.stringify(content)}\n\n`; - const encoded = new TextEncoder().encode(ssePayload); - - const stream = new ReadableStream({ - start(controller) { - controller.enqueue(encoded); - controller.close(); - }, - }); - - return Promise.resolve(stream); - } - - return { send, sendStream }; -} diff --git a/packages/requester-testing/src/index.ts b/packages/requester-testing/src/index.ts deleted file mode 100644 index d64be8e34..000000000 --- a/packages/requester-testing/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index e434bdd80..000000000 --- a/packages/requester-testing/src/nodeEchoRequester.ts +++ /dev/null @@ -1,11 +0,0 @@ -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 deleted file mode 100644 index 50a5d1d9f..000000000 --- a/packages/requester-testing/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index e3e92f02a..000000000 --- a/packages/requester-testing/tsup.config.ts +++ /dev/null @@ -1,26 +0,0 @@ -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, 'http', 'es2018'), - 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 new file mode 100644 index 000000000..d182b70fb --- /dev/null +++ b/packages/transporter/api-extractor.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 000000000..e254eb1b4 --- /dev/null +++ b/packages/transporter/index.js @@ -0,0 +1,2 @@ +// 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 new file mode 100644 index 000000000..3b6183727 --- /dev/null +++ b/packages/transporter/package.json @@ -0,0 +1,24 @@ +{ + "name": "@algolia/transporter", + "version": "4.17.2", + "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.17.2", + "@algolia/logger-common": "4.17.2", + "@algolia/requester-common": "4.17.2" + } +} diff --git a/packages/transporter/src/__tests__/fixtures.ts b/packages/transporter/src/__tests__/fixtures.ts new file mode 100644 index 000000000..03a6dd3af --- /dev/null +++ b/packages/transporter/src/__tests__/fixtures.ts @@ -0,0 +1,129 @@ +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 new file mode 100644 index 000000000..3bd28c831 --- /dev/null +++ b/packages/transporter/src/__tests__/integration/query-parameters.test.ts @@ -0,0 +1,25 @@ +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 new file mode 100644 index 000000000..8b56671f1 --- /dev/null +++ b/packages/transporter/src/__tests__/integration/with-hosts-cache-drivers.test.ts @@ -0,0 +1,84 @@ +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 new file mode 100644 index 000000000..42db44a08 --- /dev/null +++ b/packages/transporter/src/__tests__/integration/with-request-cache-drivers.test.ts @@ -0,0 +1,127 @@ +/* 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 new file mode 100644 index 000000000..636ef03f5 --- /dev/null +++ b/packages/transporter/src/__tests__/integration/with-response-cache-drivers.test.ts @@ -0,0 +1,148 @@ +/* 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 new file mode 100644 index 000000000..9da8b5e55 --- /dev/null +++ b/packages/transporter/src/__tests__/unit/deserializer.test.ts @@ -0,0 +1,125 @@ +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 new file mode 100644 index 000000000..9215e20ab --- /dev/null +++ b/packages/transporter/src/__tests__/unit/headers.test.ts @@ -0,0 +1,95 @@ +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 new file mode 100644 index 000000000..72342630b --- /dev/null +++ b/packages/transporter/src/__tests__/unit/hosts.test.ts @@ -0,0 +1,82 @@ +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 new file mode 100644 index 000000000..bfe6abad0 --- /dev/null +++ b/packages/transporter/src/__tests__/unit/query-parameters.test.ts @@ -0,0 +1,77 @@ +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 new file mode 100644 index 000000000..3b3c86051 --- /dev/null +++ b/packages/transporter/src/__tests__/unit/request-options.test.ts @@ -0,0 +1,56 @@ +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 new file mode 100644 index 000000000..5c838952c --- /dev/null +++ b/packages/transporter/src/__tests__/unit/retry-strategy.test.ts @@ -0,0 +1,318 @@ +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 new file mode 100644 index 000000000..6238fe1b0 --- /dev/null +++ b/packages/transporter/src/__tests__/unit/serializer.test.ts @@ -0,0 +1,70 @@ +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 new file mode 100644 index 000000000..0254a00a1 --- /dev/null +++ b/packages/transporter/src/__tests__/unit/stackTrace.test.ts @@ -0,0 +1,113 @@ +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 new file mode 100644 index 000000000..ee7454bc5 --- /dev/null +++ b/packages/transporter/src/__tests__/unit/timeouts.test.ts @@ -0,0 +1,182 @@ +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 new file mode 100644 index 000000000..97c3e1676 --- /dev/null +++ b/packages/transporter/src/__tests__/unit/user-agent.test.ts @@ -0,0 +1,49 @@ +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 new file mode 100644 index 000000000..08f368317 --- /dev/null +++ b/packages/transporter/src/concerns/createRetryableOptions.ts @@ -0,0 +1,63 @@ +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 new file mode 100644 index 000000000..4c8a7bb57 --- /dev/null +++ b/packages/transporter/src/concerns/retryDecision.ts @@ -0,0 +1,39 @@ +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 new file mode 100644 index 000000000..0d9f29de2 --- /dev/null +++ b/packages/transporter/src/concerns/retryableRequest.ts @@ -0,0 +1,154 @@ +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 new file mode 100644 index 000000000..2054a3ddb --- /dev/null +++ b/packages/transporter/src/createMappedRequestOptions.ts @@ -0,0 +1,24 @@ +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 new file mode 100644 index 000000000..1a4621d48 --- /dev/null +++ b/packages/transporter/src/createStatefulHost.ts @@ -0,0 +1,27 @@ +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 new file mode 100644 index 000000000..08b04ac57 --- /dev/null +++ b/packages/transporter/src/createStatelessHost.ts @@ -0,0 +1,17 @@ +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 new file mode 100644 index 000000000..278cf225e --- /dev/null +++ b/packages/transporter/src/createTransporter.ts @@ -0,0 +1,153 @@ +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 new file mode 100644 index 000000000..bf23a933e --- /dev/null +++ b/packages/transporter/src/createUserAgent.ts @@ -0,0 +1,21 @@ +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 new file mode 100644 index 000000000..07633a7bf --- /dev/null +++ b/packages/transporter/src/deserializer.ts @@ -0,0 +1,29 @@ +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 new file mode 100644 index 000000000..226e63b34 --- /dev/null +++ b/packages/transporter/src/errors/createApiError.ts @@ -0,0 +1,14 @@ +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 new file mode 100644 index 000000000..b26fe761e --- /dev/null +++ b/packages/transporter/src/errors/createDeserializationError.ts @@ -0,0 +1,14 @@ +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 new file mode 100644 index 000000000..b317aaa0e --- /dev/null +++ b/packages/transporter/src/errors/createRetryError.ts @@ -0,0 +1,10 @@ +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 new file mode 100644 index 000000000..04d68daf7 --- /dev/null +++ b/packages/transporter/src/errors/index.ts @@ -0,0 +1,7 @@ +/** + * @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 new file mode 100644 index 000000000..05f5e4e8a --- /dev/null +++ b/packages/transporter/src/index.ts @@ -0,0 +1,14 @@ +/** + * @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 new file mode 100644 index 000000000..79f9a503a --- /dev/null +++ b/packages/transporter/src/serializer.ts @@ -0,0 +1,75 @@ +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 new file mode 100644 index 000000000..7255fff0d --- /dev/null +++ b/packages/transporter/src/stackTrace.ts @@ -0,0 +1,26 @@ +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 new file mode 100644 index 000000000..83d7f0e5a --- /dev/null +++ b/packages/transporter/src/types/ApiError.ts @@ -0,0 +1,14 @@ +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 new file mode 100644 index 000000000..5d9ebaa64 --- /dev/null +++ b/packages/transporter/src/types/CallType.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..fd5f87163 --- /dev/null +++ b/packages/transporter/src/types/DeserializationError.ts @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..b65178c2d --- /dev/null +++ b/packages/transporter/src/types/Headers.ts @@ -0,0 +1 @@ +export type Headers = Readonly>; diff --git a/packages/transporter/src/types/HostOptions.ts b/packages/transporter/src/types/HostOptions.ts new file mode 100644 index 000000000..3a520d8e4 --- /dev/null +++ b/packages/transporter/src/types/HostOptions.ts @@ -0,0 +1,20 @@ +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 new file mode 100644 index 000000000..fc11ab53f --- /dev/null +++ b/packages/transporter/src/types/MappedRequestOptions.ts @@ -0,0 +1,26 @@ +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 new file mode 100644 index 000000000..033b66d7f --- /dev/null +++ b/packages/transporter/src/types/QueryParameters.ts @@ -0,0 +1 @@ +export type QueryParameters = Readonly>; diff --git a/packages/transporter/src/types/Request.ts b/packages/transporter/src/types/Request.ts new file mode 100644 index 000000000..1558cfb9a --- /dev/null +++ b/packages/transporter/src/types/Request.ts @@ -0,0 +1,23 @@ +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 new file mode 100644 index 000000000..018843e5d --- /dev/null +++ b/packages/transporter/src/types/RequestOptions.ts @@ -0,0 +1,38 @@ +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 new file mode 100644 index 000000000..a939b50f9 --- /dev/null +++ b/packages/transporter/src/types/RetryError.ts @@ -0,0 +1,9 @@ +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 new file mode 100644 index 000000000..a729581a6 --- /dev/null +++ b/packages/transporter/src/types/StackFrame.ts @@ -0,0 +1,25 @@ +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 new file mode 100644 index 000000000..fe88b3069 --- /dev/null +++ b/packages/transporter/src/types/StatefulHost.ts @@ -0,0 +1,24 @@ +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 new file mode 100644 index 000000000..a9f12577d --- /dev/null +++ b/packages/transporter/src/types/StatelessHost.ts @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..dcccf8da3 --- /dev/null +++ b/packages/transporter/src/types/Timeouts.ts @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..509933a5d --- /dev/null +++ b/packages/transporter/src/types/Transporter.ts @@ -0,0 +1,93 @@ +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 new file mode 100644 index 000000000..bb201411c --- /dev/null +++ b/packages/transporter/src/types/TransporterOptions.ts @@ -0,0 +1,71 @@ +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 new file mode 100644 index 000000000..5f6d4134c --- /dev/null +++ b/packages/transporter/src/types/UserAgent.ts @@ -0,0 +1,15 @@ +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 new file mode 100644 index 000000000..d19d9d6b0 --- /dev/null +++ b/packages/transporter/src/types/UserAgentOptions.ts @@ -0,0 +1,11 @@ +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 new file mode 100644 index 000000000..8dfa8e916 --- /dev/null +++ b/packages/transporter/src/types/index.ts @@ -0,0 +1,22 @@ +/** + * @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 new file mode 100644 index 000000000..7666d035d --- /dev/null +++ b/playground/browser-lite/index.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/playground/browser/index.html b/playground/browser/index.html new file mode 100644 index 000000000..78944576b --- /dev/null +++ b/playground/browser/index.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/playground/node/index.ts b/playground/node/index.ts new file mode 100644 index 000000000..c87eec762 --- /dev/null +++ b/playground/node/index.ts @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..93346e064 --- /dev/null +++ b/renovate.json @@ -0,0 +1,7 @@ +{ + "extends": [ + "config:js-lib", + "algolia" + ], + "enable": false +} diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 000000000..41f41e96a --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,244 @@ +/* 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', 'requester-fetch'].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 new file mode 100755 index 000000000..9126fc293 --- /dev/null +++ b/scripts/build.js @@ -0,0 +1,78 @@ +/* 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 new file mode 100644 index 000000000..f2431e412 --- /dev/null +++ b/scripts/generate-exports.js @@ -0,0 +1,32 @@ +/* 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 new file mode 100644 index 000000000..ab75c8e82 --- /dev/null +++ b/scripts/packages.js @@ -0,0 +1,4 @@ +/* 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 new file mode 100755 index 000000000..09bb055bb --- /dev/null +++ b/scripts/prepare-playground.sh @@ -0,0 +1,2 @@ +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 new file mode 100755 index 000000000..7db3af5a0 --- /dev/null +++ b/scripts/prepare-test-browser.sh @@ -0,0 +1,2 @@ +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 new file mode 100755 index 000000000..233419f99 --- /dev/null +++ b/scripts/prepare-test-unit.sh @@ -0,0 +1,3 @@ +#!/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 deleted file mode 100755 index 0a72ab58a..000000000 --- a/scripts/publish.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { execa } from 'execa'; - -async function publish(): Promise { - // publish the stable public packages - await execa( - `yarn lerna exec --no-bail -- npm_config_registry=https://registry.npmjs.org/ npm publish --access public`, - { - shell: 'bash', - }, - ); - - // publish the prereleases private packages if any - // await execa( - // `yarn lerna exec --scope '' --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 new file mode 100644 index 000000000..33e0a8298 --- /dev/null +++ b/scripts/setup-test-browser.js @@ -0,0 +1,66 @@ +/* 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 new file mode 100644 index 000000000..1de5a8bdb --- /dev/null +++ b/scripts/sort-package-json.js @@ -0,0 +1,19 @@ +/* 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 new file mode 100755 index 000000000..1cc919f56 --- /dev/null +++ b/scripts/test-build-declarations.js @@ -0,0 +1,45 @@ +/* eslint-disable import/no-commonjs, no-console, no-process-exit */ +const glob = require('glob'); +const execa = require('execa'); + +const NUMBER_OF_DECLARATIONS = 22; + +(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 new file mode 100644 index 000000000..9aaa5b57e --- /dev/null +++ b/scripts/test-server-for-timeouts.js @@ -0,0 +1,26 @@ +// 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 deleted file mode 100644 index d79475974..000000000 --- a/scripts/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "resolveJsonModule": true, - "outDir": "dist" - }, - "include": ["*.ts"] -} diff --git a/serve.json b/serve.json new file mode 100644 index 000000000..4d2e141f0 --- /dev/null +++ b/serve.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 000000000..5249136f5 --- /dev/null +++ b/ship.config.js @@ -0,0 +1,34 @@ +/* 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 new file mode 100644 index 000000000..1ca87ab7d --- /dev/null +++ b/specs/.prettierrc @@ -0,0 +1,3 @@ +{ + "singleQuote": false +} diff --git a/specs/errors.spec.ts b/specs/errors.spec.ts new file mode 100644 index 000000000..706c82b7c --- /dev/null +++ b/specs/errors.spec.ts @@ -0,0 +1,61 @@ +// @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 new file mode 100644 index 000000000..d266862e8 --- /dev/null +++ b/specs/fixtures/websites/algoliasearch-lite.com/index.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/specs/fixtures/websites/algoliasearch.com/index.html b/specs/fixtures/websites/algoliasearch.com/index.html new file mode 100644 index 000000000..85fa22f54 --- /dev/null +++ b/specs/fixtures/websites/algoliasearch.com/index.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/specs/search.spec.ts b/specs/search.spec.ts new file mode 100644 index 000000000..84ff13acf --- /dev/null +++ b/specs/search.spec.ts @@ -0,0 +1,170 @@ +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 deleted file mode 100644 index 9dfc651f1..000000000 --- a/tests/utils.ts +++ /dev/null @@ -1,97 +0,0 @@ -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 if (req.url?.endsWith('/response_stream_error')) { - // Send headers + partial body, then destroy the socket. - // This triggers response.on('error') on the client side (typically ECONNRESET). - res.writeHead(200, { - 'content-type': 'text/plain', - 'access-control-allow-origin': '*', - }); - res.write('partial'); - setTimeout(() => { - req.socket.destroy(); - }, 50); - } 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 9befe28d7..1e7e91a3c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,26 +1,28 @@ { "compilerOptions": { - "allowJs": false, - "allowSyntheticDefaultImports": true, - "declaration": true, - "esModuleInterop": true, - "exactOptionalPropertyTypes": true, - "lib": ["dom", "esnext", "dom.iterable", "scripthost"], + "baseUrl": ".", + "outDir": "dist", + "strict": true, + "sourceMap": false, + "target": "esnext", "module": "esnext", "moduleResolution": "node", + "allowJs": false, + "noUnusedLocals": true, + "strictNullChecks": true, "noImplicitAny": true, - "noImplicitOverride": true, "noImplicitThis": true, - "noLib": false, - "noUnusedLocals": true, - "outDir": "dist", + "experimentalDecorators": true, + "resolveJsonModule": true, + "esModuleInterop": true, "removeComments": false, - "sourceMap": true, - "strict": true, - "target": "esnext", - "types": ["node"], - "verbatimModuleSyntax": true + "lib": ["esnext", "dom"], + "types": ["jest", "node", "webdriverio"], + "rootDir": ".", + "paths": { + "algoliasearch": ["packages/algoliasearch/src/builds/node"], + "@algolia/*": ["packages/*/src"] + } }, - "include": ["packages/**/*.ts"], - "exclude": ["dist", "node_modules"] + "include": ["packages/**/src/**/*.ts", "global.d.ts"] } diff --git a/wdio.base.conf.js b/wdio.base.conf.js new file mode 100644 index 000000000..f54937153 --- /dev/null +++ b/wdio.base.conf.js @@ -0,0 +1,35 @@ +/* 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 new file mode 100644 index 000000000..42cb3a1ba --- /dev/null +++ b/wdio.local.conf.js @@ -0,0 +1,14 @@ +/* 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 new file mode 100644 index 000000000..2285e9254 --- /dev/null +++ b/wdio.saucelabs.conf.js @@ -0,0 +1,64 @@ +/* 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 0c3de5f0c..71e1680ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,9932 +1,11749 @@ -# 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/abtesting@npm:1.22.0, @algolia/abtesting@workspace:packages/abtesting": - version: 0.0.0-use.local - resolution: "@algolia/abtesting@workspace:packages/abtesting" - dependencies: - "@algolia/client-common": "npm:5.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:26.1.2" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - languageName: unknown - linkType: soft - -"@algolia/advanced-personalization@workspace:packages/advanced-personalization": - version: 0.0.0-use.local - resolution: "@algolia/advanced-personalization@workspace:packages/advanced-personalization" - dependencies: - "@algolia/client-common": "npm:5.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:26.1.2" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - languageName: unknown - linkType: soft - -"@algolia/agent-studio@workspace:packages/agent-studio": - version: 0.0.0-use.local - resolution: "@algolia/agent-studio@workspace:packages/agent-studio" - dependencies: - "@algolia/client-common": "npm:5.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:26.1.2" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - languageName: unknown - linkType: soft - -"@algolia/client-abtesting@npm:5.56.0, @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.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:26.1.2" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - languageName: unknown - linkType: soft - -"@algolia/client-analytics@npm:5.56.0, @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.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:26.1.2" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - languageName: unknown - linkType: soft - -"@algolia/client-common@npm:5.56.0, @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.18.5" - "@types/node": "npm:24.13.3" - jsdom: "npm:30.0.1" - publint: "npm:0.3.22" - ts-node: "npm:10.9.2" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - vitest: "npm:4.1.10" - languageName: unknown - linkType: soft - -"@algolia/client-insights@npm:5.56.0, @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.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:26.1.2" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - languageName: unknown - linkType: soft - -"@algolia/client-personalization@npm:5.56.0, @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.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:26.1.2" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - languageName: unknown - linkType: soft - -"@algolia/client-query-suggestions@npm:5.56.0, @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.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:26.1.2" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - languageName: unknown - linkType: soft - -"@algolia/client-search@npm:5.56.0, @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.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:26.1.2" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.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.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:26.1.2" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - languageName: unknown - linkType: soft - -"@algolia/ingestion@npm:1.56.0, @algolia/ingestion@workspace:packages/ingestion": - version: 0.0.0-use.local - resolution: "@algolia/ingestion@workspace:packages/ingestion" - dependencies: - "@algolia/client-common": "npm:5.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:26.1.2" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.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.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:24.13.3" - jsdom: "npm:30.0.1" - publint: "npm:0.3.22" - ts-node: "npm:10.9.2" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - vitest: "npm:4.1.10" - languageName: unknown - linkType: soft - -"@algolia/monitoring@npm:1.56.0, @algolia/monitoring@workspace:packages/monitoring": - version: 0.0.0-use.local - resolution: "@algolia/monitoring@workspace:packages/monitoring" - dependencies: - "@algolia/client-common": "npm:5.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:26.1.2" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - languageName: unknown - linkType: soft - -"@algolia/recommend@npm:5.56.0, @algolia/recommend@workspace:packages/recommend": - version: 0.0.0-use.local - resolution: "@algolia/recommend@workspace:packages/recommend" - dependencies: - "@algolia/client-common": "npm:5.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:26.1.2" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - languageName: unknown - linkType: soft - -"@algolia/requester-browser-xhr@npm:5.56.0, @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.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:24.13.3" - jsdom: "npm:30.0.1" - publint: "npm:0.3.22" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - vitest: "npm:4.1.10" - xhr-mock: "npm:2.5.1" - languageName: unknown - linkType: soft - -"@algolia/requester-fetch@npm:5.56.0, @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.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:24.13.3" - cross-fetch: "npm:4.1.0" - nock: "npm:14.0.16" - publint: "npm:0.3.22" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - vitest: "npm:4.1.10" - languageName: unknown - linkType: soft - -"@algolia/requester-node-http@npm:5.56.0, @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.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:24.13.3" - nock: "npm:14.0.16" - publint: "npm:0.3.22" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - vitest: "npm:4.1.10" - languageName: unknown - linkType: soft - -"@algolia/requester-testing@npm:5.56.0, @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.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@types/node": "npm:24.13.3" - publint: "npm:0.3.22" - tsup: "npm:8.5.1" - typescript: "npm:5.9.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.18.5": - version: 0.18.5 - resolution: "@arethetypeswrong/cli@npm:0.18.5" - dependencies: - "@arethetypeswrong/core": "npm:0.18.5" - 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/70d2d75f678f751061760e686a67a9f0b85187f0371c33a241e6f6aef7ffc7410de0809e1b858321fdd5792fd3f3a6ad882cdef83f8cf679a8beea1b275c238c - languageName: node - linkType: hard - -"@arethetypeswrong/core@npm:0.18.5": - version: 0.18.5 - resolution: "@arethetypeswrong/core@npm:0.18.5" - 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.3" - lru-cache: "npm:^11.0.1" - semver: "npm:^7.5.4" - typescript: "npm:5.6.1-rc" - validate-npm-package-name: "npm:^5.0.0" - checksum: 10/9cbb7156327005463a0eb7ce6117ffa17ad48a18448548eefb88b94ebd6553e22d4f576253c4f91cc76f409933c36733b4802b22718189802d8d0c8da823116e - languageName: node - linkType: hard - -"@asamuzakjp/css-color@npm:^6.0.5": - version: 6.0.5 - resolution: "@asamuzakjp/css-color@npm:6.0.5" - dependencies: - "@csstools/css-calc": "npm:^3.2.1" - "@csstools/css-color-parser": "npm:^4.1.9" - "@csstools/css-parser-algorithms": "npm:^4.0.0" - "@csstools/css-tokenizer": "npm:^4.0.0" - lru-cache: "npm:^11.5.2" - checksum: 10/bd88a9a1d00711f5f63c4288a82489c33e28de43dee37f418cd30a42517d7b7e2040dc79fc223ececf290e7b3f12bbd2dd8ce7450f73b03bf0613df449b9563f - languageName: node - linkType: hard - -"@asamuzakjp/dom-selector@npm:^8.3.0": - version: 8.3.2 - resolution: "@asamuzakjp/dom-selector@npm:8.3.2" - dependencies: - bidi-js: "npm:^1.0.3" - css-tree: "npm:^3.2.1" - is-potential-custom-element-name: "npm:^1.0.1" - lru-cache: "npm:^11.5.2" - checksum: 10/5b3d985bf38d37286217b541460b40d0f6f8d4b8361f1600dc849d0e7e019570f9f792b10f37a3ef47ef17857ca5661885563f115e8cb611bb778f268cff5439 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.0.0": - version: 7.27.1 - resolution: "@babel/code-frame@npm:7.27.1" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.27.1" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.1.1" - checksum: 10/721b8a6e360a1fa0f1c9fe7351ae6c874828e119183688b533c477aa378f1010f37cc9afbfc4722c686d1f5cdd00da02eab4ba7278a0c504fa0d7a321dcd4fdf - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.27.1": - version: 7.28.5 - resolution: "@babel/helper-validator-identifier@npm:7.28.5" - checksum: 10/8e5d9b0133702cfacc7f368bf792f0f8ac0483794877c6dca5fcb73810ee138e27527701826fb58a40a004f3a5ec0a2f3c3dd5e326d262530b119918f3132ba7 - languageName: node - linkType: hard - -"@braidai/lang@npm:^1.0.0": - version: 1.1.2 - resolution: "@braidai/lang@npm:1.1.2" - checksum: 10/04ece1b744eb8b6c2417afe220ad96c7078f83ed533117cc49300b6322f6b58f5e649c80bd990c27e2d16bfdd976481d5252ff3206b7069fc863890ab1b96277 - languageName: node - linkType: hard - -"@bramus/specificity@npm:^2.4.2": - version: 2.4.2 - resolution: "@bramus/specificity@npm:2.4.2" - dependencies: - css-tree: "npm:^3.0.0" - bin: - specificity: bin/cli.js - checksum: 10/4255ed6ff12f7db9ec3c21acfd0da2327d30ec29deb199345810cdcad992618f40039c5483eefeb665913bffbc80b690e9f1b954fbbbfa93480c6a22f9c3a69c - languageName: node - linkType: hard - -"@cloudflare/kv-asset-handler@npm:0.5.0": - version: 0.5.0 - resolution: "@cloudflare/kv-asset-handler@npm:0.5.0" - checksum: 10/03310bf078301e1faeebfc0d5bf290582c13628567d62c03d1b7390e37ff3f44606f67236f68a92878cf9a0c697b90f673846768a167fa05aef3da64b521a5d9 - languageName: node - linkType: hard - -"@cloudflare/unenv-preset@npm:2.16.1": - version: 2.16.1 - resolution: "@cloudflare/unenv-preset@npm:2.16.1" - peerDependencies: - unenv: 2.0.0-rc.24 - workerd: ">1.20260305.0 <2.0.0-0" - peerDependenciesMeta: - workerd: - optional: true - checksum: 10/fd6c007e7cf269f3268741ca5405ad80a224df95de35d1082d31b7434f559f6f16c0a7f167298e0e8560e88d38cbdff87ecfbfa5717d2f06e197bcc69c3ee299 - languageName: node - linkType: hard - -"@cloudflare/vitest-pool-workers@npm:0.20.1": - version: 0.20.1 - resolution: "@cloudflare/vitest-pool-workers@npm:0.20.1" - dependencies: - cjs-module-lexer: "npm:1.2.3" - esbuild: "npm:0.28.1" - miniflare: "npm:5.20260730.0-alpha" - wrangler: "npm:4.118.0" - zod: "npm:4.4.3" - peerDependencies: - "@vitest/runner": ^4.1.0 - "@vitest/snapshot": ^4.1.0 - vitest: ^4.1.0 - checksum: 10/1a43da5d45fbda206c24dc5fcfcb2707b9e0e13603842d62856b4dbf62f8ab2500b4d94fce65e2d6ab55e68bb5c1bb0689d828dd96d934b83c543fa309e80576 - languageName: node - linkType: hard - -"@cloudflare/workerd-darwin-64@npm:1.20260730.1": - version: 1.20260730.1 - resolution: "@cloudflare/workerd-darwin-64@npm:1.20260730.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@cloudflare/workerd-darwin-arm64@npm:1.20260730.1": - version: 1.20260730.1 - resolution: "@cloudflare/workerd-darwin-arm64@npm:1.20260730.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@cloudflare/workerd-linux-64@npm:1.20260730.1": - version: 1.20260730.1 - resolution: "@cloudflare/workerd-linux-64@npm:1.20260730.1" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@cloudflare/workerd-linux-arm64@npm:1.20260730.1": - version: 1.20260730.1 - resolution: "@cloudflare/workerd-linux-arm64@npm:1.20260730.1" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@cloudflare/workerd-windows-64@npm:1.20260730.1": - version: 1.20260730.1 - resolution: "@cloudflare/workerd-windows-64@npm:1.20260730.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@cloudflare/workers-types@npm:5.20260801.1": - version: 5.20260801.1 - resolution: "@cloudflare/workers-types@npm:5.20260801.1" - checksum: 10/2bec2cad2337b5a601a1d3f4d5309a812f27e3cfb13be905aad001b5e051d1ed6eecf39f925f768e48bbeea30c99a55ca2ad9ad79b74634f4ac6930caede5f4f - 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:^6.1.0": - version: 6.1.0 - resolution: "@csstools/color-helpers@npm:6.1.0" - checksum: 10/acb6a7e0f2dad6cd5527b455732d6ceab836de8469e7f31be0f60748a1609794fd0a478e116931fddee63577562a40d9ef122a58c4f19de229ae233d1307c373 - languageName: node - linkType: hard - -"@csstools/css-calc@npm:^3.2.1, @csstools/css-calc@npm:^3.3.0": - version: 3.3.0 - resolution: "@csstools/css-calc@npm:3.3.0" - peerDependencies: - "@csstools/css-parser-algorithms": ^4.0.0 - "@csstools/css-tokenizer": ^4.0.0 - checksum: 10/46dde1c26c8a62d7b849a616a521cb97abc2d6c8c480f7be6f14c70fe60689a2a58c1f5f905aae237250ad27172968e10c70f6f83864c7dc48d8f8921f55f6a9 - languageName: node - linkType: hard - -"@csstools/css-color-parser@npm:^4.1.9": - version: 4.1.10 - resolution: "@csstools/css-color-parser@npm:4.1.10" - dependencies: - "@csstools/color-helpers": "npm:^6.1.0" - "@csstools/css-calc": "npm:^3.3.0" - peerDependencies: - "@csstools/css-parser-algorithms": ^4.0.0 - "@csstools/css-tokenizer": ^4.0.0 - checksum: 10/92f5f590617a2cc9ff358b2d79716cbe15dd4cc7537cdc45ffc55878282677a9ef6c8bfb215a7dc0731f302c32bf1b0d1b7fc3c550147fd8a6d85f7c3cfb0cdd - languageName: node - linkType: hard - -"@csstools/css-parser-algorithms@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/css-parser-algorithms@npm:4.0.0" - peerDependencies: - "@csstools/css-tokenizer": ^4.0.0 - checksum: 10/000f3ba55f440d9fbece50714e88f9d4479e2bde9e0568333492663f2c6034dc31d0b9ef5d66d196c76be58eea145ca6920aa8bdfdcc6361894806c21b5402d0 - languageName: node - linkType: hard - -"@csstools/css-syntax-patches-for-csstree@npm:^1.1.7": - version: 1.1.7 - resolution: "@csstools/css-syntax-patches-for-csstree@npm:1.1.7" - peerDependencies: - css-tree: ^3.2.1 - peerDependenciesMeta: - css-tree: - optional: true - checksum: 10/ba372ab41c351509d47e77f58eb56112fe6fd42e104b70c9c9c797faf4fbb3e837a5df5c9d7e3464b04607ee42e91701e34f935aeec8abb94f24be67cfa1b707 - languageName: node - linkType: hard - -"@csstools/css-tokenizer@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/css-tokenizer@npm:4.0.0" - checksum: 10/074ade1a7fc3410b813c8982cf07a56814a55af509c533c2dc80d5689f34d2ba38219f8fa78fa36ea2adc6c5db506ea3c3a667388dda1b59b1281fdd2a2d1e28 - languageName: node - linkType: hard - -"@emnapi/core@npm:1.10.0": - version: 1.10.0 - resolution: "@emnapi/core@npm:1.10.0" - dependencies: - "@emnapi/wasi-threads": "npm:1.2.1" - tslib: "npm:^2.4.0" - checksum: 10/d32f386084e64deaf2609aabb8295d1ad5af6144d0f46d2060b76cc53f1f3b486df54bec9b0f33c37d85a3822e1193ebcd4e3deb4a5f0e4cd650aa2ffc631715 - languageName: node - linkType: hard - -"@emnapi/core@npm:1.4.5": - version: 1.4.5 - resolution: "@emnapi/core@npm:1.4.5" - dependencies: - "@emnapi/wasi-threads": "npm:1.0.4" - tslib: "npm:^2.4.0" - checksum: 10/412322102dc861e8aa78123ae20560ac980362a220c736fe59ddea3228d490757780ea4cdc3bd54903a5ca2a92085f119e42f2c07f60e2aec2c0b8a69ea094c0 - languageName: node - linkType: hard - -"@emnapi/core@npm:^1.1.0": - version: 1.8.1 - resolution: "@emnapi/core@npm:1.8.1" - dependencies: - "@emnapi/wasi-threads": "npm:1.1.0" - tslib: "npm:^2.4.0" - checksum: 10/904ea60c91fc7d8aeb4a8f2c433b8cfb47c50618f2b6f37429fc5093c857c6381c60628a5cfbc3a7b0d75b0a288f21d4ed2d4533e82f92c043801ef255fd6a5c - languageName: node - linkType: hard - -"@emnapi/runtime@npm:1.10.0": - version: 1.10.0 - resolution: "@emnapi/runtime@npm:1.10.0" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/d21083d07fa0c2da171c142e78ef986b66b07d45b06accc0bcaf49fcc61bb4dbc10e1c1760813070165b9f49b054376a931045347f21c0f42ff1eb2d2040faac - languageName: node - linkType: hard - -"@emnapi/runtime@npm:1.4.5": - version: 1.4.5 - resolution: "@emnapi/runtime@npm:1.4.5" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/1d6f406ff116d2363e60aef3ed49eb8d577387f4941abea508ba376900d8831609d5cce92a58076b1a9613f8e83c75c2e3fea71e4fbcdbe06019876144c2559b - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.1.0": - version: 1.8.1 - resolution: "@emnapi/runtime@npm:1.8.1" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/26725e202d4baefdc4a6ba770f703dfc80825a27c27a08c22bac1e1ce6f8f75c47b4fe9424d9b63239463c33ef20b650f08d710da18dfa1164a95e5acb865dba - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.11.1": - version: 1.11.3 - resolution: "@emnapi/runtime@npm:1.11.3" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/ec834cc0fe248e06dd84f6dee10162133f8a692636189e99aa992303c791d4be1679536ee91aeee6661c4478609768cee9c085acd858caa92784c67acaab44a5 - languageName: node - linkType: hard - -"@emnapi/wasi-threads@npm:1.0.4": - version: 1.0.4 - resolution: "@emnapi/wasi-threads@npm:1.0.4" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/86688f416095b59d8d3e5ea2d8b5574a7c180257fe0c067c7a492f3de2cf5ebc2c8b00af17d6341c7555c614266d3987f332015d7ce6e88b234a9a314e66f396 - languageName: node - linkType: hard - -"@emnapi/wasi-threads@npm:1.1.0": - version: 1.1.0 - resolution: "@emnapi/wasi-threads@npm:1.1.0" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/0d557e75262d2f4c95cb2a456ba0785ef61f919ce488c1d76e5e3acfd26e00c753ef928cd80068363e0c166ba8cc0141305daf0f81aad5afcd421f38f11e0f4e - languageName: node - linkType: hard - -"@emnapi/wasi-threads@npm:1.2.1": - version: 1.2.1 - resolution: "@emnapi/wasi-threads@npm:1.2.1" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/57cd4292be81c05d26aa886d68a9e4c449ff666e8503fed6463dfc6b64a4e4213f03c152d53296b7cda32840271e38cd33347332070658f01befeb9bf4e59f36 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/aix-ppc64@npm:0.27.2" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/aix-ppc64@npm:0.28.1" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/android-arm64@npm:0.27.2" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/android-arm64@npm:0.28.1" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/android-arm@npm:0.27.2" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/android-arm@npm:0.28.1" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/android-x64@npm:0.27.2" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/android-x64@npm:0.28.1" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/darwin-arm64@npm:0.27.2" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/darwin-arm64@npm:0.28.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/darwin-x64@npm:0.27.2" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/darwin-x64@npm:0.28.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/freebsd-arm64@npm:0.27.2" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/freebsd-arm64@npm:0.28.1" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/freebsd-x64@npm:0.27.2" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/freebsd-x64@npm:0.28.1" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-arm64@npm:0.27.2" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/linux-arm64@npm:0.28.1" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-arm@npm:0.27.2" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/linux-arm@npm:0.28.1" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-ia32@npm:0.27.2" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/linux-ia32@npm:0.28.1" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-loong64@npm:0.27.2" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/linux-loong64@npm:0.28.1" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-mips64el@npm:0.27.2" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/linux-mips64el@npm:0.28.1" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-ppc64@npm:0.27.2" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/linux-ppc64@npm:0.28.1" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-riscv64@npm:0.27.2" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/linux-riscv64@npm:0.28.1" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-s390x@npm:0.27.2" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/linux-s390x@npm:0.28.1" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-x64@npm:0.27.2" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/linux-x64@npm:0.28.1" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/netbsd-arm64@npm:0.27.2" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/netbsd-arm64@npm:0.28.1" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/netbsd-x64@npm:0.27.2" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/netbsd-x64@npm:0.28.1" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/openbsd-arm64@npm:0.27.2" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/openbsd-arm64@npm:0.28.1" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/openbsd-x64@npm:0.27.2" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/openbsd-x64@npm:0.28.1" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/openharmony-arm64@npm:0.27.2" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/openharmony-arm64@npm:0.28.1" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/sunos-x64@npm:0.27.2" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/sunos-x64@npm:0.28.1" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/win32-arm64@npm:0.27.2" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/win32-arm64@npm:0.28.1" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/win32-ia32@npm:0.27.2" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/win32-ia32@npm:0.28.1" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/win32-x64@npm:0.27.2" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.28.1": - version: 0.28.1 - resolution: "@esbuild/win32-x64@npm:0.28.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@exodus/bytes@npm:^1.11.0": - version: 1.15.0 - resolution: "@exodus/bytes@npm:1.15.0" - peerDependencies: - "@noble/hashes": ^1.8.0 || ^2.0.0 - peerDependenciesMeta: - "@noble/hashes": - optional: true - checksum: 10/d18519341c354356b65b9ac64b8166880972d122feff4038a92c0e2d2c8579794429117a2bc636bca584e7bf2fdad6d27f0874b2647d4a866c125843497ef193 - languageName: node - linkType: hard - -"@exodus/bytes@npm:^1.15.1": - version: 1.15.1 - resolution: "@exodus/bytes@npm:1.15.1" - peerDependencies: - "@noble/hashes": ^1.8.0 || ^2.0.0 - peerDependenciesMeta: - "@noble/hashes": - optional: true - checksum: 10/7dde00ae8040ec032ba3c287d210d7d555986caaf81a1215311c180422697d739a1952eb9d91e841132b18a19a910cdd02e4914136db3cc87baaa0fdd84b1e87 - languageName: node - linkType: hard - -"@exodus/bytes@npm:^1.6.0": - version: 1.8.0 - resolution: "@exodus/bytes@npm:1.8.0" - peerDependencies: - "@exodus/crypto": ^1.0.0-rc.4 - peerDependenciesMeta: - "@exodus/crypto": - optional: true - checksum: 10/aed2f77fbdfbadfc686ee66be68c192dd9138677daa65d368b8aaee006432518fec1098b4319073692d9cce52c50e0269b700801c1cb13a694f8dd04a2e1c5ec - languageName: node - linkType: hard - -"@gar/promise-retry@npm:^1.0.0, @gar/promise-retry@npm:^1.0.2": - version: 1.0.3 - resolution: "@gar/promise-retry@npm:1.0.3" - checksum: 10/0d13ea3bb1025755e055648f6e290d2a7e0c87affaf552218f09f66b3fcd9ea9d5c9cc5fe2aa6e285e1530437768e40f9448fe9a86f4f3417b216dcf488d3d1a - 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/colour@npm:^1.1.0": - version: 1.1.0 - resolution: "@img/colour@npm:1.1.0" - checksum: 10/2a29be7b06b046bd33c80ffa0f3493b7535b0841a69f54af81bf5e2d8867f21704fab42e9cf24ec30c089de34f790bae4dad1fc617c3163fbf264998dc316f0a - languageName: node - linkType: hard - -"@img/sharp-darwin-arm64@npm:0.35.2": - version: 0.35.2 - resolution: "@img/sharp-darwin-arm64@npm:0.35.2" - dependencies: - "@img/sharp-libvips-darwin-arm64": "npm:1.3.1" - dependenciesMeta: - "@img/sharp-libvips-darwin-arm64": - optional: true - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@img/sharp-darwin-x64@npm:0.35.2": - version: 0.35.2 - resolution: "@img/sharp-darwin-x64@npm:0.35.2" - dependencies: - "@img/sharp-libvips-darwin-x64": "npm:1.3.1" - dependenciesMeta: - "@img/sharp-libvips-darwin-x64": - optional: true - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@img/sharp-freebsd-wasm32@npm:0.35.2": - version: 0.35.2 - resolution: "@img/sharp-freebsd-wasm32@npm:0.35.2" - dependencies: - "@img/sharp-wasm32": "npm:0.35.2" - conditions: os=freebsd - languageName: node - linkType: hard - -"@img/sharp-libvips-darwin-arm64@npm:1.3.1": - version: 1.3.1 - resolution: "@img/sharp-libvips-darwin-arm64@npm:1.3.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@img/sharp-libvips-darwin-x64@npm:1.3.1": - version: 1.3.1 - resolution: "@img/sharp-libvips-darwin-x64@npm:1.3.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@img/sharp-libvips-linux-arm64@npm:1.3.1": - version: 1.3.1 - resolution: "@img/sharp-libvips-linux-arm64@npm:1.3.1" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-libvips-linux-arm@npm:1.3.1": - version: 1.3.1 - resolution: "@img/sharp-libvips-linux-arm@npm:1.3.1" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-libvips-linux-ppc64@npm:1.3.1": - version: 1.3.1 - resolution: "@img/sharp-libvips-linux-ppc64@npm:1.3.1" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-libvips-linux-riscv64@npm:1.3.1": - version: 1.3.1 - resolution: "@img/sharp-libvips-linux-riscv64@npm:1.3.1" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-libvips-linux-s390x@npm:1.3.1": - version: 1.3.1 - resolution: "@img/sharp-libvips-linux-s390x@npm:1.3.1" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-libvips-linux-x64@npm:1.3.1": - version: 1.3.1 - resolution: "@img/sharp-libvips-linux-x64@npm:1.3.1" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-libvips-linuxmusl-arm64@npm:1.3.1": - version: 1.3.1 - resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.3.1" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@img/sharp-libvips-linuxmusl-x64@npm:1.3.1": - version: 1.3.1 - resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.3.1" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@img/sharp-linux-arm64@npm:0.35.2": - version: 0.35.2 - resolution: "@img/sharp-linux-arm64@npm:0.35.2" - dependencies: - "@img/sharp-libvips-linux-arm64": "npm:1.3.1" - 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.35.2": - version: 0.35.2 - resolution: "@img/sharp-linux-arm@npm:0.35.2" - dependencies: - "@img/sharp-libvips-linux-arm": "npm:1.3.1" - dependenciesMeta: - "@img/sharp-libvips-linux-arm": - optional: true - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-linux-ppc64@npm:0.35.2": - version: 0.35.2 - resolution: "@img/sharp-linux-ppc64@npm:0.35.2" - dependencies: - "@img/sharp-libvips-linux-ppc64": "npm:1.3.1" - dependenciesMeta: - "@img/sharp-libvips-linux-ppc64": - optional: true - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-linux-riscv64@npm:0.35.2": - version: 0.35.2 - resolution: "@img/sharp-linux-riscv64@npm:0.35.2" - dependencies: - "@img/sharp-libvips-linux-riscv64": "npm:1.3.1" - dependenciesMeta: - "@img/sharp-libvips-linux-riscv64": - optional: true - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-linux-s390x@npm:0.35.2": - version: 0.35.2 - resolution: "@img/sharp-linux-s390x@npm:0.35.2" - dependencies: - "@img/sharp-libvips-linux-s390x": "npm:1.3.1" - 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.35.2": - version: 0.35.2 - resolution: "@img/sharp-linux-x64@npm:0.35.2" - dependencies: - "@img/sharp-libvips-linux-x64": "npm:1.3.1" - 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.35.2": - version: 0.35.2 - resolution: "@img/sharp-linuxmusl-arm64@npm:0.35.2" - dependencies: - "@img/sharp-libvips-linuxmusl-arm64": "npm:1.3.1" - 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.35.2": - version: 0.35.2 - resolution: "@img/sharp-linuxmusl-x64@npm:0.35.2" - dependencies: - "@img/sharp-libvips-linuxmusl-x64": "npm:1.3.1" - dependenciesMeta: - "@img/sharp-libvips-linuxmusl-x64": - optional: true - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@img/sharp-wasm32@npm:0.35.2": - version: 0.35.2 - resolution: "@img/sharp-wasm32@npm:0.35.2" - dependencies: - "@emnapi/runtime": "npm:^1.11.1" - checksum: 10/10613904362c251fc102f5020ce5e96e430be6ce3bb13069dc8a7f6020fdc3468832740ee9becdb9d1ac9994e9bcc819857cfa43f3e297995f71e94273ec22d7 - languageName: node - linkType: hard - -"@img/sharp-webcontainers-wasm32@npm:0.35.2": - version: 0.35.2 - resolution: "@img/sharp-webcontainers-wasm32@npm:0.35.2" - dependencies: - "@img/sharp-wasm32": "npm:0.35.2" - conditions: cpu=wasm32 - languageName: node - linkType: hard - -"@img/sharp-win32-arm64@npm:0.35.2": - version: 0.35.2 - resolution: "@img/sharp-win32-arm64@npm:0.35.2" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@img/sharp-win32-ia32@npm:0.35.2": - version: 0.35.2 - resolution: "@img/sharp-win32-ia32@npm:0.35.2" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@img/sharp-win32-x64@npm:0.35.2": - version: 0.35.2 - resolution: "@img/sharp-win32-x64@npm:0.35.2" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@inquirer/ansi@npm:^1.0.0, @inquirer/ansi@npm:^1.0.2": - version: 1.0.2 - resolution: "@inquirer/ansi@npm:1.0.2" - checksum: 10/d1496e573a63ee6752bcf3fc93375cdabc55b0d60f0588fe7902282c710b223252ad318ff600ee904e48555634663b53fda517f5b29ce9fbda90bfae18592fbc - languageName: node - linkType: hard - -"@inquirer/checkbox@npm:^4.3.2": - version: 4.3.2 - resolution: "@inquirer/checkbox@npm:4.3.2" - dependencies: - "@inquirer/ansi": "npm:^1.0.2" - "@inquirer/core": "npm:^10.3.2" - "@inquirer/figures": "npm:^1.0.15" - "@inquirer/type": "npm:^3.0.10" - yoctocolors-cjs: "npm:^2.1.3" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/4ac5dd2679981e23f066c51c605cb1c63ccda9ea6e1ad895e675eb26702aaf6cf961bf5ca3acd832efba5edcf9883b6742002c801673d2b35c123a7fa7db7b23 - languageName: node - linkType: hard - -"@inquirer/confirm@npm:^5.1.21": - version: 5.1.21 - resolution: "@inquirer/confirm@npm:5.1.21" - dependencies: - "@inquirer/core": "npm:^10.3.2" - "@inquirer/type": "npm:^3.0.10" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/a107aa0073965ea510affb9e5b55baf40333503d600970c458c07770cd4e0eee01efc4caba66f0409b0fadc9550d127329622efb543cffcabff3ad0e7f865372 - languageName: node - linkType: hard - -"@inquirer/core@npm:^10.2.2, @inquirer/core@npm:^10.3.2": - version: 10.3.2 - resolution: "@inquirer/core@npm:10.3.2" - dependencies: - "@inquirer/ansi": "npm:^1.0.2" - "@inquirer/figures": "npm:^1.0.15" - "@inquirer/type": "npm:^3.0.10" - cli-width: "npm:^4.1.0" - mute-stream: "npm:^2.0.0" - signal-exit: "npm:^4.1.0" - wrap-ansi: "npm:^6.2.0" - yoctocolors-cjs: "npm:^2.1.3" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/eb434bdf0ae7d904367003c772bcd80cbf679f79c087c99a4949fd7288e9a2f713ec3ea63381b9a001f52389ab56a77fcd88d64d81a03b1195193410ce8971c2 - languageName: node - linkType: hard - -"@inquirer/editor@npm:^4.2.23": - version: 4.2.23 - resolution: "@inquirer/editor@npm:4.2.23" - dependencies: - "@inquirer/core": "npm:^10.3.2" - "@inquirer/external-editor": "npm:^1.0.3" - "@inquirer/type": "npm:^3.0.10" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/f91b9aadba6ea28a0f4ea5f075af421e076262aebbd737e1b9779f086fa9d559d064e9942a581544645d1dcf56d6b685e8063fe46677880fbca73f6de4e4e7c5 - languageName: node - linkType: hard - -"@inquirer/expand@npm:^4.0.23": - version: 4.0.23 - resolution: "@inquirer/expand@npm:4.0.23" - dependencies: - "@inquirer/core": "npm:^10.3.2" - "@inquirer/type": "npm:^3.0.10" - yoctocolors-cjs: "npm:^2.1.3" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/73ad1d6376e5efe2a452c33494d6d16ee2670c638ae470a795fdff4acb59a8e032e38e141f87b603b6e96320977519b375dac6471d86d5e3087a9c1db40e3111 - languageName: node - linkType: hard - -"@inquirer/external-editor@npm:^1.0.3": - version: 1.0.3 - resolution: "@inquirer/external-editor@npm:1.0.3" - dependencies: - chardet: "npm:^2.1.1" - iconv-lite: "npm:^0.7.0" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/c95d7237a885b32031715089f92820525731d4d3c2bd7afdb826307dc296cc2b39e7a644b0bb265441963348cca42e7785feb29c3aaf18fd2b63131769bf6587 - languageName: node - linkType: hard - -"@inquirer/figures@npm:^1.0.15": - version: 1.0.15 - resolution: "@inquirer/figures@npm:1.0.15" - checksum: 10/3f858807f361ca29f41ec1076bbece4098cc140d86a06159d42c6e3f6e4d9bec9e10871ccfcbbaa367d6a8462b01dff89f2b1b157d9de6e8726bec85533f525c - languageName: node - linkType: hard - -"@inquirer/input@npm:^4.3.1": - version: 4.3.1 - resolution: "@inquirer/input@npm:4.3.1" - dependencies: - "@inquirer/core": "npm:^10.3.2" - "@inquirer/type": "npm:^3.0.10" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/713aaa4c94263299fbd7adfd65378f788cac1b5047f2b7e1ea349ca669db6c7c91b69ab6e2f6660cdbc28c7f7888c5c77ab4433bd149931597e43976d1ba5f34 - languageName: node - linkType: hard - -"@inquirer/number@npm:^3.0.23": - version: 3.0.23 - resolution: "@inquirer/number@npm:3.0.23" - dependencies: - "@inquirer/core": "npm:^10.3.2" - "@inquirer/type": "npm:^3.0.10" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/50694807b71746e15ed69d100aae3c8014d83c90aa660e8a179fe0db1046f26d727947542f64e24cc8b969a61659cb89fe36208cc2b59c1816382b598e686dd2 - languageName: node - linkType: hard - -"@inquirer/password@npm:^4.0.23": - version: 4.0.23 - resolution: "@inquirer/password@npm:4.0.23" - dependencies: - "@inquirer/ansi": "npm:^1.0.2" - "@inquirer/core": "npm:^10.3.2" - "@inquirer/type": "npm:^3.0.10" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/97364970b01c85946a4a50ad876c53ef0c1857a9144e24fad65e5dfa4b4e5dd42564fbcdfa2b49bb049a25d127efbe0882cb18afcdd47b166ebd01c6c4b5e825 - languageName: node - linkType: hard - -"@inquirer/prompts@npm:^7.8.6": - version: 7.10.1 - resolution: "@inquirer/prompts@npm:7.10.1" - dependencies: - "@inquirer/checkbox": "npm:^4.3.2" - "@inquirer/confirm": "npm:^5.1.21" - "@inquirer/editor": "npm:^4.2.23" - "@inquirer/expand": "npm:^4.0.23" - "@inquirer/input": "npm:^4.3.1" - "@inquirer/number": "npm:^3.0.23" - "@inquirer/password": "npm:^4.0.23" - "@inquirer/rawlist": "npm:^4.1.11" - "@inquirer/search": "npm:^3.2.2" - "@inquirer/select": "npm:^4.4.2" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/b3e3386edd255e4e91c7908050674f8a2e69b043883c00feec2f87d697be37bc6e8cd4a360e7e3233a9825ae7ea044a2ac63d5700926d27f9959013d8566f890 - languageName: node - linkType: hard - -"@inquirer/rawlist@npm:^4.1.11": - version: 4.1.11 - resolution: "@inquirer/rawlist@npm:4.1.11" - dependencies: - "@inquirer/core": "npm:^10.3.2" - "@inquirer/type": "npm:^3.0.10" - yoctocolors-cjs: "npm:^2.1.3" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/0d8f6484cfc20749190e95eecfb2d034bafb3644ec4907b84b1673646f5dd71730e38e35565ea98dfd240d8851e3cff653edafcc4e0af617054b127b407e3229 - languageName: node - linkType: hard - -"@inquirer/search@npm:^3.2.2": - version: 3.2.2 - resolution: "@inquirer/search@npm:3.2.2" - dependencies: - "@inquirer/core": "npm:^10.3.2" - "@inquirer/figures": "npm:^1.0.15" - "@inquirer/type": "npm:^3.0.10" - yoctocolors-cjs: "npm:^2.1.3" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/abaed2df7763633ff4414b58d1c87233b69ed3cd2ac77629f0d54b72b8b585dc4806c7a2a8261daba58af5b0a2147e586d079fdc82060b6bcf56b75d3d03f3a7 - languageName: node - linkType: hard - -"@inquirer/select@npm:^4.4.2": - version: 4.4.2 - resolution: "@inquirer/select@npm:4.4.2" - dependencies: - "@inquirer/ansi": "npm:^1.0.2" - "@inquirer/core": "npm:^10.3.2" - "@inquirer/figures": "npm:^1.0.15" - "@inquirer/type": "npm:^3.0.10" - yoctocolors-cjs: "npm:^2.1.3" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/795ec0ac77d575f20bd6a12fb1c040093e62217ac0c80194829a8d3c3d1e09f70ad738e9a9dd6095cc8358fff4e13882209c09bdf8eb0864a86dcabef5b0a6a6 - languageName: node - linkType: hard - -"@inquirer/type@npm:^3.0.10, @inquirer/type@npm:^3.0.8": - version: 3.0.10 - resolution: "@inquirer/type@npm:3.0.10" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/57d113a9db7abc73326491e29bedc88ef362e53779f9f58a1b61225e0be068ce0c54e33cd65f4a13ca46131676fb72c3ef488463c4c9af0aa89680684c55d74c - languageName: node - linkType: hard - -"@isaacs/balanced-match@npm:^4.0.1": - version: 4.0.1 - resolution: "@isaacs/balanced-match@npm:4.0.1" - checksum: 10/102fbc6d2c0d5edf8f6dbf2b3feb21695a21bc850f11bc47c4f06aa83bd8884fde3fe9d6d797d619901d96865fdcb4569ac2a54c937992c48885c5e3d9967fe8 - languageName: node - linkType: hard - -"@isaacs/brace-expansion@npm:^5.0.0": - version: 5.0.0 - resolution: "@isaacs/brace-expansion@npm:5.0.0" - dependencies: - "@isaacs/balanced-match": "npm:^4.0.1" - checksum: 10/cf3b7f206aff12128214a1df764ac8cdbc517c110db85249b945282407e3dfc5c6e66286383a7c9391a059fc8e6e6a8ca82262fc9d2590bd615376141fbebd2d - 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/diff-sequences@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/diff-sequences@npm:30.0.1" - checksum: 10/0ddb7c7ba92d6057a2ee51a9cfc2155b77cca707fe959167466ea02dcb0687018cc3c22b9622f25f3a417d6ad370e2d4dcfedf9f1410dc9c02954a7484423cc7 - languageName: node - linkType: hard - -"@jest/get-type@npm:30.1.0": - version: 30.1.0 - resolution: "@jest/get-type@npm:30.1.0" - checksum: 10/e2a95fbb49ce2d15547db8af5602626caf9b05f62a5e583b4a2de9bd93a2bfe7175f9bbb2b8a5c3909ce261d467b6991d7265bb1d547cb60e7e97f571f361a70 - languageName: node - linkType: hard - -"@jest/schemas@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/schemas@npm:30.0.5" - dependencies: - "@sinclair/typebox": "npm:^0.34.0" - checksum: 10/40df4db55d4aeed09d1c7e19caf23788309cea34490a1c5d584c913494195e698b9967e996afc27226cac6d76e7512fe73ae6b9584480695c60dd18a5459cdba - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.13 - resolution: "@jridgewell/gen-mapping@npm:0.3.13" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.0" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10/902f8261dcf450b4af7b93f9656918e02eec80a2169e155000cb2059f90113dd98f3ccf6efc6072cee1dd84cac48cade51da236972d942babc40e4c23da4d62a - 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/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0, @jridgewell/sourcemap-codec@npm:^1.5.5": - version: 1.5.5 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" - checksum: 10/5d9d207b462c11e322d71911e55e21a4e2772f71ffe8d6f1221b8eb5ae6774458c1d242f897fb0814e8714ca9a6b498abfa74dfe4f434493342902b1a48b33a5 - 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.31 - resolution: "@jridgewell/trace-mapping@npm:0.3.31" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10/da0283270e691bdb5543806077548532791608e52386cfbbf3b9e8fb00457859d1bd01d512851161c886eb3a2f3ce6fd9bcf25db8edf3bddedd275bd4a88d606 - 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.41.0": - version: 0.41.3 - resolution: "@mswjs/interceptors@npm:0.41.3" - 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" - outvariant: "npm:^1.4.3" - strict-event-emitter: "npm:^0.5.1" - checksum: 10/96b6c535fd27c8aed57f2dad380ea31e09026bf6ef960420bc0e30a2ccff269c8121f21f20423f4edd2ef1ed7db6173295950a3c4529693e6bca12eca1be4347 - languageName: node - linkType: hard - -"@napi-rs/lzma-linux-x64-gnu@npm:1.5.1": - version: 1.5.1 - resolution: "@napi-rs/lzma-linux-x64-gnu@npm:1.5.1" - conditions: os=linux & cpu=x64 & libc=glibc - 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 - -"@napi-rs/wasm-runtime@npm:^1.1.4": - version: 1.1.5 - resolution: "@napi-rs/wasm-runtime@npm:1.1.5" - dependencies: - "@tybys/wasm-util": "npm:^0.10.2" - peerDependencies: - "@emnapi/core": ^1.7.1 - "@emnapi/runtime": ^1.7.1 - checksum: 10/57a4b68f05f15b79bf45240ac173d3eaf72620d1b73261e7db407aa7ba8eb68e670fb1612d2ceef6b8cc500970a5ed6995c71c77661027971012ed2459ce307f - languageName: node - linkType: hard - -"@npmcli/agent@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/agent@npm:4.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:^11.2.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10/1a81573becc60515031accc696e6405e9b894e65c12b98ef4aeee03b5617c41948633159dbf6caf5dde5b47367eeb749bdc7b7dfb21960930a9060a935c6f636 - languageName: node - linkType: hard - -"@npmcli/arborist@npm:9.1.6": - version: 9.1.6 - resolution: "@npmcli/arborist@npm:9.1.6" - dependencies: - "@isaacs/string-locale-compare": "npm:^1.1.0" - "@npmcli/fs": "npm:^4.0.0" - "@npmcli/installed-package-contents": "npm:^3.0.0" - "@npmcli/map-workspaces": "npm:^5.0.0" - "@npmcli/metavuln-calculator": "npm:^9.0.2" - "@npmcli/name-from-folder": "npm:^3.0.0" - "@npmcli/node-gyp": "npm:^4.0.0" - "@npmcli/package-json": "npm:^7.0.0" - "@npmcli/query": "npm:^4.0.0" - "@npmcli/redact": "npm:^3.0.0" - "@npmcli/run-script": "npm:^10.0.0" - bin-links: "npm:^5.0.0" - cacache: "npm:^20.0.1" - common-ancestor-path: "npm:^1.0.1" - hosted-git-info: "npm:^9.0.0" - json-stringify-nice: "npm:^1.1.4" - lru-cache: "npm:^11.2.1" - minimatch: "npm:^10.0.3" - nopt: "npm:^8.0.0" - npm-install-checks: "npm:^7.1.0" - npm-package-arg: "npm:^13.0.0" - npm-pick-manifest: "npm:^11.0.1" - npm-registry-fetch: "npm:^19.0.0" - pacote: "npm:^21.0.2" - parse-conflict-json: "npm:^4.0.0" - proc-log: "npm:^5.0.0" - proggy: "npm:^3.0.0" - promise-all-reject-late: "npm:^1.0.0" - promise-call-limit: "npm:^3.0.1" - semver: "npm:^7.3.7" - ssri: "npm:^12.0.0" - treeverse: "npm:^3.0.0" - walk-up-path: "npm:^4.0.0" - bin: - arborist: bin/index.js - checksum: 10/cad27512c10c94b532916eff11c880b758c374f4b5b39d82dd465275548b3d21f00119332102fe3eeba012dda51c9d981013a880a980f9dfb37a2f6bd1ba1994 - 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/fs@npm:^5.0.0": - version: 5.0.0 - resolution: "@npmcli/fs@npm:5.0.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10/4935c7719d17830d0f9fa46c50be17b2a3c945cec61760f6d0909bce47677c42e1810ca673305890f9e84f008ec4d8e841182f371e42100a8159d15f22249208 - languageName: node - linkType: hard - -"@npmcli/git@npm:^6.0.0": - version: 6.0.3 - resolution: "@npmcli/git@npm:6.0.3" - dependencies: - "@npmcli/promise-spawn": "npm:^8.0.0" - ini: "npm:^5.0.0" - lru-cache: "npm:^10.0.1" - npm-pick-manifest: "npm:^10.0.0" - proc-log: "npm:^5.0.0" - promise-retry: "npm:^2.0.1" - semver: "npm:^7.3.5" - which: "npm:^5.0.0" - checksum: 10/aef520bb32c13012568dfb9f4ae90cb214d7fc45736012cd9415f0ac80f76ddf6a582f8d524adf3f4bab50e5c9d35b5370589bc630377cbfd06a618504faa689 - languageName: node - linkType: hard - -"@npmcli/git@npm:^7.0.0": - version: 7.0.1 - resolution: "@npmcli/git@npm:7.0.1" - dependencies: - "@npmcli/promise-spawn": "npm:^9.0.0" - ini: "npm:^6.0.0" - lru-cache: "npm:^11.2.1" - npm-pick-manifest: "npm:^11.0.1" - proc-log: "npm:^6.0.0" - promise-retry: "npm:^2.0.1" - semver: "npm:^7.3.5" - which: "npm:^6.0.0" - checksum: 10/dc2c7558fa034be6123b6a049091fd4fcdf79bf497ab8ff3213ac99e0c7a4f968e3cf747322af5d1d70e41ed21b8189f8e12d7b3f1a6143793d056dd8c8b50c5 - languageName: node - linkType: hard - -"@npmcli/installed-package-contents@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/installed-package-contents@npm:3.0.0" - dependencies: - npm-bundled: "npm:^4.0.0" - npm-normalize-package-bin: "npm:^4.0.0" - bin: - installed-package-contents: bin/index.js - checksum: 10/00fc2f0bdb63c510219a2d47ac0eb3cfaed9208efa4e1fe701eb976b91e6d08a533705a0629cbd3eb66a2b1a93abe8176b80723b9968ce874adbc299035f2fa5 - languageName: node - linkType: hard - -"@npmcli/installed-package-contents@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/installed-package-contents@npm:4.0.0" - dependencies: - npm-bundled: "npm:^5.0.0" - npm-normalize-package-bin: "npm:^5.0.0" - bin: - installed-package-contents: bin/index.js - checksum: 10/a3f1676ebef398639f97462c78eea3cee69b41fda63dfc1d7c83f88c75379728d78a622d93eec07a2f94456011480bcd43a73949f21d52775d9d1f8c7633abe1 - languageName: node - linkType: hard - -"@npmcli/map-workspaces@npm:^5.0.0": - version: 5.0.3 - resolution: "@npmcli/map-workspaces@npm:5.0.3" - dependencies: - "@npmcli/name-from-folder": "npm:^4.0.0" - "@npmcli/package-json": "npm:^7.0.0" - glob: "npm:^13.0.0" - minimatch: "npm:^10.0.3" - checksum: 10/72c5db2c555d64ff1300b912d1c3e738818658a90b7121a1f5ac98f48db53072ce38f1856b37677fcfefbce168d0db16d1e563452bd99f56d1ba38f83201c072 - languageName: node - linkType: hard - -"@npmcli/metavuln-calculator@npm:^9.0.2": - version: 9.0.3 - resolution: "@npmcli/metavuln-calculator@npm:9.0.3" - dependencies: - cacache: "npm:^20.0.0" - json-parse-even-better-errors: "npm:^5.0.0" - pacote: "npm:^21.0.0" - proc-log: "npm:^6.0.0" - semver: "npm:^7.3.5" - checksum: 10/562f7fd373809c7d7d3b3526998f7ed295fa80636279deaddbb7416c8251c620127a0029349e962dfb788bdbf30e2721bac063ca1a75a867d5fb62689a607bbf - languageName: node - linkType: hard - -"@npmcli/name-from-folder@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/name-from-folder@npm:3.0.0" - checksum: 10/c5a12b65def2a9e5a93b53fe6156b4a9c91e7586cda5d65d0e63af23564389b1a8eca2a24e6195bbfae7a199eaccfadd2fe4dc73b69be6ad347829885e79b66e - languageName: node - linkType: hard - -"@npmcli/name-from-folder@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/name-from-folder@npm:4.0.0" - checksum: 10/9aa8598f59866decbf4a877def4143b165964ea270056371782e459aa0c6623f020d218783651afbcc522dbf8dff4c63a316518600991f2cecfc488d23bd8aab - languageName: node - linkType: hard - -"@npmcli/node-gyp@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/node-gyp@npm:4.0.0" - checksum: 10/edfbdc66dcb35b769d27f1d34b6149957a15fdf56d6f9dd01120720f2d56dbeb825e4b2fad0eebb36855f8a741a5128683c69c2d024412d799df843c32af3d5d - languageName: node - linkType: hard - -"@npmcli/node-gyp@npm:^5.0.0": - version: 5.0.0 - resolution: "@npmcli/node-gyp@npm:5.0.0" - checksum: 10/31488b0a0a6293efc4ab1bd87ba483d1000f8720c5f068d4c28cf49e39a045cd122960ba2a166a376fc9767f457f6124d99ec673ebcb19015cd29835bb038e46 - languageName: node - linkType: hard - -"@npmcli/package-json@npm:7.0.2": - version: 7.0.2 - resolution: "@npmcli/package-json@npm:7.0.2" - dependencies: - "@npmcli/git": "npm:^7.0.0" - glob: "npm:^11.0.3" - hosted-git-info: "npm:^9.0.0" - json-parse-even-better-errors: "npm:^5.0.0" - proc-log: "npm:^6.0.0" - semver: "npm:^7.5.3" - validate-npm-package-license: "npm:^3.0.4" - checksum: 10/68dc3d50d9aa7a7a25f439606d90cb352a3c937818b3bb37ff5f69cb02bdbf5b86883cf93183a5d8f2d8810c098b1bcec7e2fe35da5017038c84cab05826c630 - languageName: node - linkType: hard - -"@npmcli/package-json@npm:^7.0.0": - version: 7.0.4 - resolution: "@npmcli/package-json@npm:7.0.4" - dependencies: - "@npmcli/git": "npm:^7.0.0" - glob: "npm:^13.0.0" - hosted-git-info: "npm:^9.0.0" - json-parse-even-better-errors: "npm:^5.0.0" - proc-log: "npm:^6.0.0" - semver: "npm:^7.5.3" - validate-npm-package-license: "npm:^3.0.4" - checksum: 10/757b343c035dbf6831ecdde3503053bf5f26399768c9ab95e24bdd5518ef61d9e71e69fa9e99ff816b178dbc174db2826939b2654c48180ba1e0dccfb7f22f22 - languageName: node - linkType: hard - -"@npmcli/promise-spawn@npm:^8.0.0": - version: 8.0.3 - resolution: "@npmcli/promise-spawn@npm:8.0.3" - dependencies: - which: "npm:^5.0.0" - checksum: 10/2585597911082437b71b84d964f05c891b80546a87a4e0f549167c1331e4662e130d20158f40962c81a5ad7460ee48cb2c4910ad5f1532fd884fea8841f63cb2 - languageName: node - linkType: hard - -"@npmcli/promise-spawn@npm:^9.0.0": - version: 9.0.1 - resolution: "@npmcli/promise-spawn@npm:9.0.1" - dependencies: - which: "npm:^6.0.0" - checksum: 10/93f539f12813dacf0084c5f444982d44c67f2016f417f2e937afb81c3fd228cf330abeabdffc95ca3e8315a4a9b9e732be7e7870c926d7dfc6c458549fcd11ea - languageName: node - linkType: hard - -"@npmcli/query@npm:^4.0.0": - version: 4.0.1 - resolution: "@npmcli/query@npm:4.0.1" - dependencies: - postcss-selector-parser: "npm:^7.0.0" - checksum: 10/00193d829c41c7d0d997e4695a15bb6ad4728358e86c2737bedf1ecb42fc12f2e37e33bec8c487ae00323566705a3a944cacec07e1d46c3707d5fa2f2f401c0e - languageName: node - linkType: hard - -"@npmcli/redact@npm:^3.0.0": - version: 3.2.2 - resolution: "@npmcli/redact@npm:3.2.2" - checksum: 10/06769db8807c342e45985379a2786f41c367953a200dfba31029d14d147fae36fe8b428b930678555dcbdb30488f471e972e927f42e3ddd5ca31f5726c1214e3 - languageName: node - linkType: hard - -"@npmcli/redact@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/redact@npm:4.0.0" - checksum: 10/5d52df2b5267f4369c97a2b2f7c427e3d7aa4b6a83e7a1b522e196f6e9d50024c620bd0cb2052067c74d1aaa0c330d9bc04e1d335bfb46180e705bb33423e74c - languageName: node - linkType: hard - -"@npmcli/run-script@npm:10.0.3, @npmcli/run-script@npm:^10.0.0": - version: 10.0.3 - resolution: "@npmcli/run-script@npm:10.0.3" - dependencies: - "@npmcli/node-gyp": "npm:^5.0.0" - "@npmcli/package-json": "npm:^7.0.0" - "@npmcli/promise-spawn": "npm:^9.0.0" - node-gyp: "npm:^12.1.0" - proc-log: "npm:^6.0.0" - which: "npm:^6.0.0" - checksum: 10/3b2b6b02a40c7470a900e8d77d23e2239608c08e919d6ddee7849fc7093be0999d9eb2c9dec871988e80165a64f9d8c55430f0a699690e555ebd3e81bf1dbd35 - languageName: node - linkType: hard - -"@nx/devkit@npm:>=21.5.2 < 23.0.0": - version: 22.3.3 - resolution: "@nx/devkit@npm:22.3.3" - dependencies: - "@zkochan/js-yaml": "npm:0.0.7" - ejs: "npm:^3.1.7" - enquirer: "npm:~2.3.6" - minimatch: "npm:9.0.3" - semver: "npm:^7.6.3" - tslib: "npm:^2.3.0" - yargs-parser: "npm:21.1.1" - peerDependencies: - nx: ">= 21 <= 23 || ^22.0.0-0" - checksum: 10/97bc2ea613ec54908e156502d3d52dbfa29c90f66cade48a0d7f8ffa401f10a14b310edd026d37aaca6fb473aa9a64ada28b44b1eadb3c5eaff80649412e5a85 - languageName: node - linkType: hard - -"@nx/nx-darwin-arm64@npm:22.7.8": - version: 22.7.8 - resolution: "@nx/nx-darwin-arm64@npm:22.7.8" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-darwin-x64@npm:22.7.8": - version: 22.7.8 - resolution: "@nx/nx-darwin-x64@npm:22.7.8" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-freebsd-x64@npm:22.7.8": - version: 22.7.8 - resolution: "@nx/nx-freebsd-x64@npm:22.7.8" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-linux-arm-gnueabihf@npm:22.7.8": - version: 22.7.8 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:22.7.8" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-gnu@npm:22.7.8": - version: 22.7.8 - resolution: "@nx/nx-linux-arm64-gnu@npm:22.7.8" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-musl@npm:22.7.8": - version: 22.7.8 - resolution: "@nx/nx-linux-arm64-musl@npm:22.7.8" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-linux-x64-gnu@npm:22.7.8": - version: 22.7.8 - resolution: "@nx/nx-linux-x64-gnu@npm:22.7.8" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-x64-musl@npm:22.7.8": - version: 22.7.8 - resolution: "@nx/nx-linux-x64-musl@npm:22.7.8" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-win32-arm64-msvc@npm:22.7.8": - version: 22.7.8 - resolution: "@nx/nx-win32-arm64-msvc@npm:22.7.8" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-win32-x64-msvc@npm:22.7.8": - version: 22.7.8 - resolution: "@nx/nx-win32-x64-msvc@npm:22.7.8" - 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.2 - resolution: "@octokit/core@npm:5.2.2" - 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/0c39b43e562a8acf8f1d563a85f3c0e55e6d678ae16a4b3d6341060b3d5315c021dfa1bd15dc818fa4cc5612eb5cd518b13cb7c194e3c92ca3da9c0dc6a854b5 - 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 - -"@oxc-project/types@npm:=0.133.0": - version: 0.133.0 - resolution: "@oxc-project/types@npm:0.133.0" - checksum: 10/de44f653a9e0c0267309122f1f184120c6869af4382218a6bf4a320c5150743eb00b5e8641b04917666281995ed0fe6381561922a48a28082a75bb122acf3ac6 - languageName: node - linkType: hard - -"@poppinss/colors@npm:^4.1.5": - version: 4.1.6 - resolution: "@poppinss/colors@npm:4.1.6" - dependencies: - kleur: "npm:^4.1.5" - checksum: 10/61a7a601e68e0d473058f6cd861169ed7642e3891bcbe31d1a5e8f84a832026f98e9aa50f3cc09c2fe092de469ecacd764c793a68d2459a5c87a49134876209c - languageName: node - linkType: hard - -"@poppinss/dumper@npm:^0.6.4": - version: 0.6.5 - resolution: "@poppinss/dumper@npm:0.6.5" - dependencies: - "@poppinss/colors": "npm:^4.1.5" - "@sindresorhus/is": "npm:^7.0.2" - supports-color: "npm:^10.0.0" - checksum: 10/90adbd73addf42c8ed4f519fd0f1fa958f1e83a65e7e2eab775c05156ea1576962cd2c495d8c939b8a5c9097932fe8f8df34e62b69e98fe78b79e37f5c4085c6 - languageName: node - linkType: hard - -"@poppinss/exception@npm:^1.2.2": - version: 1.2.3 - resolution: "@poppinss/exception@npm:1.2.3" - checksum: 10/dda850dbaf1e889110a9221604f38b68b24137b39a3127299707ace5d091b875766bad40774ee4cffcb6aebf543251b9e2b7071b0ed4b4c8958f481206d2b372 - languageName: node - linkType: hard - -"@publint/pack@npm:^0.1.6": - version: 0.1.6 - resolution: "@publint/pack@npm:0.1.6" - dependencies: - tinyexec: "npm:^1.2.4" - checksum: 10/f1348e48c5926bfeab37b155670c774e89896d9b337f24b8802279fd52e0ae178d2c8207da54e29011ddeb75bbb3daaf75627f886ba1df25d7be5dfca84b9a28 - languageName: node - linkType: hard - -"@rolldown/binding-android-arm64@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-android-arm64@npm:1.0.3" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@rolldown/binding-darwin-arm64@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-darwin-arm64@npm:1.0.3" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@rolldown/binding-darwin-x64@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-darwin-x64@npm:1.0.3" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@rolldown/binding-freebsd-x64@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-freebsd-x64@npm:1.0.3" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.3" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@rolldown/binding-linux-arm64-gnu@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.3" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@rolldown/binding-linux-arm64-musl@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.3" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rolldown/binding-linux-ppc64-gnu@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.0.3" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@rolldown/binding-linux-s390x-gnu@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.0.3" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@rolldown/binding-linux-x64-gnu@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.3" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@rolldown/binding-linux-x64-musl@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.3" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@rolldown/binding-openharmony-arm64@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.3" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@rolldown/binding-wasm32-wasi@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.3" - dependencies: - "@emnapi/core": "npm:1.10.0" - "@emnapi/runtime": "npm:1.10.0" - "@napi-rs/wasm-runtime": "npm:^1.1.4" - conditions: cpu=wasm32 - languageName: node - linkType: hard - -"@rolldown/binding-win32-arm64-msvc@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.3" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@rolldown/binding-win32-x64-msvc@npm:1.0.3": - version: 1.0.3 - resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.3" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@rolldown/pluginutils@npm:^1.0.0": - version: 1.0.1 - resolution: "@rolldown/pluginutils@npm:1.0.1" - checksum: 10/4e95cf9ce23d75e5aa03ea0249cd86f7d1e21f83fbf6f8520e4edd8a251ba1b82c4ba9bc13cd24b6c4661daec6225b06e6d35c64c604e731b230b2a49af47d05 - languageName: node - linkType: hard - -"@rollup/rollup-android-arm-eabi@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.59.0" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@rollup/rollup-android-arm-eabi@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.62.4" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@rollup/rollup-android-arm64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-android-arm64@npm:4.59.0" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-android-arm64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-android-arm64@npm:4.62.4" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-arm64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.59.0" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-arm64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-darwin-arm64@npm:4.62.4" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-x64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.59.0" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-x64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-darwin-x64@npm:4.62.4" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-arm64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.59.0" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-arm64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.62.4" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-x64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-freebsd-x64@npm:4.59.0" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-x64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-freebsd-x64@npm:4.62.4" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-gnueabihf@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.59.0" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-gnueabihf@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.62.4" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-musleabihf@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.59.0" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-musleabihf@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.62.4" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.59.0" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.62.4" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-musl@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.59.0" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-musl@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.62.4" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-loong64-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.59.0" - conditions: os=linux & cpu=loong64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-loong64-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.62.4" - conditions: os=linux & cpu=loong64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-loong64-musl@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-loong64-musl@npm:4.59.0" - conditions: os=linux & cpu=loong64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-loong64-musl@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-loong64-musl@npm:4.62.4" - conditions: os=linux & cpu=loong64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-ppc64-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.59.0" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-ppc64-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.62.4" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-ppc64-musl@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.59.0" - conditions: os=linux & cpu=ppc64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-ppc64-musl@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.62.4" - conditions: os=linux & cpu=ppc64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.59.0" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.62.4" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-musl@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.59.0" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-musl@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.62.4" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-s390x-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.59.0" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-s390x-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.62.4" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.59.0" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.62.4" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-musl@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.59.0" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-musl@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.62.4" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-openbsd-x64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-openbsd-x64@npm:4.59.0" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-openbsd-x64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-openbsd-x64@npm:4.62.4" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-openharmony-arm64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-openharmony-arm64@npm:4.59.0" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-openharmony-arm64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-openharmony-arm64@npm:4.62.4" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-arm64-msvc@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.59.0" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-arm64-msvc@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.62.4" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-ia32-msvc@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.59.0" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@rollup/rollup-win32-ia32-msvc@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.62.4" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-win32-x64-gnu@npm:4.59.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-win32-x64-gnu@npm:4.62.4" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-msvc@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.59.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-msvc@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.62.4" - 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:^4.0.0": - version: 4.0.0 - resolution: "@sigstore/bundle@npm:4.0.0" - dependencies: - "@sigstore/protobuf-specs": "npm:^0.5.0" - checksum: 10/09ef32284783cdcdcc7ecd16711f1d1be6b6fc6abe22bf7434071a6d3aa3512d15f68a4cc481513569a55a001c5bd112edfccbea7b3c16b5aa1557f73773f504 - languageName: node - linkType: hard - -"@sigstore/core@npm:^3.2.0, @sigstore/core@npm:^3.2.1": - version: 3.2.1 - resolution: "@sigstore/core@npm:3.2.1" - checksum: 10/2f6c1ced55f8ed3f7fc705a668eb95db9471511dfb1f054927822bf97a051dd62228ecf6a9f1932d240c2c4ae69a3b5066550789e5ad8f4257839a4370e5a120 - languageName: node - linkType: hard - -"@sigstore/protobuf-specs@npm:^0.5.0": - version: 0.5.0 - resolution: "@sigstore/protobuf-specs@npm:0.5.0" - checksum: 10/98e84c5df1b5828e96a4c3cd39aca1ab069de53f0eaf4d0844ee50a19a15bff5707663e78eead7c27745fea3c55a37edfe5569242a1c695a146459159c104450 - languageName: node - linkType: hard - -"@sigstore/sign@npm:^4.1.1": - version: 4.1.1 - resolution: "@sigstore/sign@npm:4.1.1" - dependencies: - "@gar/promise-retry": "npm:^1.0.2" - "@sigstore/bundle": "npm:^4.0.0" - "@sigstore/core": "npm:^3.2.0" - "@sigstore/protobuf-specs": "npm:^0.5.0" - make-fetch-happen: "npm:^15.0.4" - proc-log: "npm:^6.1.0" - checksum: 10/c9424813ed83ae26111dd3a190dbfd776901cfc245ebb9aa68e133a7ffcbf8fc053f01d999a451e44805a291921ba4d2dfe80e3fd41b20cd5becd26aae5f5e7c - languageName: node - linkType: hard - -"@sigstore/tuf@npm:^4.0.2": - version: 4.0.2 - resolution: "@sigstore/tuf@npm:4.0.2" - dependencies: - "@sigstore/protobuf-specs": "npm:^0.5.0" - tuf-js: "npm:^4.1.0" - checksum: 10/14882b8e71be4185ec417744b97a47392a50da00aafd4207a46bb74b40aa019ebf22d928052fd2d31a8da0da1efe7ebebac5a70898b31a74239a1ada997be754 - languageName: node - linkType: hard - -"@sigstore/verify@npm:^3.1.1": - version: 3.1.1 - resolution: "@sigstore/verify@npm:3.1.1" - dependencies: - "@sigstore/bundle": "npm:^4.0.0" - "@sigstore/core": "npm:^3.2.1" - "@sigstore/protobuf-specs": "npm:^0.5.0" - checksum: 10/4cb24b0e62b85ebf2b62698041e0dc212d152fd40a95c05c237357c992265a23e5789f86b138bea2eea0c5f6b994974d968f03dde9c692a514f96ae4b26f31a9 - languageName: node - linkType: hard - -"@sinclair/typebox@npm:^0.34.0": - version: 0.34.47 - resolution: "@sinclair/typebox@npm:0.34.47" - checksum: 10/a7f279020ae45ce21636424ec6439f0e302c28196ed7d2cddf2f80899580cb454f07ce3a033a1aea7ecbcfe47cefd9801c7514bf3adaaecfd1b7d9c83ca3eb9f - 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/is@npm:^7.0.2": - version: 7.2.0 - resolution: "@sindresorhus/is@npm:7.2.0" - checksum: 10/d4f93d0fae3a799e1cb1cf31cdcc77f087f4203e2659e25afd7296493d9b4d430f37c4193404f56658d220a7467928fd2b29946dc141218bf42a2d2ebf8597fb - 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 - -"@speed-highlight/core@npm:^1.2.7": - version: 1.2.14 - resolution: "@speed-highlight/core@npm:1.2.14" - checksum: 10/83b32757204b80eb9ba0d8be4a4a1925abdd7d3761685d8ec9cc7a3d2bfa95a45c2f301b813aa25d673f1f405fa1de6772abd0022a0ce595af0d9f2958cf8151 - languageName: node - linkType: hard - -"@standard-schema/spec@npm:^1.1.0": - version: 1.1.0 - resolution: "@standard-schema/spec@npm:1.1.0" - checksum: 10/a209615c9e8b2ea535d7db0a5f6aa0f962fd4ab73ee86a46c100fb78116964af1f55a27c1794d4801e534a196794223daa25ff5135021e03c7828aa3d95e1763 - languageName: node - linkType: hard - -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.12 - resolution: "@tsconfig/node10@npm:1.0.12" - checksum: 10/27e2f989dbb20f773aa121b609a5361a473b7047ff286fce7c851e61f5eec0c74f0bdb38d5bd69c8a06f17e60e9530188f2219b1cbeabeac91f0a5fd348eac2a - 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:4.1.0": - version: 4.1.0 - resolution: "@tufjs/models@npm:4.1.0" - dependencies: - "@tufjs/canonical-json": "npm:2.0.0" - minimatch: "npm:^10.1.1" - checksum: 10/144d58b634ff96bba8f3cc2577868a0c5dd5bb4515c191edc2a9971245fe3694603b56f0515fd4f7b2f1fb73642d4a36b59b0094ba773fe1c14550915bc9af43 - languageName: node - linkType: hard - -"@tybys/wasm-util@npm:0.9.0, @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 - -"@tybys/wasm-util@npm:^0.10.2": - version: 0.10.2 - resolution: "@tybys/wasm-util@npm:0.10.2" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/d12f1dafe12d7a573c406b35ffef0038042b9cc9fbcc74d657267eb635499b956276afc05eebdbd81bea582e1c4c921421a1dd7243a93daaa8c8216b19395c23 - languageName: node - linkType: hard - -"@types/chai@npm:^5.2.2": - version: 5.2.3 - resolution: "@types/chai@npm:5.2.3" - dependencies: - "@types/deep-eql": "npm:*" - assertion-error: "npm:^2.0.1" - checksum: 10/e79947307dc235953622e65f83d2683835212357ca261389116ab90bed369ac862ba28b146b4fed08b503ae1e1a12cb93ce783f24bb8d562950469f4320e1c7c - languageName: node - linkType: hard - -"@types/deep-eql@npm:*": - version: 4.0.2 - resolution: "@types/deep-eql@npm:4.0.2" - checksum: 10/249a27b0bb22f6aa28461db56afa21ec044fa0e303221a62dff81831b20c8530502175f1a49060f7099e7be06181078548ac47c668de79ff9880241968d43d0c - languageName: node - linkType: hard - -"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0": - version: 1.0.8 - resolution: "@types/estree@npm:1.0.8" - checksum: 10/25a4c16a6752538ffde2826c2cc0c6491d90e69cd6187bef4a006dd2c3c45469f049e643d7e516c515f21484dc3d48fd5c870be158a5beb72f5baf3dc43e4099 - languageName: node - linkType: hard - -"@types/estree@npm:1.0.9": - version: 1.0.9 - resolution: "@types/estree@npm:1.0.9" - checksum: 10/16aabfa703b5bdac83f719b07ce92a11b2d3c9b8628eacc92889d8af46cab2d78fc45c7b5378de383d0500585cea5c2f79125eeddfe5fbc6bd6a27eb0c8ccee5 - 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:24.13.3": - version: 24.13.3 - resolution: "@types/node@npm:24.13.3" - dependencies: - undici-types: "npm:~7.18.0" - checksum: 10/cfa6ed1e16c4624d1e83b09aeb72a2f50a7e17d837bf5a1259a52e346f33a693afd289402d3b6118ce3abea7aff35f2a4f13a0284b96bc5807a50f0e22e1ec77 - languageName: node - linkType: hard - -"@types/node@npm:26.1.2": - version: 26.1.2 - resolution: "@types/node@npm:26.1.2" - dependencies: - undici-types: "npm:~8.3.0" - checksum: 10/2dd6d75b80c006deab4e381acc8cb2e3d634f10141f05fd6cadaabddd80a95f04aef7b00a574bd8fd5e08e940b899c23b91dd09a70b11a34a2762203b5eea25e - 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:4.1.10": - version: 4.1.10 - resolution: "@vitest/expect@npm:4.1.10" - dependencies: - "@standard-schema/spec": "npm:^1.1.0" - "@types/chai": "npm:^5.2.2" - "@vitest/spy": "npm:4.1.10" - "@vitest/utils": "npm:4.1.10" - chai: "npm:^6.2.2" - tinyrainbow: "npm:^3.1.0" - checksum: 10/487fcad404a68968a54ae5fb9d099f12170cd793420a04b34a5606516317090c50a8303ab687c70166ee181864e3e138941d4a96d0405434dcd37696b3105350 - languageName: node - linkType: hard - -"@vitest/mocker@npm:4.1.10": - version: 4.1.10 - resolution: "@vitest/mocker@npm:4.1.10" - dependencies: - "@vitest/spy": "npm:4.1.10" - estree-walker: "npm:^3.0.3" - magic-string: "npm:^0.30.21" - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - checksum: 10/ae9645d1bcdad3ab7de7182feb4f1c9148a5ff97cef19581eec9257112aace94889eee9a1ad12e40ce59453ac05f52453b5fdb49ff76a31af8ccdbaaa4471ef3 - languageName: node - linkType: hard - -"@vitest/pretty-format@npm:4.1.10": - version: 4.1.10 - resolution: "@vitest/pretty-format@npm:4.1.10" - dependencies: - tinyrainbow: "npm:^3.1.0" - checksum: 10/e4f6907143ab0e40dda29d70b17027586c92921d622091321f10512e660b3995dcee7aa56e17b750b72560f295e25f96035372348415f18ebfd39b66a55b4704 - languageName: node - linkType: hard - -"@vitest/runner@npm:4.1.10": - version: 4.1.10 - resolution: "@vitest/runner@npm:4.1.10" - dependencies: - "@vitest/utils": "npm:4.1.10" - pathe: "npm:^2.0.3" - checksum: 10/2c962cb13af0880990036808a35679b7ac6657c8f542490234c2faa6ffd2ab080ac6bf21b487c64d84aa635cfb37b49eb679098c2003a100dfc6c4d5e87bf055 - languageName: node - linkType: hard - -"@vitest/snapshot@npm:4.1.10": - version: 4.1.10 - resolution: "@vitest/snapshot@npm:4.1.10" - dependencies: - "@vitest/pretty-format": "npm:4.1.10" - "@vitest/utils": "npm:4.1.10" - magic-string: "npm:^0.30.21" - pathe: "npm:^2.0.3" - checksum: 10/7940d83ffd2fbebf9a04ea31e196b7e8bf981093ec739950959fe8dd29caa33c80823780fb4b1063d9459c44a0a8d8b2748c00dfb6941becd7404e6d687eea01 - languageName: node - linkType: hard - -"@vitest/spy@npm:4.1.10": - version: 4.1.10 - resolution: "@vitest/spy@npm:4.1.10" - checksum: 10/7c1b79a95474338e0659f0f2e43be4df1ef7939ff5b37b044954e0287582947803bd417508f44a7f244809672309d9b3dd67660b704ec3fe7f323cc958ae47a3 - languageName: node - linkType: hard - -"@vitest/utils@npm:4.1.10": - version: 4.1.10 - resolution: "@vitest/utils@npm:4.1.10" - dependencies: - "@vitest/pretty-format": "npm:4.1.10" - convert-source-map: "npm:^2.0.0" - tinyrainbow: "npm:^3.1.0" - checksum: 10/95484aad55c7b00bbcd4963e27cbb86fe207620a6093973d68da9d0a06bad37c388d84c9ab43d5f35d88e46c8f376a5592d9c54c025c958361160f4802bb25ee - 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 - -"@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:^3.0.0": - version: 3.0.1 - resolution: "abbrev@npm:3.0.1" - checksum: 10/ebd2c149dda6f543b66ce3779ea612151bb3aa9d0824f169773ee9876f1ca5a4e0adbcccc7eed048c04da7998e1825e2aa76fcca92d9e67dea50ac2b0a58dc2e - languageName: node - linkType: hard - -"abbrev@npm:^4.0.0": - version: 4.0.0 - resolution: "abbrev@npm:4.0.0" - checksum: 10/e2f0c6a6708ad738b3e8f50233f4800de31ad41a6cdc50e0cbe51b76fed69fd0213516d92c15ce1a9985fca71a14606a9be22bf00f8475a58987b9bfb671c582 - 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.11.0, acorn@npm:^8.15.0, acorn@npm:^8.4.1": - version: 8.15.0 - resolution: "acorn@npm:8.15.0" - bin: - acorn: bin/acorn - checksum: 10/77f2de5051a631cf1729c090e5759148459cdb76b5f5c70f890503d629cf5052357b0ce783c0f976dd8a93c5150f59f6d18df1def3f502396a20f81282482fa4 - 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:6, agent-base@npm:6.0.2": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: "npm:4" - checksum: 10/21fb903e0917e5cb16591b4d0ef6a028a54b83ac30cd1fca58dece3d4e0990512a8723f9f83130d88a41e2af8b1f7be1386fda3ea2d181bb1a62155e75e95e23 - languageName: node - linkType: hard - -"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": - version: 7.1.4 - resolution: "agent-base@npm:7.1.4" - checksum: 10/79bef167247789f955aaba113bae74bf64aa1e1acca4b1d6bb444bdf91d82c3e07e9451ef6a6e2e35e8f71a6f97ce33e3d855a5328eb9fad1bc3cc4cfd031ed8 - 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:24.13.3" - bundlewatch: "npm:0.4.2" - execa: "npm:10.0.1" - lerna: "npm:9.0.7" - rollup: "npm:4.62.4" - typescript: "npm:5.9.3" - languageName: unknown - linkType: soft - -"algoliasearch@workspace:packages/algoliasearch": - version: 0.0.0-use.local - resolution: "algoliasearch@workspace:packages/algoliasearch" - dependencies: - "@algolia/abtesting": "npm:1.22.0" - "@algolia/client-abtesting": "npm:5.56.0" - "@algolia/client-analytics": "npm:5.56.0" - "@algolia/client-common": "npm:5.56.0" - "@algolia/client-insights": "npm:5.56.0" - "@algolia/client-personalization": "npm:5.56.0" - "@algolia/client-query-suggestions": "npm:5.56.0" - "@algolia/client-search": "npm:5.56.0" - "@algolia/ingestion": "npm:1.56.0" - "@algolia/monitoring": "npm:1.56.0" - "@algolia/recommend": "npm:5.56.0" - "@algolia/requester-browser-xhr": "npm:5.56.0" - "@algolia/requester-fetch": "npm:5.56.0" - "@algolia/requester-node-http": "npm:5.56.0" - "@algolia/requester-testing": "npm:5.56.0" - "@arethetypeswrong/cli": "npm:0.18.5" - "@cloudflare/vitest-pool-workers": "npm:0.20.1" - "@cloudflare/workers-types": "npm:5.20260801.1" - "@types/node": "npm:26.1.2" - jsdom: "npm:30.0.1" - publint: "npm:0.3.22" - rollup: "npm:4.62.4" - tsup: "npm:8.5.1" - typescript: "npm:5.9.3" - vitest: "npm:4.1.10" - languageName: unknown - linkType: soft - -"ansi-colors@npm:4.1.3, 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:^7.0.0": - version: 7.2.0 - resolution: "ansi-escapes@npm:7.2.0" - dependencies: - environment: "npm:^1.0.0" - checksum: 10/0d03e8a39aed844dc40e69891ef21f09bd12e481876e3d1daea711fa19334e698a9b077d87e4027fb3af4686e9609237cd986285755465a7793bd7192fd115f9 - languageName: node - linkType: hard - -"ansi-regex@npm:5.0.1, 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.2.2 - resolution: "ansi-regex@npm:6.2.2" - checksum: 10/9b17ce2c6daecc75bcd5966b9ad672c23b184dc3ed9bf3c98a0702f0d2f736c15c10d461913568f2cf527a5e64291c7473358885dd493305c84a1cfed66ba94f - languageName: node - linkType: hard - -"ansi-styles@npm:4.3.0, 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.2.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.3 - resolution: "ansi-styles@npm:6.2.3" - checksum: 10/c49dad7639f3e48859bd51824c93b9eb0db628afc243c51c3dd2410c4a15ede1a83881c6c7341aa2b159c4f90c11befb38f2ba848c07c66c9f9de4bcd7cb9f30 - 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:2.0.1, argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 10/18640244e641a417ec75a9bd38b0b2b6b95af5199aa241b131d4b2fb206f334d7ecc600bd194861610a5579084978bfcbb02baa399dbe442d56d0ae5e60dbaef - 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 - -"arrify@npm:^1.0.1": - version: 1.0.1 - resolution: "arrify@npm:1.0.1" - checksum: 10/745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 - 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-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-function@npm:1.0.0" - checksum: 10/1a09379937d846f0ce7614e75071c12826945d4e417db634156bf0e4673c495989302f52186dfa9767a1d9181794554717badd193ca2bbab046ef1da741d8efd - languageName: node - linkType: hard - -"async-generator-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-generator-function@npm:1.0.0" - checksum: 10/3d49e7acbeee9e84537f4cb0e0f91893df8eba976759875ae8ee9e3d3c82f6ecdebdb347c2fad9926b92596d93cdfc78ecc988bcdf407e40433e8e8e6fe5d78e - languageName: node - linkType: hard - -"async@npm:^3.2.6": - version: 3.2.6 - resolution: "async@npm:3.2.6" - checksum: 10/cb6e0561a3c01c4b56a799cc8bab6ea5fef45f069ab32500b6e19508db270ef2dffa55e5aed5865c5526e9907b1f8be61b27530823b411ffafb5e1538c86c368 - languageName: node - linkType: hard - -"asynckit@npm:0.4.0, asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10/3ce727cbc78f69d6a4722517a58ee926c8c21083633b1d3fdf66fd688f6c127a53a592141bd4866f9b63240a86e9d8e974b13919450bd17fa33c2d22c4558ad8 - languageName: node - linkType: hard - -"axios@npm:^1.19.0": - version: 1.19.0 - resolution: "axios@npm:1.19.0" - dependencies: - follow-redirects: "npm:^1.16.0" - form-data: "npm:^4.0.6" - https-proxy-agent: "npm:^5.0.1" - proxy-from-env: "npm:^2.1.0" - checksum: 10/d27e263b003f2dc1e6d0e2ab062dbc7c2b15668c25723e1e2072f139505c1fbd1f8cffef77d5ec05bb8e3cefa6fc5325c6446e747669fd95d85519529fa0db0b - languageName: node - linkType: hard - -"balanced-match@npm:4.0.3": - version: 4.0.3 - resolution: "balanced-match@npm:4.0.3" - checksum: 10/e9e2177f1eb7db0af2375715e6f992f15d41518921e14f5029de50766ff1b3da824e47e1d5492493e9bb7c743b827e42546cbc260a055b7086e45f54b2b152b9 - 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 - -"balanced-match@npm:^4.0.2": - version: 4.0.4 - resolution: "balanced-match@npm:4.0.4" - checksum: 10/fb07bb66a0959c2843fc055838047e2a95ccebb837c519614afb067ebfdf2fa967ca8d712c35ced07f2cd26fc6f07964230b094891315ad74f11eba3d53178a0 - languageName: node - linkType: hard - -"base64-js@npm:1.5.1, 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 - -"bidi-js@npm:^1.0.3": - version: 1.0.3 - resolution: "bidi-js@npm:1.0.3" - dependencies: - require-from-string: "npm:^2.0.2" - checksum: 10/c4341c7a98797efe3d186cd99d6f97e9030a4f959794ca200ef2ec0a678483a916335bba6c2c0608a21d04a221288a31c9fd0faa0cd9b3903b93594b42466a6a - languageName: node - linkType: hard - -"bin-links@npm:^5.0.0": - version: 5.0.0 - resolution: "bin-links@npm:5.0.0" - dependencies: - cmd-shim: "npm:^7.0.0" - npm-normalize-package-bin: "npm:^4.0.0" - proc-log: "npm:^5.0.0" - read-cmd-shim: "npm:^5.0.0" - write-file-atomic: "npm:^6.0.0" - checksum: 10/9691c59e084d3243ddfa47435c03bb8f5a44d1fb971152b68009ca1a20267303189c7d6f5f51a4abdc93288574acbcd1698a452da6543960856b70a734b9dcef - languageName: node - linkType: hard - -"bl@npm:4.1.0, bl@npm:^4.0.3": - 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:5.0.8": - version: 5.0.8 - resolution: "brace-expansion@npm:5.0.8" - dependencies: - balanced-match: "npm:^4.0.2" - checksum: 10/75d2d2ebc8f5f65156d16706216d23e48f499a1164e4b045e0ca4045d3ce6b16ced11ea2e4c76e3670b6c38454123213f43d23127df8fc6840980aea9a35e061 - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.18 - resolution: "brace-expansion@npm:1.1.18" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10/b55a3c03239b8d2127c7cbb3408c9ad3a556a8c303bf3064df78bfb7c093160fc8f6e0a32e42a850a78eba12f29ccf6ef997690b9acf945d242c56c61c4aa977 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.2 - resolution: "brace-expansion@npm:2.0.2" - dependencies: - balanced-match: "npm:^1.0.0" - checksum: 10/01dff195e3646bc4b0d27b63d9bab84d2ebc06121ff5013ad6e5356daa5a9d6b60fa26cf73c74797f2dc3fbec112af13578d51f75228c1112b26c790a87b0488 - languageName: node - linkType: hard - -"brace-expansion@npm:^5.0.5": - version: 5.0.9 - resolution: "brace-expansion@npm:5.0.9" - dependencies: - balanced-match: "npm:^4.0.2" - checksum: 10/d8683d612919212c7cf298861acd1c15101e7e2ad186e7ae9747390e5b3fc9e9b55ce71107570d32985784d9d88fbbe438d725863aed7b0f3d08d5f080535eec - 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.7.1, 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.2": - version: 0.4.2 - resolution: "bundlewatch@npm:0.4.2" - dependencies: - axios: "npm:^0.31.1" - 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/844aef38c938c7729d4a3cf24309f7e25ed173e39608cf6ef36541979332fe828c433cd419b85b3401e2db84496c55dc4e2c5152b12d20b1e535812e3e553b0b - 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:^20.0.0, cacache@npm:^20.0.1": - version: 20.0.3 - resolution: "cacache@npm:20.0.3" - dependencies: - "@npmcli/fs": "npm:^5.0.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^13.0.0" - lru-cache: "npm:^11.1.0" - 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:^13.0.0" - unique-filename: "npm:^5.0.0" - checksum: 10/388a0169970df9d051da30437f93f81b7e91efb570ad0ff2b8fde33279fbe726c1bc8e8e2b9c05053ffb4f563854c73db395e8712e3b62347a1bc4f7fb8899ff - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:1.0.2, 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:^6.2.2": - version: 6.2.2 - resolution: "chai@npm:6.2.2" - checksum: 10/13cda42cc40aa46da04a41cf7e5c61df6b6ae0b4e8a8c8b40e04d6947e4d7951377ea8c14f9fa7fe5aaa9e8bd9ba414f11288dc958d4cee6f5221b9436f2778f - 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.1.2, chalk@npm:^4.0.0, chalk@npm:^4.1.0, 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.6.2 - resolution: "chalk@npm:5.6.2" - checksum: 10/1b2f48f6fba1370670d5610f9cd54c391d6ede28f4b7062dd38244ea5768777af72e5be6b74fb6c6d54cb84c4a2dff3f3afa9b7cb5948f7f022cfd3d087989e0 - 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:^2.1.1": - version: 2.1.1 - resolution: "chardet@npm:2.1.1" - checksum: 10/d56913b65e45c5c86f331988e2ef6264c131bfeadaae098ee719bf6610546c77740e37221ffec802dde56b5e4466613a4c754786f4da6b5f6c5477243454d324 - 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:^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:4.3.1, ci-info@npm:^4.0.0": - version: 4.3.1 - resolution: "ci-info@npm:4.3.1" - checksum: 10/9dc952bef67e665ccde2e7a552d42d5d095529d21829ece060a00925ede2dfa136160c70ef2471ea6ed6c9b133218b47c007f56955c0f1734a2e57f240aa7445 - 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 - -"cjs-module-lexer@npm:1.2.3": - version: 1.2.3 - resolution: "cjs-module-lexer@npm:1.2.3" - checksum: 10/f96a5118b0a012627a2b1c13bd2fcb92509778422aaa825c5da72300d6dcadfb47134dd2e9d97dfa31acd674891dd91642742772d19a09a8adc3e56bd2f5928c - 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:^4.1.0": - version: 4.1.0 - resolution: "cli-width@npm:4.1.0" - checksum: 10/b58876fbf0310a8a35c79b72ecfcf579b354e18ad04e6b20588724ea2b522799a758507a37dfe132fafaf93a9922cafd9514d9e1598e6b2cd46694853aed099f - languageName: node - linkType: hard - -"cliui@npm:8.0.1, 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 - -"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 - -"clone@npm:1.0.4, 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": - version: 6.0.3 - resolution: "cmd-shim@npm:6.0.3" - checksum: 10/791c9779cf57deae978ef24daf7e49e7fdb2070cc273aa7d691ed258a660ad3861edbc9f39daa2b6e5f72a64526b6812c04f08becc54402618b99946ccad7d71 - languageName: node - linkType: hard - -"cmd-shim@npm:^7.0.0": - version: 7.0.0 - resolution: "cmd-shim@npm:7.0.0" - checksum: 10/2286f95099b4e748afacb4cd3218e2c4514ee7ced30bb321cfe0151ae1769bceeca8b925433d8e69b048b8038615c7c1c8165ea902814f8f3e13125499050e98 - languageName: node - linkType: hard - -"color-convert@npm:2.0.1, 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.1.4, 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-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 - -"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, 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 - -"confbox@npm:^0.1.8": - version: 0.1.8 - resolution: "confbox@npm:0.1.8" - checksum: 10/4ebcfb1c6a3b25276734ec5722e88768eb61fc02f98e11960b845c5c62bc27fd05f493d2a8244d9675b24ef95afe4c0d511cdcad02c72f5eeea463cc26687999 - 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 - -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 10/c987be3ec061348cdb3c2bfb924bec86dea1eacad10550a85ca23edb0fe3556c3a61c7399114f3331ccb3499d7fd0285ab24566e5745929412983494c3926e15 - languageName: node - linkType: hard - -"cookie@npm:^1.0.2": - version: 1.1.1 - resolution: "cookie@npm:1.1.1" - checksum: 10/85538153054791155cf4d38d2e807e3b9382d71bf71d92fc46fca348515ea574049d0d9ef8eb84d2d54a681ad1d7a7316b1989b901dace50a6c0f4c3858dbdb2 - 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 - -"css-tree@npm:^3.0.0, css-tree@npm:^3.2.1": - version: 3.2.1 - resolution: "css-tree@npm:3.2.1" - dependencies: - mdn-data: "npm:2.27.1" - source-map-js: "npm:^1.2.1" - checksum: 10/9945b387bdec756738c34d64b8287f05ca6645f51d1c8abaaa5822ec3e74533604103aaad164b8100afd8495e92120be7c1c6afbe5be89f867acc5b456ddd79c - 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 - -"dargs@npm:^7.0.0": - version: 7.0.0 - resolution: "dargs@npm:7.0.0" - checksum: 10/b8f1e3cba59c42e1f13a114ad4848c3fc1cf7470f633ee9e9f1043762429bc97d91ae31b826fb135eefde203a3fdb20deb0c0a0222ac29d937b8046085d668d1 - languageName: node - linkType: hard - -"data-urls@npm:^7.0.0": - version: 7.0.0 - resolution: "data-urls@npm:7.0.0" - dependencies: - whatwg-mimetype: "npm:^5.0.0" - whatwg-url: "npm:^16.0.0" - checksum: 10/60f88ded4306aea5d6251c4db100ca272fc026014004d68aad4db495397a73bb39d17a6bd29ed9ab348c88a28f6e97266a1759985df4e12dc8c02bb8544c7731 - 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.4.3, debug@npm:^4.3.4, debug@npm:^4.4.0, debug@npm:^4.4.3": - version: 4.4.3 - resolution: "debug@npm:4.4.3" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10/9ada3434ea2993800bd9a1e320bd4aa7af69659fb51cca685d390949434bc0a8873c21ed7c9b852af6f2455a55c6d050aa3937d52b3c69f796dab666f762acad - 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.6.0": - version: 10.6.0 - resolution: "decimal.js@npm:10.6.0" - checksum: 10/c0d45842d47c311d11b38ce7ccc911121953d4df3ebb1465d92b31970eb4f6738a065426a06094af59bee4b0d64e42e7c8984abd57b6767c64ea90cf90bb4a69 - 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 - -"defaults@npm:1.0.4, 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, 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 - -"delayed-stream@npm:1.0.0, 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-libc@npm:^2.0.3, detect-libc@npm:^2.1.2": - version: 2.1.2 - resolution: "detect-libc@npm:2.1.2" - checksum: 10/b736c8d97d5d46164c0d1bed53eb4e6a3b1d8530d460211e2d52f1c552875e706c58a5376854e4e54f8b828c9cada58c855288c968522eb93ac7696d65970766 - languageName: node - linkType: hard - -"diff@npm:^4.0.1": - version: 4.0.4 - resolution: "diff@npm:4.0.4" - checksum: 10/5019b3f5ae124ea9e95137119e1a83a59c252c75ddac873cc967832fd7a834570a58a4d58b941bdbd07832ebf98dcb232b27c561b7f5584357da6dae59bcac62 - 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:12.0.3": - version: 12.0.3 - resolution: "dotenv-expand@npm:12.0.3" - dependencies: - dotenv: "npm:^16.4.5" - checksum: 10/d9aaf051805c8fa64e7e3620936ecb38229a93f5603883e53856d6f57cd4ae93fb74baefdf0b03b1c0608bc3eefbbcb23912972d7303b6191a5c0e1688a8652f - languageName: node - linkType: hard - -"dotenv@npm:16.4.7": - version: 16.4.7 - resolution: "dotenv@npm:16.4.7" - checksum: 10/f13bfe97db88f0df4ec505eeffb8925ec51f2d56a3d0b6d916964d8b4af494e6fb1633ba5d09089b552e77ab2a25de58d70259b2c5ed45ec148221835fc99a0c - languageName: node - linkType: hard - -"dotenv@npm:^16.4.5": - version: 16.6.1 - resolution: "dotenv@npm:16.6.1" - checksum: 10/1d1897144344447ffe62aa1a6d664f4cd2e0784e0aff787eeeec1940ded32f8e4b5b506d665134fc87157baa086fce07ec6383970a2b6d2e7985beaed6a4cc14 - languageName: node - linkType: hard - -"dunder-proto@npm:1.0.1, 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.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:5.0.1": - version: 5.0.1 - resolution: "ejs@npm:5.0.1" - bin: - ejs: bin/cli.js - checksum: 10/72b0476020930ba11446f24b5f5ecb282b2419b2fbefc5be03b8b29e4618a0d4bfbf1a9daf2f58eb5319d7e51b6c914d74c7a44bf3a121ed093ada99b231407a - 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, 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.5, end-of-stream@npm:^1.4.1": - version: 1.4.5 - resolution: "end-of-stream@npm:1.4.5" - dependencies: - once: "npm:^1.4.0" - checksum: 10/1e0cfa6e7f49887544e03314f9dfc56a8cb6dde910cbb445983ecc2ff426fc05946df9d75d8a21a3a64f2cecfe1bf88f773952029f46756b2ed64a24e95b1fb8 - languageName: node - linkType: hard - -"enquirer@npm:2.3.6, 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:^8.0.0": - version: 8.0.0 - resolution: "entities@npm:8.0.0" - checksum: 10/d6e2ba75e444fb101ee2fbb07c839e687306c8a509426b75186619c19196f97c1db9932ca083f823c03e4a20e7407b654aa34de8cbb7770468e20fb2d4573a0e - 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.4 - resolution: "error-ex@npm:1.3.4" - dependencies: - is-arrayish: "npm:^0.2.1" - checksum: 10/ae3939fd4a55b1404e877df2080c6b59acc516d5b7f08a181040f78f38b4e2399633bfed2d9a21b91c803713fff7295ac70bebd8f3657ef352a95c2cd9aa2e4b - languageName: node - linkType: hard - -"error-stack-parser-es@npm:^1.0.5": - version: 1.0.5 - resolution: "error-stack-parser-es@npm:1.0.5" - checksum: 10/6b71297b679bb290cd526e79be54f21e02307918e6768f0be19cad87f1a41ccb5c2d2dc1d335c41fe877291ffc46088b41fe01c382b61acab432216a1874e2c5 - languageName: node - linkType: hard - -"es-define-property@npm:1.0.1, 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, 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:^2.0.0": - version: 2.0.0 - resolution: "es-module-lexer@npm:2.0.0" - checksum: 10/b075855289b5f40ee496f3d7525c5c501d029c3da15c22298a0030d625bf36d1da0768b26278f7f4bada2a602459b505888e20b77c414fba5da5619b0e84dbd1 - languageName: node - linkType: hard - -"es-object-atoms@npm:1.1.1, 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, 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.28.1": - version: 0.28.1 - resolution: "esbuild@npm:0.28.1" - dependencies: - "@esbuild/aix-ppc64": "npm:0.28.1" - "@esbuild/android-arm": "npm:0.28.1" - "@esbuild/android-arm64": "npm:0.28.1" - "@esbuild/android-x64": "npm:0.28.1" - "@esbuild/darwin-arm64": "npm:0.28.1" - "@esbuild/darwin-x64": "npm:0.28.1" - "@esbuild/freebsd-arm64": "npm:0.28.1" - "@esbuild/freebsd-x64": "npm:0.28.1" - "@esbuild/linux-arm": "npm:0.28.1" - "@esbuild/linux-arm64": "npm:0.28.1" - "@esbuild/linux-ia32": "npm:0.28.1" - "@esbuild/linux-loong64": "npm:0.28.1" - "@esbuild/linux-mips64el": "npm:0.28.1" - "@esbuild/linux-ppc64": "npm:0.28.1" - "@esbuild/linux-riscv64": "npm:0.28.1" - "@esbuild/linux-s390x": "npm:0.28.1" - "@esbuild/linux-x64": "npm:0.28.1" - "@esbuild/netbsd-arm64": "npm:0.28.1" - "@esbuild/netbsd-x64": "npm:0.28.1" - "@esbuild/openbsd-arm64": "npm:0.28.1" - "@esbuild/openbsd-x64": "npm:0.28.1" - "@esbuild/openharmony-arm64": "npm:0.28.1" - "@esbuild/sunos-x64": "npm:0.28.1" - "@esbuild/win32-arm64": "npm:0.28.1" - "@esbuild/win32-ia32": "npm:0.28.1" - "@esbuild/win32-x64": "npm:0.28.1" - 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/openharmony-arm64": - 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/aaa4a922644afffac45e735c99caf343f881e2d36abcc6b6fb53c230bd69940504a5bb6b0041bdd1a690e748ebc681d3308a7d178987c523d74c63c2c280bac8 - languageName: node - linkType: hard - -"esbuild@npm:^0.27.0": - version: 0.27.2 - resolution: "esbuild@npm:0.27.2" - dependencies: - "@esbuild/aix-ppc64": "npm:0.27.2" - "@esbuild/android-arm": "npm:0.27.2" - "@esbuild/android-arm64": "npm:0.27.2" - "@esbuild/android-x64": "npm:0.27.2" - "@esbuild/darwin-arm64": "npm:0.27.2" - "@esbuild/darwin-x64": "npm:0.27.2" - "@esbuild/freebsd-arm64": "npm:0.27.2" - "@esbuild/freebsd-x64": "npm:0.27.2" - "@esbuild/linux-arm": "npm:0.27.2" - "@esbuild/linux-arm64": "npm:0.27.2" - "@esbuild/linux-ia32": "npm:0.27.2" - "@esbuild/linux-loong64": "npm:0.27.2" - "@esbuild/linux-mips64el": "npm:0.27.2" - "@esbuild/linux-ppc64": "npm:0.27.2" - "@esbuild/linux-riscv64": "npm:0.27.2" - "@esbuild/linux-s390x": "npm:0.27.2" - "@esbuild/linux-x64": "npm:0.27.2" - "@esbuild/netbsd-arm64": "npm:0.27.2" - "@esbuild/netbsd-x64": "npm:0.27.2" - "@esbuild/openbsd-arm64": "npm:0.27.2" - "@esbuild/openbsd-x64": "npm:0.27.2" - "@esbuild/openharmony-arm64": "npm:0.27.2" - "@esbuild/sunos-x64": "npm:0.27.2" - "@esbuild/win32-arm64": "npm:0.27.2" - "@esbuild/win32-ia32": "npm:0.27.2" - "@esbuild/win32-x64": "npm:0.27.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/openharmony-arm64": - 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/7f1229328b0efc63c4184a61a7eb303df1e99818cc1d9e309fb92600703008e69821e8e984e9e9f54a627da14e0960d561db3a93029482ef96dc82dd267a60c2 - languageName: node - linkType: hard - -"escalade@npm:3.2.0, 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, 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 - -"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:10.0.1": - version: 10.0.1 - resolution: "execa@npm:10.0.1" - dependencies: - "@sindresorhus/merge-streams": "npm:^4.0.0" - figures: "npm:^6.1.0" - get-stream: "npm:^9.0.1" - human-signals: "npm:^8.0.1" - is-plain-obj: "npm:^4.1.0" - is-stream: "npm:^4.0.1" - npm-run-path: "npm:^6.0.0" - pretty-ms: "npm:^9.3.0" - signal-exit: "npm:^4.1.0" - strip-final-newline: "npm:^4.0.0" - which-command: "npm:^0.1.0" - yoctocolors: "npm:^2.1.2" - checksum: 10/30f69e68f1700121ba995308b35ed3a260478078d850af80f5aa0411dfb5b43a945d94698a350ade4f8aaae280cc9354439805d1a07096340a9617b0e5f706bc - 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 - -"expect-type@npm:^1.3.0": - version: 1.3.0 - resolution: "expect-type@npm:1.3.0" - checksum: 10/a5fada3d0c621649261f886e7d93e6bf80ce26d8a86e5d517e38301b8baec8450ab2cb94ba6e7a0a6bf2fc9ee55f54e1b06938ef1efa52ddcfeffbfa01acbbcc - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.3 - resolution: "exponential-backoff@npm:3.1.3" - checksum: 10/ca25962b4bbab943b7c4ed0b5228e263833a5063c65e1cdeac4be9afad350aae5466e8e619b5051f4f8d37b2144a2d6e8fcc771b6cc82934f7dade2f964f652c - languageName: node - linkType: hard - -"fdir@npm:^6.4.3, fdir@npm:^6.5.0": - version: 6.5.0 - resolution: "fdir@npm:6.5.0" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: 10/14ca1c9f0a0e8f4f2e9bf4e8551065a164a09545dae548c12a18d238b72e51e5a7b39bd8e5494b56463a0877672d0a6c1ef62c6fa0677db1b0c847773be939b1 - languageName: node - linkType: hard - -"fflate@npm:^0.8.3": - version: 0.8.3 - resolution: "fflate@npm:0.8.3" - checksum: 10/6ebf528dc9c56e78e715eac615b009b25dc33e15c1920b11ebba44e6d76181c647756a81a23e19247907496b93aa99928514c53090579a65109e026ac2824aa7 - languageName: node - linkType: hard - -"figures@npm:3.2.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 - -"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 - -"fix-dts-default-cjs-exports@npm:^1.0.0": - version: 1.0.1 - resolution: "fix-dts-default-cjs-exports@npm:1.0.1" - dependencies: - magic-string: "npm:^0.30.17" - mlly: "npm:^1.7.4" - rollup: "npm:^4.34.8" - checksum: 10/3324418bb63c93b6b22a808e242d220caba804860c24218b2912abc4525525334fcdcb62d22be6472a8d84ee2ad4165bc79554140c3369eb11d23220cdd986ce - 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.16.0": - version: 1.16.0 - resolution: "follow-redirects@npm:1.16.0" - peerDependenciesMeta: - debug: - optional: true - checksum: 10/3fbe3d80b3b544c22705d837aa5d4a0d07a740d913534a2620b0a004c610af4148e3b58723536dd099aaa1c9d3a155964bde9665d6e5cb331460809a1fc572fd - languageName: node - linkType: hard - -"foreground-child@npm:^3.3.1": - 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.6, form-data@npm:^4.0.6": - version: 4.0.6 - resolution: "form-data@npm:4.0.6" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.4" - mime-types: "npm:^2.1.35" - checksum: 10/de6614c8537c92fa5fa3ee7e827758f98f5a9c033f348b7de81855ef36e5cb867e75d9f405d9483ab8d724a4a20d4e79926a299fa8dbba38f530eb659f0884e4 - languageName: node - linkType: hard - -"fs-constants@npm:1.0.0, 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.3 - resolution: "fs-extra@npm:11.3.3" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10/daeaefafbebe8fa6efd2fb96fc926f2c952be5877811f00a6794f0d64e0128e3d0d93368cd328f8f063b45deacf385c40e3d931aa46014245431cd2f4f89c67a - 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.3, 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%3A2.3.3#optional!builtin, 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, function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10/185e20d20f10c8d661d59aac0f3b63b31132d492e1b11fcc2a93cb2c47257ebaee7407c38513efd2b35cafdf972d9beb2ea4593c1e0f3bf8f2744836928d7454 - languageName: node - linkType: hard - -"generator-function@npm:^2.0.0": - version: 2.0.1 - resolution: "generator-function@npm:2.0.1" - checksum: 10/eb7e7eb896c5433f3d40982b2ccacdb3dd990dd3499f14040e002b5d54572476513be8a2e6f9609f6e41ab29f2c4469307611ddbfc37ff4e46b765c326663805 - languageName: node - linkType: hard - -"get-caller-file@npm:2.0.5, 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.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-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0": - version: 1.3.1 - resolution: "get-intrinsic@npm:1.3.1" - dependencies: - async-function: "npm:^1.0.0" - async-generator-function: "npm:^1.0.0" - 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" - generator-function: "npm:^2.0.0" - 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/bb579dda84caa4a3a41611bdd483dade7f00f246f2a7992eb143c5861155290df3fdb48a8406efa3dfb0b434e2c8fafa4eebd469e409d0439247f85fc3fa2cc1 - 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-proto@npm:1.0.1, 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-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.1": - 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@npm:^11.0.3": - version: 11.1.0 - resolution: "glob@npm:11.1.0" - dependencies: - foreground-child: "npm:^3.3.1" - jackspeak: "npm:^4.1.1" - minimatch: "npm:^10.1.1" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^2.0.0" - bin: - glob: dist/esm/bin.mjs - checksum: 10/da4501819633daff8822c007bb3f93d5c4d2cbc7b15a8e886660f4497dd251a1fb4f53a85fba1e760b31704eff7164aeb2c7a82db10f9f2c362d12c02fe52cf3 - languageName: node - linkType: hard - -"glob@npm:^13.0.0": - version: 13.0.0 - resolution: "glob@npm:13.0.0" - dependencies: - minimatch: "npm:^10.1.1" - minipass: "npm:^7.1.2" - path-scurry: "npm:^2.0.0" - checksum: 10/de390721d29ee1c9ea41e40ec2aa0de2cabafa68022e237dc4297665a5e4d650776f2573191984ea1640aba1bf0ea34eddef2d8cbfbfc2ad24b5fb0af41d8846 - 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 - -"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 - -"gopd@npm:1.2.0, 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.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.9 - resolution: "handlebars@npm:4.7.9" - 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/e755433d652e8a15fc02f83d7478e652359e7a4d354c4328818853ed4f8a39d4a09e1d22dad3c7213c5240864a65b3c840970b8b181745575dd957dd258f2b8d - 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, 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.1.0, 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, 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.4, hasown@npm:^2.0.4": - version: 2.0.4 - resolution: "hasown@npm:2.0.4" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10/13823863ae48161068b4c51606a3128451c66f14545a5169d667fe9fca168dcd38c27570c7a299e32ef844b8da3d55def7fe88602f8970d4311fb543ee88001a - 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:^8.0.0": - version: 8.1.0 - resolution: "hosted-git-info@npm:8.1.0" - dependencies: - lru-cache: "npm:^10.0.1" - checksum: 10/872a1f3b5da6bff9d99410b96cf7ecb6415ef7d8c8842579cfb690144f40be4581cc4ea50d978829a5fc1ef0b1097151a722d14f905beaf3f09330e8ca40fa4c - languageName: node - linkType: hard - -"hosted-git-info@npm:^9.0.0": - version: 9.0.2 - resolution: "hosted-git-info@npm:9.0.2" - dependencies: - lru-cache: "npm:^11.1.0" - checksum: 10/0619c284ca7fc35322735e03fece90ed3ded67a2cf68e855e688d1bffd47078515d98ab8dff4bd08fb78d68d1a72ab8892180e15c7f23f24c922a6dfa601dbad - languageName: node - linkType: hard - -"html-encoding-sniffer@npm:^6.0.0": - version: 6.0.0 - resolution: "html-encoding-sniffer@npm:6.0.0" - dependencies: - "@exodus/bytes": "npm:^1.6.0" - checksum: 10/97392e45d8aff57f180f62a1b12e62201c8451af68424b8bc3196f78e273891f2df285e5be43a3f28c7ba4badf9524ef305db65c4e4935a9e796afc86d9654b8 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.2.0 - resolution: "http-cache-semantics@npm:4.2.0" - checksum: 10/4efd2dfcfeea9d5e88c84af450b9980be8a43c2c8179508b1c57c7b4421c855f3e8efe92fa53e0b3f4a43c85824ada930eabbc306d1b3beab750b6dcc5187693 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - 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:5.0.1, https-proxy-agent@npm:^5.0.1": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: "npm:6" - debug: "npm:4" - checksum: 10/f0dce7bdcac5e8eaa0be3c7368bb8836ed010fb5b6349ffb412b172a203efe8f807d9a6681319105ea1b6901e1972c7b5ea899672a7b9aad58309f766dcbe0df - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - 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.1": - version: 8.0.1 - resolution: "human-signals@npm:8.0.1" - checksum: 10/903389a018b16f330c5e0f6e8b76d592c79552152ea892f249e5290e71c790f5722dc9b740fedd4bdef30566754a69012aaed97a6a528da0d417fad990a6f515 - languageName: node - linkType: hard - -"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.7.0": - version: 0.7.2 - resolution: "iconv-lite@npm:0.7.2" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10/24c937b532f868e938386b62410b303b7c767ce3d08dc2829cbe59464d5a26ef86ae5ad1af6b34eec43ddfea39e7d101638644b0178d67262fa87015d59f983a - languageName: node - linkType: hard - -"ieee754@npm:1.2.1, 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:^8.0.0": - version: 8.0.0 - resolution: "ignore-walk@npm:8.0.0" - dependencies: - minimatch: "npm:^10.0.3" - checksum: 10/694a66d481ca7073a85569d9751c0fcc4e4e0e08f69ba7e5bceed5ac3eef9bfa9184585327053be612022ea961033bfad1003d66058efdfb55bfab07dff23bba - languageName: node - linkType: hard - -"ignore@npm:7.0.5": - version: 7.0.5 - resolution: "ignore@npm:7.0.5" - checksum: 10/f134b96a4de0af419196f52c529d5c6120c4456ff8a6b5a14ceaaa399f883e15d58d2ce651c9b69b9388491d4669dda47285d307e827de9304a53a1824801bc6 - 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.4, 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:^5.0.0": - version: 5.0.0 - resolution: "ini@npm:5.0.0" - checksum: 10/76e5567b46504b2b12650878ba6277204500a6ead3fe69eef419ee570456b364b39c040ee545846053f6d8a15797a82fc6d9efe06e392b9b6093935f4a2f2c30 - languageName: node - linkType: hard - -"ini@npm:^6.0.0": - version: 6.0.0 - resolution: "ini@npm:6.0.0" - checksum: 10/e87d8cde86d091ddb104580d42dfdc8306593627269990ca0f5176ccc60c936268bad56856398fef924cdf0af33b1a9c21e84f85914820037e003ee45443cc85 - languageName: node - linkType: hard - -"init-package-json@npm:8.2.2": - version: 8.2.2 - resolution: "init-package-json@npm:8.2.2" - dependencies: - "@npmcli/package-json": "npm:^7.0.0" - npm-package-arg: "npm:^13.0.0" - promzard: "npm:^2.0.0" - read: "npm:^4.0.0" - semver: "npm:^7.7.2" - validate-npm-package-license: "npm:^3.0.4" - validate-npm-package-name: "npm:^6.0.2" - checksum: 10/6e8c6aea9ef75900ba02173b371a7ba5a0211a269376853152b78edeb764d53bb65592387c059910c928dbb4723f7e5424c118a671ba90e44b71891975637821 - languageName: node - linkType: hard - -"inquirer@npm:12.9.6": - version: 12.9.6 - resolution: "inquirer@npm:12.9.6" - dependencies: - "@inquirer/ansi": "npm:^1.0.0" - "@inquirer/core": "npm:^10.2.2" - "@inquirer/prompts": "npm:^7.8.6" - "@inquirer/type": "npm:^3.0.8" - mute-stream: "npm:^2.0.0" - run-async: "npm:^4.0.5" - rxjs: "npm:^7.8.2" - peerDependencies: - "@types/node": ">=18" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/bcac231b3eba055aa16dbdb60ba6d7bfe66109be654bfb19f92095f703af07fc01528f716e86ec62f7bf7bd17b4e21ad4bb32b677cf42075dee04568afe9686b - languageName: node - linkType: hard - -"ip-address@npm:^10.0.1": - version: 10.1.0 - resolution: "ip-address@npm:10.1.0" - checksum: 10/a6979629d1ad9c1fb424bc25182203fad739b40225aebc55ec6243bbff5035faf7b9ed6efab3a097de6e713acbbfde944baacfa73e11852bb43989c45a68d79e - 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-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.1, 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.2.1, 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, 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.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, 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-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-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.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-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.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, 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, 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 - -"jackspeak@npm:^4.1.1": - version: 4.1.1 - resolution: "jackspeak@npm:4.1.1" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - checksum: 10/ffceb270ec286841f48413bfb4a50b188662dfd599378ce142b6540f3f0a66821dc9dcb1e9ebc55c6c3b24dc2226c96e5819ba9bd7a241bd29031b61911718c7 - languageName: node - linkType: hard - -"jake@npm:^10.8.5": - version: 10.9.4 - resolution: "jake@npm:10.9.4" - dependencies: - async: "npm:^3.2.6" - filelist: "npm:^1.0.4" - picocolors: "npm:^1.1.1" - bin: - jake: bin/cli.js - checksum: 10/97e48f73f5e315a3b6e1a48b4bcc0cdf2c2cf82100ec9e76a032fd5d614dcd32c4315572cfcb66e9f9bdecca3900aaa61fe72b781a74b06aefd3ec4c1c917f0b - languageName: node - linkType: hard - -"jest-diff@npm:>=30.0.0 < 31": - version: 30.2.0 - resolution: "jest-diff@npm:30.2.0" - dependencies: - "@jest/diff-sequences": "npm:30.0.1" - "@jest/get-type": "npm:30.1.0" - chalk: "npm:^4.1.2" - pretty-format: "npm:30.2.0" - checksum: 10/1fb9e4fb7dff81814b4f69eaa7db28e184d62306a3a8ea2447d02ca53d2cfa771e83ede513f67ec5239dffacfaac32ff2b49866d211e4c7516f51c1fc06ede42 - 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.1, js-yaml@npm:^4.1.0": - version: 4.1.1 - resolution: "js-yaml@npm:4.1.1" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10/a52d0519f0f4ef5b4adc1cde466cb54c50d56e2b4a983b9d5c9c0f2f99462047007a6274d7e95617a21d3c91fde3ee6115536ed70991cd645ba8521058b78f77 - languageName: node - linkType: hard - -"jsdom@npm:30.0.1": - version: 30.0.1 - resolution: "jsdom@npm:30.0.1" - dependencies: - "@asamuzakjp/css-color": "npm:^6.0.5" - "@asamuzakjp/dom-selector": "npm:^8.3.0" - "@bramus/specificity": "npm:^2.4.2" - "@csstools/css-syntax-patches-for-csstree": "npm:^1.1.7" - "@exodus/bytes": "npm:^1.15.1" - css-tree: "npm:^3.2.1" - data-urls: "npm:^7.0.0" - decimal.js: "npm:^10.6.0" - html-encoding-sniffer: "npm:^6.0.0" - is-potential-custom-element-name: "npm:^1.0.1" - lru-cache: "npm:^11.5.2" - parse5: "npm:^8.0.1" - saxes: "npm:^6.0.0" - symbol-tree: "npm:^3.2.4" - tough-cookie: "npm:^6.0.2" - undici: "npm:^8.9.0" - w3c-xmlserializer: "npm:^5.0.0" - webidl-conversions: "npm:^8.0.1" - whatwg-mimetype: "npm:^5.0.0" - whatwg-url: "npm:^17.1.0" - xml-name-validator: "npm:^5.0.0" - peerDependencies: - canvas: ^3.2.3 - peerDependenciesMeta: - canvas: - optional: true - checksum: 10/5089ceca7d340b3beec451b7a3286f2bf38d707482e0bdcf046e63b4de3ea2e679372fbb733c5c24c1ce1cc9e70272d10e49fd1b4b146beb77b12c17c069cb36 - 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:^4.0.0": - version: 4.0.0 - resolution: "json-parse-even-better-errors@npm:4.0.0" - checksum: 10/da1ae7ef0cc9db02972a06a71322f26bdcda5d7f648c23b28ce7f158ba35707461bcbd91945d8aace10d8d79c383b896725c65ffa410242352692328aa9b5edf - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^5.0.0": - version: 5.0.0 - resolution: "json-parse-even-better-errors@npm:5.0.0" - checksum: 10/b5aeaa65e072bc3bda2cb1da50bf1822814b4aa7c568e7c2bed25af89d730f113dcb74393da574c0a32e889eeba4a826db600b8a6ecef917c59c8c6b38f2efaa - 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.3, 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.2.0 - resolution: "jsonfile@npm:6.2.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10/513aac94a6eff070767cafc8eb4424b35d523eec0fcd8019fe5b975f4de5b10a54640c8d5961491ddd8e6f562588cf62435c5ddaf83aaf0986cd2ee789e0d7b9 - 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.3": - version: 6.0.3 - resolution: "kind-of@npm:6.0.3" - checksum: 10/5873d303fb36aad875b7538798867da2ae5c9e328d67194b0162a3659a627d22f742fc9c4ae95cd1704132a24b00cae5041fc00c0f6ef937dc17080dc4dbb962 - languageName: node - linkType: hard - -"kleur@npm:^4.1.5": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 10/44d84cc4eedd4311099402ef6d4acd9b2d16e08e499d6ef3bb92389bd4692d7ef09e35248c26e27f98acac532122acb12a1bfee645994ae3af4f0a37996da7df - languageName: node - linkType: hard - -"lerna@npm:9.0.7": - version: 9.0.7 - resolution: "lerna@npm:9.0.7" - dependencies: - "@npmcli/arborist": "npm:9.1.6" - "@npmcli/package-json": "npm:7.0.2" - "@npmcli/run-script": "npm:10.0.3" - "@nx/devkit": "npm:>=21.5.2 < 23.0.0" - "@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" - ci-info: "npm:4.3.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-stream: "npm:6.0.0" - git-url-parse: "npm:14.0.0" - glob-parent: "npm:6.0.2" - has-unicode: "npm:2.0.1" - import-local: "npm:3.1.0" - ini: "npm:^1.3.8" - init-package-json: "npm:8.2.2" - inquirer: "npm:12.9.6" - is-ci: "npm:3.0.1" - jest-diff: "npm:>=30.0.0 < 31" - js-yaml: "npm:4.1.1" - libnpmaccess: "npm:10.0.3" - libnpmpublish: "npm:11.1.2" - load-json-file: "npm:6.2.0" - make-fetch-happen: "npm:15.0.2" - minimatch: "npm:3.1.4" - npm-package-arg: "npm:13.0.1" - npm-packlist: "npm:10.0.3" - npm-registry-fetch: "npm:19.1.0" - nx: "npm:>=21.5.3 < 23.0.0" - 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:21.0.1" - read-cmd-shim: "npm:4.0.0" - semver: "npm:7.7.2" - signal-exit: "npm:3.0.7" - slash: "npm:3.0.0" - ssri: "npm:12.0.0" - string-width: "npm:^4.2.3" - tar: "npm:7.5.11" - through: "npm:2.3.8" - tinyglobby: "npm:0.2.12" - typescript: "npm:>=3 < 6" - upath: "npm:2.0.1" - validate-npm-package-license: "npm:3.0.4" - validate-npm-package-name: "npm:6.0.2" - wide-align: "npm:1.1.5" - write-file-atomic: "npm:5.0.1" - yargs: "npm:17.7.2" - yargs-parser: "npm:21.1.1" - bin: - lerna: dist/cli.js - checksum: 10/71d0e92e8c2622ff401ee562cfa29c32af8434b43ae4976dbad65dd5e83d164810eb867f3282f0292e586df7e9496c6cc59f061363a200ce3481aeb74f31f078 - languageName: node - linkType: hard - -"libnpmaccess@npm:10.0.3": - version: 10.0.3 - resolution: "libnpmaccess@npm:10.0.3" - dependencies: - npm-package-arg: "npm:^13.0.0" - npm-registry-fetch: "npm:^19.0.0" - checksum: 10/8bcd40e89bcec85250f3fe38049e14bc2fb0bd1769a7c3e2c82fd72c35730b322af30a031f6de85434651ce08731461c7beac752ed80e49df3fb689a5fdcc0b2 - languageName: node - linkType: hard - -"libnpmpublish@npm:11.1.2": - version: 11.1.2 - resolution: "libnpmpublish@npm:11.1.2" - dependencies: - "@npmcli/package-json": "npm:^7.0.0" - ci-info: "npm:^4.0.0" - npm-package-arg: "npm:^13.0.0" - npm-registry-fetch: "npm:^19.0.0" - proc-log: "npm:^5.0.0" - semver: "npm:^7.3.7" - sigstore: "npm:^4.0.0" - ssri: "npm:^12.0.0" - checksum: 10/e45ffce63562756d5a88438c54ce32e7cb7ce75ee04461a1cecad4a6817acd9f6ee6688bf234329a2487994862e7711409fee89636238cfb4d12a5b986f5ed7f - languageName: node - linkType: hard - -"lightningcss-android-arm64@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-android-arm64@npm:1.32.0" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"lightningcss-darwin-arm64@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-darwin-arm64@npm:1.32.0" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"lightningcss-darwin-x64@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-darwin-x64@npm:1.32.0" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"lightningcss-freebsd-x64@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-freebsd-x64@npm:1.32.0" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"lightningcss-linux-arm-gnueabihf@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-linux-arm-gnueabihf@npm:1.32.0" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"lightningcss-linux-arm64-gnu@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-linux-arm64-gnu@npm:1.32.0" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"lightningcss-linux-arm64-musl@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-linux-arm64-musl@npm:1.32.0" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"lightningcss-linux-x64-gnu@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-linux-x64-gnu@npm:1.32.0" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"lightningcss-linux-x64-musl@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-linux-x64-musl@npm:1.32.0" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"lightningcss-win32-arm64-msvc@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-win32-arm64-msvc@npm:1.32.0" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"lightningcss-win32-x64-msvc@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-win32-x64-msvc@npm:1.32.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"lightningcss@npm:^1.32.0": - version: 1.32.0 - resolution: "lightningcss@npm:1.32.0" - dependencies: - detect-libc: "npm:^2.0.3" - lightningcss-android-arm64: "npm:1.32.0" - lightningcss-darwin-arm64: "npm:1.32.0" - lightningcss-darwin-x64: "npm:1.32.0" - lightningcss-freebsd-x64: "npm:1.32.0" - lightningcss-linux-arm-gnueabihf: "npm:1.32.0" - lightningcss-linux-arm64-gnu: "npm:1.32.0" - lightningcss-linux-arm64-musl: "npm:1.32.0" - lightningcss-linux-x64-gnu: "npm:1.32.0" - lightningcss-linux-x64-musl: "npm:1.32.0" - lightningcss-win32-arm64-msvc: "npm:1.32.0" - lightningcss-win32-x64-msvc: "npm:1.32.0" - dependenciesMeta: - lightningcss-android-arm64: - optional: true - lightningcss-darwin-arm64: - optional: true - lightningcss-darwin-x64: - optional: true - lightningcss-freebsd-x64: - optional: true - lightningcss-linux-arm-gnueabihf: - optional: true - lightningcss-linux-arm64-gnu: - optional: true - lightningcss-linux-arm64-musl: - optional: true - lightningcss-linux-x64-gnu: - optional: true - lightningcss-linux-x64-musl: - optional: true - lightningcss-win32-arm64-msvc: - optional: true - lightningcss-win32-x64-msvc: - optional: true - checksum: 10/098e61007f0d0ec8b5c50884e33b543b551d1ff21bc7b062434b6638fd0b8596858f823b60dfc2a4aa756f3cb120ad79f2b7f4a55b1bda2c0269ab8cf476f114 - 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 - -"log-symbols@npm:4.1.0, log-symbols@npm:^4.0.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 - -"lru-cache@npm:^10.0.1": - version: 10.4.3 - resolution: "lru-cache@npm:10.4.3" - checksum: 10/e6e90267360476720fa8e83cc168aa2bf0311f3f2eea20a6ba78b90a885ae72071d9db132f40fda4129c803e7dcec3a6b6a6fbb44ca90b081630b810b5d6a41a - languageName: node - linkType: hard - -"lru-cache@npm:^11.0.0, lru-cache@npm:^11.0.1, lru-cache@npm:^11.1.0, lru-cache@npm:^11.2.1": - version: 11.2.4 - resolution: "lru-cache@npm:11.2.4" - checksum: 10/3b2da74c0b6653767f8164c38c4c4f4d7f0cc10c62bfa512663d94a830191ae6a5af742a8d88a8b30d5f9974652d3adae53931f32069139ad24fa2a18a199aca - languageName: node - linkType: hard - -"lru-cache@npm:^11.5.2": - version: 11.5.2 - resolution: "lru-cache@npm:11.5.2" - checksum: 10/122789c66605ddf29df58ff279e9e2c9499499d0b80b895ec524496f14bcde045d1582e3e38008f3457226d98067556719573b352119d6be8bdb1f8849f85681 - 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, magic-string@npm:^0.30.21": - version: 0.30.21 - resolution: "magic-string@npm:0.30.21" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.5" - checksum: 10/57d5691f41ed40d962d8bd300148114f53db67fadbff336207db10a99f2bdf4a1be9cac3a68ee85dba575912ee1d4402e4396408196ec2d3afd043b076156221 - 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:15.0.2": - version: 15.0.2 - resolution: "make-fetch-happen@npm:15.0.2" - dependencies: - "@npmcli/agent": "npm:^4.0.0" - cacache: "npm:^20.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/66097eae91615d1ac817127b9a20b9a17a1cb18c6b52ad24ffa03f45f3a9300af03f3368c52bbe88060ba9bf73c4ec1e0f2a209d1598bb906cdb34f75d3600b4 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^15.0.0, make-fetch-happen@npm:^15.0.1": - version: 15.0.3 - resolution: "make-fetch-happen@npm:15.0.3" - dependencies: - "@npmcli/agent": "npm:^4.0.0" - cacache: "npm:^20.0.1" - http-cache-semantics: "npm:^4.1.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^5.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^1.0.0" - proc-log: "npm:^6.0.0" - promise-retry: "npm:^2.0.1" - ssri: "npm:^13.0.0" - checksum: 10/78da4fc1df83cb596e2bae25aa0653b8a9c6cbdd6674a104894e03be3acfcd08c70b78f06ef6407fbd6b173f6a60672480d78641e693d05eb71c09c13ee35278 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^15.0.4": - version: 15.0.6 - resolution: "make-fetch-happen@npm:15.0.6" - dependencies: - "@gar/promise-retry": "npm:^1.0.0" - "@npmcli/agent": "npm:^4.0.0" - "@npmcli/redact": "npm:^4.0.0" - cacache: "npm:^20.0.1" - http-cache-semantics: "npm:^4.1.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^5.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^1.0.0" - proc-log: "npm:^6.0.0" - ssri: "npm:^13.0.0" - checksum: 10/01bc13d8e851212d55bbf0510dd5f94b9f239f253dfbd84275e23d1798ba7323a08b3c16031b83676fe75381ad5c70d17542c7b6828c98ee6e0d3eacdaf83ebb - 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, math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10/11df2eda46d092a6035479632e1ec865b8134bdfc4bd9e571a656f4191525404f13a283a515938c3a8de934dbfd9c09674d9da9fa831e6eb7e22b50b197d2edd - languageName: node - linkType: hard - -"mdn-data@npm:2.27.1": - version: 2.27.1 - resolution: "mdn-data@npm:2.27.1" - checksum: 10/5046dc83a961b8ea82a5d6d8331d07df6b15faec61519ce2f83e49766702358e7e6af96413be977ff89080534be6762c1d5963b5dd1180c208a47c0a663226b2 - 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 - -"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.35, mime-types@npm:^2.1.35": - 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 - -"mimic-fn@npm:2.1.0, 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.2 - resolution: "min-document@npm:2.19.2" - dependencies: - dom-walk: "npm:^0.1.0" - checksum: 10/9c98ea950451ac3292762fdc7a076ef2d365d795280a2a9357a5d1a17d80c44ecab2354ad507432411c1605515731259b41ce97b87f0b7126e1dfe610b2674ae - 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:5.20260730.0-alpha": - version: 5.20260730.0-alpha - resolution: "miniflare@npm:5.20260730.0-alpha" - dependencies: - "@cspotcode/source-map-support": "npm:0.8.1" - sharp: "npm:0.35.2" - undici: "npm:7.28.0" - workerd: "npm:1.20260730.1" - ws: "npm:8.21.0" - youch: "npm:4.1.0-beta.10" - checksum: 10/f224f728e5b05c8db51f6084a757823553737aa0ea773e04182fa48f04ffd641daee1ec35f437c2e4d2cfa68a8efd9e8357032de48796f15f9667b35d6b0a088 - languageName: node - linkType: hard - -"minimatch@npm:10.2.5": - version: 10.2.5 - resolution: "minimatch@npm:10.2.5" - dependencies: - brace-expansion: "npm:^5.0.5" - checksum: 10/19e87a931aff60ee7b9d80f39f817b8bfc54f61f8356ee3549fbf636dbccacacfec8d803eac73293955c4527cd085247dfc064bce4a5e349f8f3b85e2bf5da0f - languageName: node - linkType: hard - -"minimatch@npm:3.1.4": - version: 3.1.4 - resolution: "minimatch@npm:3.1.4" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10/8d679c9df6caad31465c7681ae72b5e0f5d3b4fda6235c4473b14819f4d72ff8924ebd73ce991cc50be4b370daca51cc4d8c7fea6a3aa05108702ede115ab4c9 - 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:^10.0.3, minimatch@npm:^10.1.1": - version: 10.1.1 - resolution: "minimatch@npm:10.1.1" - dependencies: - "@isaacs/brace-expansion": "npm:^5.0.0" - checksum: 10/110f38921ea527022e90f7a5f43721838ac740d0a0c26881c03b57c261354fb9a0430e40b2c56dfcea2ef3c773768f27210d1106f1f2be19cde3eea93f26f45e - languageName: node - linkType: hard - -"minimatch@npm:^3.1.1": - 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 - -"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.8, 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:^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-fetch@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass-fetch@npm:5.0.0" - 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/4fb7dca630a64e6970a8211dade505bfe260d0b8d60beb348dcdfb95fe35ef91d977b29963929c9017ae0805686aa3f413107dc6bc5deac9b9e26b0b41c3b86c - 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:^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:^3.0.1, minizlib@npm:^3.1.0": - version: 3.1.0 - resolution: "minizlib@npm:3.1.0" - dependencies: - minipass: "npm:^7.1.2" - checksum: 10/f47365cc2cb7f078cbe7e046eb52655e2e7e97f8c0a9a674f4da60d94fb0624edfcec9b5db32e8ba5a99a5f036f595680ae6fe02a262beaa73026e505cc52f99 - languageName: node - linkType: hard - -"mlly@npm:^1.7.4": - version: 1.8.0 - resolution: "mlly@npm:1.8.0" - dependencies: - acorn: "npm:^8.15.0" - pathe: "npm:^2.0.3" - pkg-types: "npm:^1.3.1" - ufo: "npm:^1.6.1" - checksum: 10/4db690a421076d5fe88331679f702b77a4bfc9fe3f324bc6150270fb0b69ecd4b5e43570b8e4573dde341515b3eac4daa720a6ac9f2715c210b670852641ab1c - 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, ms@npm:^2.1.3": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10/aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d - languageName: node - linkType: hard - -"mute-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "mute-stream@npm:2.0.0" - checksum: 10/d2e4fd2f5aa342b89b98134a8d899d8ef9b0a6d69274c4af9df46faa2d97aeb1f2ce83d867880d6de63643c52386579b99139801e24e7526c3b9b0a6d1e18d6c - 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.16": - version: 3.3.17 - resolution: "nanoid@npm:3.3.17" - bin: - nanoid: bin/nanoid.cjs - checksum: 10/54c3238ba6ea31c173ccf70922481814892075dbf1b4636abec249d0b34d5594fc9a8892c04872068674010a11fa3d18316dc06e59e700def131ff9d8e740426 - 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.16": - version: 14.0.16 - resolution: "nock@npm:14.0.16" - dependencies: - "@mswjs/interceptors": "npm:^0.41.0" - json-stringify-safe: "npm:^5.0.1" - propagate: "npm:^2.0.0" - checksum: 10/75f0d98d022bbe65b4a9e7667bde0ddb0fc27ad6db09b9969ebdc217700b50b7725da647878f07359cc05301bcedf684f10004b07012e45311cd1dabc7f93cdf - 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.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:^12.1.0, node-gyp@npm:latest": - version: 12.1.0 - resolution: "node-gyp@npm:12.1.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^15.0.0" - nopt: "npm:^9.0.0" - proc-log: "npm:^6.0.0" - semver: "npm:^7.3.5" - tar: "npm:^7.5.2" - tinyglobby: "npm:^0.2.12" - which: "npm:^6.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10/d93079236cef1dd7fa4df683708d8708ad255c55865f6656664c8959e4d3963d908ac48e8f9f341705432e979dbbf502a40d68d65a17fe35956a5a05ba6c1cb4 - 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 - -"nopt@npm:^9.0.0": - version: 9.0.0 - resolution: "nopt@npm:9.0.0" - dependencies: - abbrev: "npm:^4.0.0" - bin: - nopt: bin/nopt.js - checksum: 10/56a1ccd2ad711fb5115918e2c96828703cddbe12ba2c3bd00591758f6fa30e6f47dd905c59dbfcf9b773f3a293b45996609fb6789ae29d6bfcc3cf3a6f7d9fda - 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 - -"npm-bundled@npm:^4.0.0": - version: 4.0.0 - resolution: "npm-bundled@npm:4.0.0" - dependencies: - npm-normalize-package-bin: "npm:^4.0.0" - checksum: 10/aae98992772af7528a2e10c8edb6996dcb2070759aba1fd96c3f0cdba9c666fa6ba45c319376babffa9e11b1dca14960de35ce98750021184cc3ca0a4d5f1af6 - languageName: node - linkType: hard - -"npm-bundled@npm:^5.0.0": - version: 5.0.0 - resolution: "npm-bundled@npm:5.0.0" - dependencies: - npm-normalize-package-bin: "npm:^5.0.0" - checksum: 10/0fea07f61f9a1ceaddc3cf88bcc5844bef173518f03568151d59a02da8754367e5398ef729486bc15884681f485f78903093dc4237319fb817768dcd18cfb549 - languageName: node - linkType: hard - -"npm-install-checks@npm:^7.1.0": - version: 7.1.2 - resolution: "npm-install-checks@npm:7.1.2" - dependencies: - semver: "npm:^7.1.1" - checksum: 10/f8990588ba3654beb720a105f1749f0ad36313cf25d5090fd9a2f013f17aa3d23b05b48c5d0ecd804445c79aded65394fdd79c726acf22806b0414d244469c27 - languageName: node - linkType: hard - -"npm-install-checks@npm:^8.0.0": - version: 8.0.0 - resolution: "npm-install-checks@npm:8.0.0" - dependencies: - semver: "npm:^7.1.1" - checksum: 10/eb4df6c3270ce6efcebcbc1a02997b3b4bcfa906ac2129ccef80eeffcf062d2e6dcbed02327109296725c1eb138ad93973303e025d2e0115f718fa4c09ed013f - languageName: node - linkType: hard - -"npm-normalize-package-bin@npm:^4.0.0": - version: 4.0.0 - resolution: "npm-normalize-package-bin@npm:4.0.0" - checksum: 10/e1a0971e5640bc116c5197f9707d86dc404b6d8e13da2c7ea82baa5583b8da279a3c8607234aa1d733c2baac3b3eba87b156f021f20ae183dc4806530e61675d - languageName: node - linkType: hard - -"npm-normalize-package-bin@npm:^5.0.0": - version: 5.0.0 - resolution: "npm-normalize-package-bin@npm:5.0.0" - checksum: 10/969bc042d7bb029b5da7eb733e7642b238e3cb071ad57b56a3f128069bc1a3cbc2a4f4af30ee75b11660c368d60b89811ecd1430cf2ea1a7ff36f30052a4aeda - languageName: node - linkType: hard - -"npm-package-arg@npm:13.0.1": - version: 13.0.1 - resolution: "npm-package-arg@npm:13.0.1" - dependencies: - hosted-git-info: "npm:^9.0.0" - proc-log: "npm:^5.0.0" - semver: "npm:^7.3.5" - validate-npm-package-name: "npm:^6.0.0" - checksum: 10/2b8375230b3571709537413c6ef58e56b0923c0ebb375d42caa844aaf6fb77ec173edfb752d64dd57193afb470a5867319d8ed330ca5198c9fd1e1e04590a779 - languageName: node - linkType: hard - -"npm-package-arg@npm:^12.0.0": - version: 12.0.2 - resolution: "npm-package-arg@npm:12.0.2" - dependencies: - hosted-git-info: "npm:^8.0.0" - proc-log: "npm:^5.0.0" - semver: "npm:^7.3.5" - validate-npm-package-name: "npm:^6.0.0" - checksum: 10/f61dacb42c02dfa00f97d9fbd7f3696b8fe651cf7dd0d8f4e7766b5835290d0967c20ec148b31b10d7f2931108c507813d9d2624b279769b1b2e4a356914d561 - languageName: node - linkType: hard - -"npm-package-arg@npm:^13.0.0": - version: 13.0.2 - resolution: "npm-package-arg@npm:13.0.2" - dependencies: - hosted-git-info: "npm:^9.0.0" - proc-log: "npm:^6.0.0" - semver: "npm:^7.3.5" - validate-npm-package-name: "npm:^7.0.0" - checksum: 10/810868f4b8c666fc1979f33c5b45606f541be97e82958af486e8d3f5ff2c91f96cea56f22c4665a92dc9a23698cf831cba2e09691387d473f910f9e6590638b3 - languageName: node - linkType: hard - -"npm-packlist@npm:10.0.3, npm-packlist@npm:^10.0.1": - version: 10.0.3 - resolution: "npm-packlist@npm:10.0.3" - dependencies: - ignore-walk: "npm:^8.0.0" - proc-log: "npm:^6.0.0" - checksum: 10/2dd1d1de903e534b1468fd87be8329aca0b2c26c25a830deb936e226b0f57ed9079ccc49a279015045e3a30f85bf3eb82e92f7271179819aa263eedd7b60be3a - languageName: node - linkType: hard - -"npm-pick-manifest@npm:^10.0.0": - version: 10.0.0 - resolution: "npm-pick-manifest@npm:10.0.0" - dependencies: - npm-install-checks: "npm:^7.1.0" - npm-normalize-package-bin: "npm:^4.0.0" - npm-package-arg: "npm:^12.0.0" - semver: "npm:^7.3.5" - checksum: 10/12439bb85d7399874b4f099c98966a875e46537c43ac7b9072804c46b7af8441e734068fff1ba23465832d08989d5f0ceeaa060c9a77761653decc2487460e09 - languageName: node - linkType: hard - -"npm-pick-manifest@npm:^11.0.1": - version: 11.0.3 - resolution: "npm-pick-manifest@npm:11.0.3" - dependencies: - npm-install-checks: "npm:^8.0.0" - npm-normalize-package-bin: "npm:^5.0.0" - npm-package-arg: "npm:^13.0.0" - semver: "npm:^7.3.5" - checksum: 10/189872190af34f7eccf3c586ad2e21e8c093f90a8f716db80887e8defa2bfb3ea917f61f339908ce0487a4cb1df40fe592aee3e8fe76a180a5b15a887850921a - languageName: node - linkType: hard - -"npm-registry-fetch@npm:19.1.0": - version: 19.1.0 - resolution: "npm-registry-fetch@npm:19.1.0" - dependencies: - "@npmcli/redact": "npm:^3.0.0" - jsonparse: "npm:^1.3.1" - make-fetch-happen: "npm:^15.0.0" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^4.0.0" - minizlib: "npm:^3.0.1" - npm-package-arg: "npm:^13.0.0" - proc-log: "npm:^5.0.0" - checksum: 10/37221bf027ed861681a722efc9896625d2beb9c7d93cd46ac9f0e9f9ec746d6f4aad6766d859b1bcdbe5ad74807d159e5d5c2a3f4c2a8e94dc190e71634067f3 - languageName: node - linkType: hard - -"npm-registry-fetch@npm:^19.0.0": - version: 19.1.1 - resolution: "npm-registry-fetch@npm:19.1.1" - dependencies: - "@npmcli/redact": "npm:^4.0.0" - jsonparse: "npm:^1.3.1" - make-fetch-happen: "npm:^15.0.0" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^5.0.0" - minizlib: "npm:^3.0.1" - npm-package-arg: "npm:^13.0.0" - proc-log: "npm:^6.0.0" - checksum: 10/a3f4614a8421b40f72c71cdb97aca3b710a508c929a00b6f795020eaabef19dbe4a3f5043703aa54a1dd56b6d92bc1e764f2299d5a47d6e883942495db085a5e - languageName: node - linkType: hard - -"npm-run-path@npm:4.0.1, 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 - -"nx@npm:>=21.5.3 < 23.0.0": - version: 22.7.8 - resolution: "nx@npm:22.7.8" - dependencies: - "@emnapi/core": "npm:1.4.5" - "@emnapi/runtime": "npm:1.4.5" - "@emnapi/wasi-threads": "npm:1.0.4" - "@jest/diff-sequences": "npm:30.0.1" - "@napi-rs/wasm-runtime": "npm:0.2.4" - "@nx/nx-darwin-arm64": "npm:22.7.8" - "@nx/nx-darwin-x64": "npm:22.7.8" - "@nx/nx-freebsd-x64": "npm:22.7.8" - "@nx/nx-linux-arm-gnueabihf": "npm:22.7.8" - "@nx/nx-linux-arm64-gnu": "npm:22.7.8" - "@nx/nx-linux-arm64-musl": "npm:22.7.8" - "@nx/nx-linux-x64-gnu": "npm:22.7.8" - "@nx/nx-linux-x64-musl": "npm:22.7.8" - "@nx/nx-win32-arm64-msvc": "npm:22.7.8" - "@nx/nx-win32-x64-msvc": "npm:22.7.8" - "@tybys/wasm-util": "npm:0.9.0" - "@yarnpkg/lockfile": "npm:1.1.0" - "@zkochan/js-yaml": "npm:0.0.7" - agent-base: "npm:6.0.2" - ansi-colors: "npm:4.1.3" - ansi-regex: "npm:5.0.1" - ansi-styles: "npm:4.3.0" - argparse: "npm:2.0.1" - asynckit: "npm:0.4.0" - axios: "npm:1.18.1" - balanced-match: "npm:4.0.3" - base64-js: "npm:1.5.1" - bl: "npm:4.1.0" - brace-expansion: "npm:5.0.8" - buffer: "npm:5.7.1" - call-bind-apply-helpers: "npm:1.0.2" - chalk: "npm:4.1.2" - cli-cursor: "npm:3.1.0" - cli-spinners: "npm:2.6.1" - cliui: "npm:8.0.1" - clone: "npm:1.0.4" - color-convert: "npm:2.0.1" - color-name: "npm:1.1.4" - combined-stream: "npm:1.0.8" - debug: "npm:4.4.3" - defaults: "npm:1.0.4" - define-lazy-prop: "npm:2.0.0" - delayed-stream: "npm:1.0.0" - dotenv: "npm:16.4.7" - dotenv-expand: "npm:12.0.3" - dunder-proto: "npm:1.0.1" - ejs: "npm:5.0.1" - emoji-regex: "npm:8.0.0" - end-of-stream: "npm:1.4.5" - enquirer: "npm:2.3.6" - es-define-property: "npm:1.0.1" - es-errors: "npm:1.3.0" - es-object-atoms: "npm:1.1.1" - es-set-tostringtag: "npm:2.1.0" - escalade: "npm:3.2.0" - escape-string-regexp: "npm:1.0.5" - figures: "npm:3.2.0" - flat: "npm:5.0.2" - follow-redirects: "npm:1.16.0" - form-data: "npm:4.0.6" - fs-constants: "npm:1.0.0" - function-bind: "npm:1.1.2" - get-caller-file: "npm:2.0.5" - get-intrinsic: "npm:1.3.0" - get-proto: "npm:1.0.1" - gopd: "npm:1.2.0" - has-flag: "npm:4.0.0" - has-symbols: "npm:1.1.0" - has-tostringtag: "npm:1.0.2" - hasown: "npm:2.0.4" - https-proxy-agent: "npm:5.0.1" - ieee754: "npm:1.2.1" - ignore: "npm:7.0.5" - inherits: "npm:2.0.4" - is-docker: "npm:2.2.1" - is-fullwidth-code-point: "npm:3.0.0" - is-interactive: "npm:1.0.0" - is-unicode-supported: "npm:0.1.0" - is-wsl: "npm:2.2.0" - json5: "npm:2.2.3" - jsonc-parser: "npm:3.2.0" - lines-and-columns: "npm:2.0.3" - log-symbols: "npm:4.1.0" - math-intrinsics: "npm:1.1.0" - mime-db: "npm:1.52.0" - mime-types: "npm:2.1.35" - mimic-fn: "npm:2.1.0" - minimatch: "npm:10.2.5" - minimist: "npm:1.2.8" - ms: "npm:2.1.3" - npm-run-path: "npm:4.0.1" - once: "npm:1.4.0" - onetime: "npm:5.1.2" - open: "npm:8.4.2" - ora: "npm:5.3.0" - path-key: "npm:3.1.1" - picocolors: "npm:1.1.1" - proxy-from-env: "npm:2.1.0" - readable-stream: "npm:3.6.2" - require-directory: "npm:2.1.1" - resolve.exports: "npm:2.0.3" - restore-cursor: "npm:3.1.0" - safe-buffer: "npm:5.2.1" - semver: "npm:7.7.4" - signal-exit: "npm:3.0.7" - smol-toml: "npm:1.6.1" - string-width: "npm:4.2.3" - string_decoder: "npm:1.3.0" - strip-ansi: "npm:6.0.1" - strip-bom: "npm:3.0.0" - supports-color: "npm:7.2.0" - tar-stream: "npm:2.2.0" - tmp: "npm:0.2.7" - tree-kill: "npm:1.2.2" - tsconfig-paths: "npm:4.2.0" - tslib: "npm:2.8.1" - util-deprecate: "npm:1.0.2" - wcwidth: "npm:1.0.1" - wrap-ansi: "npm:7.0.0" - wrappy: "npm:1.0.2" - y18n: "npm:5.0.8" - yaml: "npm:2.9.0" - yargs: "npm:17.7.2" - yargs-parser: "npm:21.1.1" - peerDependencies: - "@swc-node/register": ^1.11.1 - "@swc/core": ^1.15.8 - 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: ./dist/bin/nx.js - nx-cloud: ./dist/bin/nx-cloud.js - checksum: 10/f83a6aeb385803c5692a858cd51e114759106ff8617cfd52a4b2f36897c2097d27c50a4984724fcd0cc4220c5cd2bd4761d7f216856cb177af29a3ecf855c4f8 - 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 - -"obug@npm:^2.1.1": - version: 2.1.1 - resolution: "obug@npm:2.1.1" - checksum: 10/bdcf9213361786688019345f3452b95a1dc73710e4b403c82a1994b98bad6abc31b26cb72a482128c5fd53ea9daf6fbb7d0e0e7b2b7e9c8be6d779deeccee07f - languageName: node - linkType: hard - -"once@npm:1.4.0, 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.2, 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.2": - 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 - -"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": - 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.4 - resolution: "p-map@npm:7.0.4" - checksum: 10/ef48c3b2e488f31c693c9fcc0df0ef76518cf6426a495cf9486ebbb0fd7f31aef7f90e96f72e0070c0ff6e3177c9318f644b512e2c29e3feee8d7153fcb6782e - 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": - 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.7.0": - version: 1.8.0 - resolution: "package-manager-detector@npm:1.8.0" - checksum: 10/5d79b8bf3d0d3da312ec08749c74a3b7e4d4139c259fe3561538772c65ece8ff733e002c67a4324b5c505d2ac625c121b94cf3d5135e1b4e43fed5bced148763 - languageName: node - linkType: hard - -"pacote@npm:21.0.1": - version: 21.0.1 - resolution: "pacote@npm:21.0.1" - dependencies: - "@npmcli/git": "npm:^6.0.0" - "@npmcli/installed-package-contents": "npm:^3.0.0" - "@npmcli/package-json": "npm:^7.0.0" - "@npmcli/promise-spawn": "npm:^8.0.0" - "@npmcli/run-script": "npm:^10.0.0" - cacache: "npm:^20.0.0" - fs-minipass: "npm:^3.0.0" - minipass: "npm:^7.0.2" - npm-package-arg: "npm:^13.0.0" - npm-packlist: "npm:^10.0.1" - npm-pick-manifest: "npm:^10.0.0" - npm-registry-fetch: "npm:^19.0.0" - proc-log: "npm:^5.0.0" - promise-retry: "npm:^2.0.1" - sigstore: "npm:^4.0.0" - ssri: "npm:^12.0.0" - tar: "npm:^7.4.3" - bin: - pacote: bin/index.js - checksum: 10/7293aec3d2464da7e22b949b1cee3ccb5e5082dfb5798506ce731fed83878339ca5790935d4ff9f9c97ca3df48dd79ff6a8829d367953e9b16d53c7134fc2c6d - languageName: node - linkType: hard - -"pacote@npm:^21.0.0, pacote@npm:^21.0.2": - version: 21.0.4 - resolution: "pacote@npm:21.0.4" - dependencies: - "@npmcli/git": "npm:^7.0.0" - "@npmcli/installed-package-contents": "npm:^4.0.0" - "@npmcli/package-json": "npm:^7.0.0" - "@npmcli/promise-spawn": "npm:^9.0.0" - "@npmcli/run-script": "npm:^10.0.0" - cacache: "npm:^20.0.0" - fs-minipass: "npm:^3.0.0" - minipass: "npm:^7.0.2" - npm-package-arg: "npm:^13.0.0" - npm-packlist: "npm:^10.0.1" - npm-pick-manifest: "npm:^11.0.1" - npm-registry-fetch: "npm:^19.0.0" - proc-log: "npm:^6.0.0" - promise-retry: "npm:^2.0.1" - sigstore: "npm:^4.0.0" - ssri: "npm:^13.0.0" - tar: "npm:^7.4.3" - bin: - pacote: bin/index.js - checksum: 10/1c706ee45a683b559d0c9591e820627861eb58596507072a63e122c073af3f69f170017f453e44186496a9058feb430a21a43a8531739c5651f279be5fb065f1 - 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:^4.0.0": - version: 4.0.0 - resolution: "parse-conflict-json@npm:4.0.0" - dependencies: - json-parse-even-better-errors: "npm:^4.0.0" - just-diff: "npm:^6.0.0" - just-diff-apply: "npm:^5.2.0" - checksum: 10/3e8391cfe6aafc52b97054959cea00d9cd34bc2281c6a3169bee13fd88ded0c7d8d202ea186a7bf905a1343366fc6d55df1014cad83f095fe7ed267a13f8b6c2 - 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.1.0 - resolution: "parse-path@npm:7.1.0" - dependencies: - protocols: "npm:^2.0.0" - checksum: 10/6da6c6803fa73bacfee98e694c6c95fa55caae632c765369e4fd917f1043ef71f35ecaae420ef0e39e933bd1f939c4bc1e01522b62145191cdbe72e58d37a8ab - 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:^8.0.1": - version: 8.0.1 - resolution: "parse5@npm:8.0.1" - dependencies: - entities: "npm:^8.0.0" - checksum: 10/671dedfe7cbf4714414317bc8c6b2a14c61ef44f8fd90c983b5b1870653af5aa2e3b4e25e38e9538a7120ea2b688c50908830da2bd0930d8fd4bce34aed024eb - 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.1.1, 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:^2.0.0": - version: 2.0.1 - resolution: "path-scurry@npm:2.0.1" - dependencies: - lru-cache: "npm:^11.0.0" - minipass: "npm:^7.1.2" - checksum: 10/1e9c74e9ccf94d7c16056a5cb2dba9fa23eec1bc221ab15c44765486b9b9975b4cd9a4d55da15b96eadf67d5202e9a2f1cec9023fbb35fe7d9ccd0ff1891f88b - 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 - -"pathe@npm:^2.0.1, pathe@npm:^2.0.3": - version: 2.0.3 - resolution: "pathe@npm:2.0.3" - checksum: 10/01e9a69928f39087d96e1751ce7d6d50da8c39abf9a12e0ac2389c42c83bc76f78c45a475bd9026a02e6a6f79be63acc75667df855862fe567d99a00a540d23d - languageName: node - linkType: hard - -"picocolors@npm:1.1.1, picocolors@npm:^1.1.1": - version: 1.1.1 - resolution: "picocolors@npm:1.1.1" - checksum: 10/e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 - languageName: node - linkType: hard - -"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3": - version: 4.0.3 - resolution: "picomatch@npm:4.0.3" - checksum: 10/57b99055f40b16798f2802916d9c17e9744e620a0db136554af01d19598b96e45e2f00014c91d1b8b13874b80caa8c295b3d589a3f72373ec4aaf54baa5962d5 - languageName: node - linkType: hard - -"picomatch@npm:^4.0.4": - version: 4.0.4 - resolution: "picomatch@npm:4.0.4" - checksum: 10/f6ef80a3590827ce20378ae110ac78209cc4f74d39236370f1780f957b7ee41c12acde0e4651b90f39983506fd2f5e449994716f516db2e9752924aff8de93ce - 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 - -"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 - -"pkg-types@npm:^1.3.1": - version: 1.3.1 - resolution: "pkg-types@npm:1.3.1" - dependencies: - confbox: "npm:^0.1.8" - mlly: "npm:^1.7.4" - pathe: "npm:^2.0.1" - checksum: 10/6d491f2244597b24fb59a50e3c258f27da3839555d2a4e112b31bcf536e9359fc4edc98639cd74d2cf16fcd4269e5a09d99fc05d89e2acc896a2f027c2f6ec44 - 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:^7.0.0": - version: 7.1.1 - resolution: "postcss-selector-parser@npm:7.1.1" - dependencies: - cssesc: "npm:^3.0.0" - util-deprecate: "npm:^1.0.2" - checksum: 10/bb3c6455b20af26a556e3021e21101d8470252644e673c1612f7348ff8dd41b11321329f0694cf299b5b94863f823480b72d3e2f4bd3a89dc43e2d8c0dbad341 - languageName: node - linkType: hard - -"postcss@npm:^8.5.15": - version: 8.5.25 - resolution: "postcss@npm:8.5.25" - dependencies: - nanoid: "npm:^3.3.16" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10/68aaeb314a1b2407e11e926acc0462b01b3e911d3d9e755d06adc5b2ececdefe8432dc3c3c93eacc07138952e17997d4674529061b8e3a338a7ac4c1accfdf98 - languageName: node - linkType: hard - -"pretty-format@npm:30.2.0": - version: 30.2.0 - resolution: "pretty-format@npm:30.2.0" - dependencies: - "@jest/schemas": "npm:30.0.5" - ansi-styles: "npm:^5.2.0" - react-is: "npm:^18.3.1" - checksum: 10/725890d648e3400575eebc99a334a4cd1498e0d36746313913706bbeea20ada27e17c184a3cd45c50f705c16111afa829f3450233fc0fda5eed293c69757e926 - languageName: node - linkType: hard - -"pretty-ms@npm:^9.3.0": - version: 9.3.0 - resolution: "pretty-ms@npm:9.3.0" - dependencies: - parse-ms: "npm:^4.0.0" - checksum: 10/beb4e04dc17071885b827e3f33d36be279791f2f36a8c29a45c77e59979dad79a5d7e5211922c72a3f6f109bb64a707d70fcdba6746e077122afcd88ce202e98 - 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 - -"proc-log@npm:^6.0.0, proc-log@npm:^6.1.0": - version: 6.1.0 - resolution: "proc-log@npm:6.1.0" - checksum: 10/9033f30f168ed5a0991b773d0c50ff88384c4738e9a0a67d341de36bf7293771eed648ab6a0562f62276da12fde91f3bbfc75ffff6e71ad49aafd74fc646be66 - 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:^3.0.0": - version: 3.0.0 - resolution: "proggy@npm:3.0.0" - checksum: 10/0e09168c20282ddba82691118b6d1f9ea08b8a6d349a3fd30ccba598bb84577e8108da1cfd49f67c905b80e4b76ab36b58b611ebaaaa275e28d53ca066391f8e - 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-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:^2.0.0": - version: 2.0.0 - resolution: "promzard@npm:2.0.0" - dependencies: - read: "npm:^4.0.0" - checksum: 10/599ccf47b82df7b01dbef0fe833350436a9762c92237a684525733918179e7ae36151218d6a51d36f9cfffb83966d553cf1308de443836cf97d8be13fda1f57e - 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:2.1.0, proxy-from-env@npm:^2.1.0": - version: 2.1.0 - resolution: "proxy-from-env@npm:2.1.0" - checksum: 10/fbbaf4dab2a6231dc9e394903a5f66f20475e36b734335790b46feb9da07c37d6b32e2c02e3e2ea4d4b23774c53d8562e5b7cc73282cb43f4a597b7eacaee2ee - languageName: node - linkType: hard - -"publint@npm:0.3.22": - version: 0.3.22 - resolution: "publint@npm:0.3.22" - dependencies: - "@publint/pack": "npm:^0.1.6" - package-manager-detector: "npm:^1.7.0" - picocolors: "npm:^1.1.1" - sade: "npm:^1.8.1" - bin: - publint: ./src/cli.js - checksum: 10/7274bf7c3e0590dec42a66b2ef5df7fd39211c862ba68b422917693df35eee2fc2199083bc7924ba6c6989991b7ddb18be3cdc9fcf1bab7dfb109aacc92b05c4 - 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.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.15.2 - resolution: "qs@npm:6.15.2" - dependencies: - side-channel: "npm:^1.1.0" - checksum: 10/7a934b2dba40654cf9878dab7c1e7ad56c6186265509727fbece67dadc38fd5d67715b61b6ef938e5a0475faeee701d18ec0a7ce420ad64367caad7f1bdb66e2 - 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.3.1": - 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": - version: 4.0.0 - resolution: "read-cmd-shim@npm:4.0.0" - checksum: 10/69a83acf0a3e2357762d5944a6f4a3f3c5527d0f9fe8a5c9362225aaf702ccfa580ff3bc0b84809c99e88861a5e5be147629717f02ff9befdac68fca1ccc7664 - languageName: node - linkType: hard - -"read-cmd-shim@npm:^5.0.0": - version: 5.0.0 - resolution: "read-cmd-shim@npm:5.0.0" - checksum: 10/21ca52fd722e65e8fa0c5de331fee8275272834bce89810a627d4907a5911e69fee00fe30d384af012c5a3904dc2b867b23a5e8e014cacb775299486389facc3 - 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:^4.0.0": - version: 4.1.0 - resolution: "read@npm:4.1.0" - dependencies: - mute-stream: "npm:^2.0.0" - checksum: 10/57e4e7b220bc63121dc9586bec898e79d45e074ec8326f7564b2b25f8483497ac27fcabbee2c1ab6eb73b38489814ab1a67e018902c4782a27575469838c4d83 - languageName: node - linkType: hard - -"readable-stream@npm:3.6.2, 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, require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: 10/a72468e2589270d91f06c7d36ec97a88db53ae5d6fe3787fadc943f0b0276b10347f89b363b2a82285f650bdcc135ad4a257c61bdd4d00d6df1fa24875b0ddaf - languageName: node - linkType: hard - -"require-from-string@npm:^2.0.2": - version: 2.0.2 - resolution: "require-from-string@npm:2.0.2" - checksum: 10/839a3a890102a658f4cb3e7b2aa13a1f80a3a976b512020c3d1efc418491c48a886b6e481ea56afc6c4cb5eef678f23b2a4e70575e7534eccadf5e30ed2e56eb - 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:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: 10/91eb76ce83621eea7bbdd9b55121a5c1c4a39e54a9ce04a9ad4517f102f8b5131c2cf07622c738a6683991bf54f2ce178f5a42803ecbd527ddc5105f362cc9e3 - languageName: node - linkType: hard - -"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.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.11 - resolution: "resolve@npm:1.22.11" - dependencies: - is-core-module: "npm:^2.16.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10/e1b2e738884a08de03f97ee71494335eba8c2b0feb1de9ae065e82c48997f349f77a2b10e8817e147cf610bfabc4b1cb7891ee8eaf5bf80d4ad514a34c4fab0a - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin": - version: 1.22.11 - resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.16.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10/fd342cad25e52cd6f4f3d1716e189717f2522bfd6641109fe7aa372f32b5714a296ed7c238ddbe7ebb0c1ddfe0b7f71c9984171024c97cf1b2073e3e40ff71a8 - languageName: node - linkType: hard - -"restore-cursor@npm:3.1.0, 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 - -"rolldown@npm:1.0.3": - version: 1.0.3 - resolution: "rolldown@npm:1.0.3" - dependencies: - "@oxc-project/types": "npm:=0.133.0" - "@rolldown/binding-android-arm64": "npm:1.0.3" - "@rolldown/binding-darwin-arm64": "npm:1.0.3" - "@rolldown/binding-darwin-x64": "npm:1.0.3" - "@rolldown/binding-freebsd-x64": "npm:1.0.3" - "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.3" - "@rolldown/binding-linux-arm64-gnu": "npm:1.0.3" - "@rolldown/binding-linux-arm64-musl": "npm:1.0.3" - "@rolldown/binding-linux-ppc64-gnu": "npm:1.0.3" - "@rolldown/binding-linux-s390x-gnu": "npm:1.0.3" - "@rolldown/binding-linux-x64-gnu": "npm:1.0.3" - "@rolldown/binding-linux-x64-musl": "npm:1.0.3" - "@rolldown/binding-openharmony-arm64": "npm:1.0.3" - "@rolldown/binding-wasm32-wasi": "npm:1.0.3" - "@rolldown/binding-win32-arm64-msvc": "npm:1.0.3" - "@rolldown/binding-win32-x64-msvc": "npm:1.0.3" - "@rolldown/pluginutils": "npm:^1.0.0" - dependenciesMeta: - "@rolldown/binding-android-arm64": - optional: true - "@rolldown/binding-darwin-arm64": - optional: true - "@rolldown/binding-darwin-x64": - optional: true - "@rolldown/binding-freebsd-x64": - optional: true - "@rolldown/binding-linux-arm-gnueabihf": - optional: true - "@rolldown/binding-linux-arm64-gnu": - optional: true - "@rolldown/binding-linux-arm64-musl": - optional: true - "@rolldown/binding-linux-ppc64-gnu": - optional: true - "@rolldown/binding-linux-s390x-gnu": - optional: true - "@rolldown/binding-linux-x64-gnu": - optional: true - "@rolldown/binding-linux-x64-musl": - optional: true - "@rolldown/binding-openharmony-arm64": - optional: true - "@rolldown/binding-wasm32-wasi": - optional: true - "@rolldown/binding-win32-arm64-msvc": - optional: true - "@rolldown/binding-win32-x64-msvc": - optional: true - bin: - rolldown: ./bin/cli.mjs - checksum: 10/4dbe2c055104c47c15c051b713068cf4660acd473841904d3f7118f730922b2e498176610a45826cbc1ffe36842a29a076385d3bfcd5acb0f7ef8ad06b8feefb - languageName: node - linkType: hard - -"rollup@npm:4.62.4": - version: 4.62.4 - resolution: "rollup@npm:4.62.4" - dependencies: - "@napi-rs/lzma-linux-x64-gnu": "npm:1.5.1" - "@rollup/rollup-android-arm-eabi": "npm:4.62.4" - "@rollup/rollup-android-arm64": "npm:4.62.4" - "@rollup/rollup-darwin-arm64": "npm:4.62.4" - "@rollup/rollup-darwin-x64": "npm:4.62.4" - "@rollup/rollup-freebsd-arm64": "npm:4.62.4" - "@rollup/rollup-freebsd-x64": "npm:4.62.4" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.62.4" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.62.4" - "@rollup/rollup-linux-arm64-gnu": "npm:4.62.4" - "@rollup/rollup-linux-arm64-musl": "npm:4.62.4" - "@rollup/rollup-linux-loong64-gnu": "npm:4.62.4" - "@rollup/rollup-linux-loong64-musl": "npm:4.62.4" - "@rollup/rollup-linux-ppc64-gnu": "npm:4.62.4" - "@rollup/rollup-linux-ppc64-musl": "npm:4.62.4" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.62.4" - "@rollup/rollup-linux-riscv64-musl": "npm:4.62.4" - "@rollup/rollup-linux-s390x-gnu": "npm:4.62.4" - "@rollup/rollup-linux-x64-gnu": "npm:4.62.4" - "@rollup/rollup-linux-x64-musl": "npm:4.62.4" - "@rollup/rollup-openbsd-x64": "npm:4.62.4" - "@rollup/rollup-openharmony-arm64": "npm:4.62.4" - "@rollup/rollup-win32-arm64-msvc": "npm:4.62.4" - "@rollup/rollup-win32-ia32-msvc": "npm:4.62.4" - "@rollup/rollup-win32-x64-gnu": "npm:4.62.4" - "@rollup/rollup-win32-x64-msvc": "npm:4.62.4" - "@types/estree": "npm:1.0.9" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@napi-rs/lzma-linux-x64-gnu": - optional: true - "@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-loong64-gnu": - optional: true - "@rollup/rollup-linux-loong64-musl": - optional: true - "@rollup/rollup-linux-ppc64-gnu": - optional: true - "@rollup/rollup-linux-ppc64-musl": - 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-openbsd-x64": - optional: true - "@rollup/rollup-openharmony-arm64": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-gnu": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10/2392665d3f6177ff58ee6675c75a379d191748d51559ed447b2ee3c5b00855146d67cdea7d816986b1294bb173e557c83ef00a027f549b7d49591c959288a306 - languageName: node - linkType: hard - -"rollup@npm:^4.34.8": - version: 4.59.0 - resolution: "rollup@npm:4.59.0" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.59.0" - "@rollup/rollup-android-arm64": "npm:4.59.0" - "@rollup/rollup-darwin-arm64": "npm:4.59.0" - "@rollup/rollup-darwin-x64": "npm:4.59.0" - "@rollup/rollup-freebsd-arm64": "npm:4.59.0" - "@rollup/rollup-freebsd-x64": "npm:4.59.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.59.0" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.59.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.59.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.59.0" - "@rollup/rollup-linux-loong64-gnu": "npm:4.59.0" - "@rollup/rollup-linux-loong64-musl": "npm:4.59.0" - "@rollup/rollup-linux-ppc64-gnu": "npm:4.59.0" - "@rollup/rollup-linux-ppc64-musl": "npm:4.59.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.59.0" - "@rollup/rollup-linux-riscv64-musl": "npm:4.59.0" - "@rollup/rollup-linux-s390x-gnu": "npm:4.59.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.59.0" - "@rollup/rollup-linux-x64-musl": "npm:4.59.0" - "@rollup/rollup-openbsd-x64": "npm:4.59.0" - "@rollup/rollup-openharmony-arm64": "npm:4.59.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.59.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.59.0" - "@rollup/rollup-win32-x64-gnu": "npm:4.59.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.59.0" - "@types/estree": "npm:1.0.8" - 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-loong64-gnu": - optional: true - "@rollup/rollup-linux-loong64-musl": - optional: true - "@rollup/rollup-linux-ppc64-gnu": - optional: true - "@rollup/rollup-linux-ppc64-musl": - 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-openbsd-x64": - optional: true - "@rollup/rollup-openharmony-arm64": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-gnu": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10/728237932aad7022c0640cd126b9fe5285f2578099f22a0542229a17785320a6553b74582fa5977877541c1faf27de65ed2750bc89dbb55b525405244a46d9f1 - languageName: node - linkType: hard - -"run-async@npm:^4.0.5": - version: 4.0.6 - resolution: "run-async@npm:4.0.6" - checksum: 10/d23929e36d0422b871a8964d5cfcb1b88295950ea5f72e1dfed458d4c3f3a33a7395e08167d8a4446f2110cfaac7d7653d9c804d2becab8afa8a63e16b97da81 - languageName: node - linkType: hard - -"rxjs@npm:^7.8.2": - 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.2.1, safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 - 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 - -"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": - version: 5.7.2 - resolution: "semver@npm:5.7.2" - bin: - semver: bin/semver - checksum: 10/fca14418a174d4b4ef1fecb32c5941e3412d52a4d3d85165924ce3a47fbc7073372c26faf7484ceb4bbc2bde25880c6b97e492473dc7e9708fdfb1c6a02d546e - languageName: node - linkType: hard - -"semver@npm:7.7.2": - version: 7.7.2 - resolution: "semver@npm:7.7.2" - bin: - semver: bin/semver.js - checksum: 10/7a24cffcaa13f53c09ce55e05efe25cd41328730b2308678624f8b9f5fc3093fc4d189f47950f0b811ff8f3c3039c24a2c36717ba7961615c682045bf03e1dda - languageName: node - linkType: hard - -"semver@npm:7.7.4": - version: 7.7.4 - resolution: "semver@npm:7.7.4" - bin: - semver: bin/semver.js - checksum: 10/26bdc6d58b29528f4142d29afb8526bc335f4fc04c4a10f2b98b217f277a031c66736bf82d3d3bb354a2f6a3ae50f18fd62b053c4ac3f294a3d10a61f5075b75 - 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.5.3, semver@npm:^7.5.4, semver@npm:^7.6.3, semver@npm:^7.7.2": - version: 7.7.3 - resolution: "semver@npm:7.7.3" - bin: - semver: bin/semver.js - checksum: 10/8dbc3168e057a38fc322af909c7f5617483c50caddba135439ff09a754b20bdd6482a5123ff543dad4affa488ecf46ec5fb56d61312ad20bb140199b88dfaea9 - languageName: node - linkType: hard - -"semver@npm:^7.8.4": - version: 7.8.5 - resolution: "semver@npm:7.8.5" - bin: - semver: bin/semver.js - checksum: 10/9b01d2ff11e6e4a4539b7ca3c5f280c8704cb397a28504469f2ed4f00ad2194748d756647362a9712fff30984d15772ab7f083108c2fb508e2096ae9e708f22c - languageName: node - linkType: hard - -"sharp@npm:0.35.2": - version: 0.35.2 - resolution: "sharp@npm:0.35.2" - dependencies: - "@img/colour": "npm:^1.1.0" - "@img/sharp-darwin-arm64": "npm:0.35.2" - "@img/sharp-darwin-x64": "npm:0.35.2" - "@img/sharp-freebsd-wasm32": "npm:0.35.2" - "@img/sharp-libvips-darwin-arm64": "npm:1.3.1" - "@img/sharp-libvips-darwin-x64": "npm:1.3.1" - "@img/sharp-libvips-linux-arm": "npm:1.3.1" - "@img/sharp-libvips-linux-arm64": "npm:1.3.1" - "@img/sharp-libvips-linux-ppc64": "npm:1.3.1" - "@img/sharp-libvips-linux-riscv64": "npm:1.3.1" - "@img/sharp-libvips-linux-s390x": "npm:1.3.1" - "@img/sharp-libvips-linux-x64": "npm:1.3.1" - "@img/sharp-libvips-linuxmusl-arm64": "npm:1.3.1" - "@img/sharp-libvips-linuxmusl-x64": "npm:1.3.1" - "@img/sharp-linux-arm": "npm:0.35.2" - "@img/sharp-linux-arm64": "npm:0.35.2" - "@img/sharp-linux-ppc64": "npm:0.35.2" - "@img/sharp-linux-riscv64": "npm:0.35.2" - "@img/sharp-linux-s390x": "npm:0.35.2" - "@img/sharp-linux-x64": "npm:0.35.2" - "@img/sharp-linuxmusl-arm64": "npm:0.35.2" - "@img/sharp-linuxmusl-x64": "npm:0.35.2" - "@img/sharp-webcontainers-wasm32": "npm:0.35.2" - "@img/sharp-win32-arm64": "npm:0.35.2" - "@img/sharp-win32-ia32": "npm:0.35.2" - "@img/sharp-win32-x64": "npm:0.35.2" - detect-libc: "npm:^2.1.2" - semver: "npm:^7.8.4" - dependenciesMeta: - "@img/sharp-darwin-arm64": - optional: true - "@img/sharp-darwin-x64": - optional: true - "@img/sharp-freebsd-wasm32": - 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-ppc64": - optional: true - "@img/sharp-libvips-linux-riscv64": - 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-ppc64": - optional: true - "@img/sharp-linux-riscv64": - 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-webcontainers-wasm32": - optional: true - "@img/sharp-win32-arm64": - optional: true - "@img/sharp-win32-ia32": - optional: true - "@img/sharp-win32-x64": - optional: true - checksum: 10/4a099cf84c44807bf760b8fd801ec6d4f65370b21d1a2a53031510226e3e61376330bc1c4030c4440860b5f87c0af56a81954675b7933c42d6769a5b617df8e4 - 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:^4.0.0": - version: 4.1.1 - resolution: "sigstore@npm:4.1.1" - dependencies: - "@sigstore/bundle": "npm:^4.0.0" - "@sigstore/core": "npm:^3.2.1" - "@sigstore/protobuf-specs": "npm:^0.5.0" - "@sigstore/sign": "npm:^4.1.1" - "@sigstore/tuf": "npm:^4.0.2" - "@sigstore/verify": "npm:^3.1.1" - checksum: 10/8fb38bbdc3ee1e79b3f19e0015ebf35b7d7f890673722f182960ec88f02a52f2f631fc983e7f8bafa3a37653a760ddc00277721a8f9159ee6ee311159ca3dfbe - 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": - 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 - -"smol-toml@npm:1.6.1": - version: 1.6.1 - resolution: "smol-toml@npm:1.6.1" - checksum: 10/9a0d86cc7f8abef429c915b373b9a1f369fe57a87efbbec46b967fb41dc28af753a2fa62c9c4848907c3b47c282be15c8854aa4e2942ef1fa86ff95a76d13856 - 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.7 - resolution: "socks@npm:2.8.7" - dependencies: - ip-address: "npm:^10.0.1" - smart-buffer: "npm:^4.2.0" - checksum: 10/d19366c95908c19db154f329bbe94c2317d315dc933a7c2b5101e73f32a555c84fb199b62174e1490082a593a4933d8d5a9b297bde7d1419c14a11a965f51356 - 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.6.1": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 10/59ef7462f1c29d502b3057e822cdbdae0b0e565302c4dd1a95e11e793d8d9d62006cdc10e0fd99163ca33ff2071360cf50ee13f90440806e7ed57d81cba2f7ff - languageName: node - linkType: hard - -"source-map@npm:^0.7.6": - version: 0.7.6 - resolution: "source-map@npm:0.7.6" - checksum: 10/c8d2da7c57c14f3fd7568f764b39ad49bbf9dd7632b86df3542b31fed117d4af2fb74a4f886fc06baf7a510fee68e37998efc3080aacdac951c36211dc29a7a3 - 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.22 - resolution: "spdx-license-ids@npm:3.0.22" - checksum: 10/a2f214aaf74c21a0172232367ce785157cef45d78617ee4d12aa1246350af566968e28b511e2096b707611566ac3959b85d8bf2d53a65bc6b66580735d3e1965 - 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 - -"ssri@npm:12.0.0, 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 - -"ssri@npm:^13.0.0": - version: 13.0.0 - resolution: "ssri@npm:13.0.0" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10/fd59bfedf0659c1b83f6e15459162da021f08ec0f5834dd9163296f8b77ee82f9656aa1d415c3d3848484293e0e6aefdd482e863e52ddb53d520bb73da1eeec1 - 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 - -"std-env@npm:^4.0.0-rc.1": - version: 4.0.0 - resolution: "std-env@npm:4.0.0" - checksum: 10/19ef21cd85da52dc1178288d1b69e242b6579c0a76ddba2374f859aa58678797ec4a34c4f1fe6b9007a032e04d6fd3fca4e27349c88809265a9cbd90d924203f - 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:4.2.3, 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.3.0, 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.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.2 - resolution: "strip-ansi@npm:7.1.2" - dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10/db0e3f9654e519c8a33c50fc9304d07df5649388e7da06d3aabf66d29e5ad65d5e6315d8519d409c15b32fa82c1df7e11ed6f8cd50b0e4404463f0c9d77c8d0b - languageName: node - linkType: hard - -"strip-bom@npm:3.0.0, 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 - -"sucrase@npm:^3.35.0": - version: 3.35.1 - resolution: "sucrase@npm:3.35.1" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.2" - commander: "npm:^4.0.0" - lines-and-columns: "npm:^1.1.6" - mz: "npm:^2.7.0" - pirates: "npm:^4.0.1" - tinyglobby: "npm:^0.2.11" - ts-interface-checker: "npm:^0.1.9" - bin: - sucrase: bin/sucrase - sucrase-node: bin/sucrase-node - checksum: 10/539f5c6ebc1ff8d449a89eb52b8c8944a730b9840ddadbd299a7d89ebcf16c3f4bc9aa59e1f2e112a502e5cf1508f7e02065f0e97c0435eb9a7058e997dfff5a - languageName: node - linkType: hard - -"supports-color@npm:7.2.0, 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-color@npm:^10.0.0": - version: 10.2.2 - resolution: "supports-color@npm:10.2.2" - checksum: 10/bd132705fc07213a4024131fb061f0a46a48b49ecaf434bb029c0a5aa0339b969236d496d63969e3c248a90fdcac16d4f9c5bf187e7be0bfb5e804ed13bef6b0 - 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:7.5.11, tar@npm:^7.4.3, tar@npm:^7.5.2": - version: 7.5.11 - resolution: "tar@npm:7.5.11" - dependencies: - "@isaacs/fs-minipass": "npm:^4.0.0" - chownr: "npm:^3.0.0" - minipass: "npm:^7.1.2" - minizlib: "npm:^3.1.0" - yallist: "npm:^5.0.0" - checksum: 10/fb2e77ee858a73936c68e066f4a602d428d6f812e6da0cc1e14a41f99498e4f7fd3535e355fa15157240a5538aa416026cfa6306bb0d1d1c1abf314b1f878e9a - 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.3.8, through@npm:>=2.2.7 <3": - 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 - -"tinyexec@npm:^1.0.2": - version: 1.0.2 - resolution: "tinyexec@npm:1.0.2" - checksum: 10/cb709ed4240e873d3816e67f851d445f5676e0ae3a52931a60ff571d93d388da09108c8057b62351766133ee05ff3159dd56c3a0fbd39a5933c6639ce8771405 - languageName: node - linkType: hard - -"tinyexec@npm:^1.2.4": - version: 1.3.0 - resolution: "tinyexec@npm:1.3.0" - checksum: 10/749a8c5aac2ffe3f04220b8966f414636c6c324d4ae88895dfffb2319db61cf1c01c5d7e8f0fb8ab747389ea0be1f0f80d850a9cce88a9d96cc5ebcb345db018 - languageName: node - linkType: hard - -"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 - -"tinyglobby@npm:^0.2.11, tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.15": - version: 0.2.15 - resolution: "tinyglobby@npm:0.2.15" - dependencies: - fdir: "npm:^6.5.0" - picomatch: "npm:^4.0.3" - checksum: 10/d72bd826a8b0fa5fa3929e7fe5ba48fceb2ae495df3a231b6c5408cd7d8c00b58ab5a9c2a76ba56a62ee9b5e083626f1f33599734bed1ffc4b792406408f0ca2 - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.17": - version: 0.2.17 - resolution: "tinyglobby@npm:0.2.17" - dependencies: - fdir: "npm:^6.5.0" - picomatch: "npm:^4.0.4" - checksum: 10/f85e8a217d675c3f78d5f0ad25ea4557e7e023ed13ddc2b014da10bd0312eea53a34cd52356af07ccdff777f1243012547656282a4ca70936f68bf5065fbaa71 - languageName: node - linkType: hard - -"tinyrainbow@npm:^3.1.0": - version: 3.1.0 - resolution: "tinyrainbow@npm:3.1.0" - checksum: 10/4c2c01dde1e5bb9a74973daaae141d4d733d246280b2f9a7f6a9e7dd8e940d48b2580a6086125278777897bc44635d6ccec5f9f563c2179dd2129f4542d0ec05 - languageName: node - linkType: hard - -"tldts-core@npm:^7.0.19": - version: 7.0.19 - resolution: "tldts-core@npm:7.0.19" - checksum: 10/809229186fdf9202711a09293f5c6ab21d26207f34805a98faee59b6c295806cc88c102553e1f106c5d499228b0f22418c9c5226f6dbf81810eaa3c11c0b022a - languageName: node - linkType: hard - -"tldts@npm:^7.0.5": - version: 7.0.19 - resolution: "tldts@npm:7.0.19" - dependencies: - tldts-core: "npm:^7.0.19" - bin: - tldts: bin/cli.js - checksum: 10/a47f6416bf3790e3313293f00913e14fae44e3315d9ff975c7cae11688ce3532f39d342f45213a2f60a2ac29c3f57f46c870e81d4545724b761891c82658a1d9 - languageName: node - linkType: hard - -"tmp@npm:0.2.7": - version: 0.2.7 - resolution: "tmp@npm:0.2.7" - checksum: 10/0a3bc90beb0c6275273c3475fb57e466eaab1c9c4a101d029ff62b18146ce136e7f75d09de34863d9f2c2a492751402508f9e028bc98eb34a1416195d4b15619 - languageName: node - linkType: hard - -"tough-cookie@npm:^6.0.2": - version: 6.0.2 - resolution: "tough-cookie@npm:6.0.2" - dependencies: - tldts: "npm:^7.0.5" - checksum: 10/b231eb744709ce2369ea063f7a3d3816c0c7801a22ccd30a7ab46e90a5bbc531fcbbcc26520f79cfd8516de4340eb9f3568616beb93302548fc989ccb6a974b8 - languageName: node - linkType: hard - -"tr46@npm:^6.0.0": - version: 6.0.0 - resolution: "tr46@npm:6.0.0" - dependencies: - punycode: "npm:^2.3.1" - checksum: 10/e6d402eb2b780a40042f327f77b4ae316da1d2b18a29c16e48c239f5267c6005bbf780f854179cfae62b02dfaa70b0e9aad8f0078ccc4225f5b3b3b131928e8f - 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, 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.2.0": - 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.8.1, 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.5.1": - version: 8.5.1 - resolution: "tsup@npm:8.5.1" - 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.27.0" - fix-dts-default-cjs-exports: "npm:^1.0.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.7.6" - 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/f1927ec2dda93b218b39cd1cac1040902eef66e026261f5c265197c2f660cb5b9e1fb89353d50de5c6a5616463c02800e87e1daad7620b9c9051221d93c66824 - languageName: node - linkType: hard - -"tuf-js@npm:^4.1.0": - version: 4.1.0 - resolution: "tuf-js@npm:4.1.0" - dependencies: - "@tufjs/models": "npm:4.1.0" - debug: "npm:^4.4.3" - make-fetch-happen: "npm:^15.0.1" - checksum: 10/ae6d3f3e5de940fd6b9faeab3964f9cbddd8885e6dc01d3db7bacdb009abf31a3fab2e10162fc527781a67b04fb957cda2b6aa0017ce49b695fd3c24167aed97 - 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.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.9.3, typescript@npm:>=3 < 6": - version: 5.9.3 - resolution: "typescript@npm:5.9.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/c089d9d3da2729fd4ac517f9b0e0485914c4b3c26f80dc0cffcb5de1719a17951e92425d55db59515c1a7ddab65808466debb864d0d56dcf43f27007d0709594 - 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.9.3#optional!builtin, typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin": - version: 5.9.3 - resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/696e1b017bc2635f4e0c94eb4435357701008e2f272f553d06e35b494b8ddc60aa221145e286c28ace0c89ee32827a28c2040e3a69bdc108b1a5dc8fb40b72e3 - languageName: node - linkType: hard - -"ufo@npm:^1.6.1": - version: 1.6.2 - resolution: "ufo@npm:1.6.2" - checksum: 10/91888f5a6e21a974b9ce2bc18e0a354d8a84f99f6de3acd57c7a85feb3900a8be0e65d26206d2e9333ab9a3d62289381dbd9e283642816922299364663449fd5 - 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:~7.18.0": - version: 7.18.2 - resolution: "undici-types@npm:7.18.2" - checksum: 10/e61a5918f624d68420c3ca9d301e9f15b61cba6e97be39fe2ce266dd6151e4afe424d679372638826cb506be33952774e0424141200111a9857e464216c009af - languageName: node - linkType: hard - -"undici-types@npm:~8.3.0": - version: 8.3.0 - resolution: "undici-types@npm:8.3.0" - checksum: 10/6681d2837ac75a75ac1cc46090aa2b8ddc7c6b8ecc295a6cdb06838752a730da3d8afeecf05e5ab7903160eafad3a8b6ffa1927e5ded260590f4d4fef18646d5 - languageName: node - linkType: hard - -"undici@npm:7.28.0": - version: 7.28.0 - resolution: "undici@npm:7.28.0" - checksum: 10/154423b280d623278a61decb437f8a7e581fb18b8c95556ef956b32a58cd668eadbb812d28e20678cb2dc545a566f35a3afc0962307ca801da30f4741117986d - languageName: node - linkType: hard - -"undici@npm:^8.9.0": - version: 8.10.0 - resolution: "undici@npm:8.10.0" - checksum: 10/254219966d4a2fb110f565ffe73131caa82e949f207b9dd88930ebc23dfb6561db72ca187391cbd408ceeba7c647cb47d4110e8ae00df44c0c66e8a21e091dc0 - languageName: node - linkType: hard - -"unenv@npm:2.0.0-rc.24": - version: 2.0.0-rc.24 - resolution: "unenv@npm:2.0.0-rc.24" - dependencies: - pathe: "npm:^2.0.3" - checksum: 10/2d3e72d66efa719d0c36e8b57e35716cee72d15c82d72533ace9f2e533d4c0f5205be12bc0bec3c082a7cff9e972d08f760eb9b928acc90177afb49b7341f4f6 - 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:^5.0.0": - version: 5.0.0 - resolution: "unique-filename@npm:5.0.0" - dependencies: - unique-slug: "npm:^6.0.0" - checksum: 10/a5f67085caef74bdd2a6869a200ed5d68d171f5cc38435a836b5fd12cce4e4eb55e6a190298035c325053a5687ed7a3c96f0a91e82215fd14729769d9ac57d9b - languageName: node - linkType: hard - -"unique-slug@npm:^6.0.0": - version: 6.0.0 - resolution: "unique-slug@npm:6.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10/b78ed9d5b01ff465f80975f17387750ed3639909ac487fa82c4ae4326759f6de87c2131c0c39eca4c68cf06c537a8d104fba1dfc8a30308f99bc505345e1eba3 - 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.2, 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 - -"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:6.0.2, validate-npm-package-name@npm:^6.0.0, validate-npm-package-name@npm:^6.0.2": - version: 6.0.2 - resolution: "validate-npm-package-name@npm:6.0.2" - checksum: 10/f0e022b0a7f11345a92b64121b059b720204cd64406a0d65d81526181dcb70aef551c7c6bf9ca37b91607a7c6ff4d62e1f63a86c8d9b7346d722a641a4bd8789 - languageName: node - linkType: hard - -"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 - -"validate-npm-package-name@npm:^7.0.0": - version: 7.0.2 - resolution: "validate-npm-package-name@npm:7.0.2" - checksum: 10/2a9bdc6fd5e4284c8e02279446bfd3c38c0c01222555fd3b00b4765d9d47b217d4a200910be71b80b958f6baf40d2d32e812a8632633a2ce376a9b3b74811072 - languageName: node - linkType: hard - -"vite@npm:^6.0.0 || ^7.0.0 || ^8.0.0": - version: 8.0.16 - resolution: "vite@npm:8.0.16" - dependencies: - fsevents: "npm:~2.3.3" - lightningcss: "npm:^1.32.0" - picomatch: "npm:^4.0.4" - postcss: "npm:^8.5.15" - rolldown: "npm:1.0.3" - tinyglobby: "npm:^0.2.17" - peerDependencies: - "@types/node": ^20.19.0 || >=22.12.0 - "@vitejs/devtools": ^0.1.18 - esbuild: ^0.27.0 || ^0.28.0 - jiti: ">=1.21.0" - less: ^4.0.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: ">=0.54.8" - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - "@vitejs/devtools": - optional: true - esbuild: - optional: true - jiti: - optional: true - less: - 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/a5d91d26f6110672a292a06ca161af9a58279fe9d27106c8c0afb725a942b0b47091c440c3b1e7ebc8e0fe901f64ac6a2ffee3cdae2f899339686dbecd0c0266 - languageName: node - linkType: hard - -"vitest@npm:4.1.10": - version: 4.1.10 - resolution: "vitest@npm:4.1.10" - dependencies: - "@vitest/expect": "npm:4.1.10" - "@vitest/mocker": "npm:4.1.10" - "@vitest/pretty-format": "npm:4.1.10" - "@vitest/runner": "npm:4.1.10" - "@vitest/snapshot": "npm:4.1.10" - "@vitest/spy": "npm:4.1.10" - "@vitest/utils": "npm:4.1.10" - es-module-lexer: "npm:^2.0.0" - expect-type: "npm:^1.3.0" - magic-string: "npm:^0.30.21" - obug: "npm:^2.1.1" - pathe: "npm:^2.0.3" - picomatch: "npm:^4.0.3" - std-env: "npm:^4.0.0-rc.1" - tinybench: "npm:^2.9.0" - tinyexec: "npm:^1.0.2" - tinyglobby: "npm:^0.2.15" - tinyrainbow: "npm:^3.1.0" - vite: "npm:^6.0.0 || ^7.0.0 || ^8.0.0" - why-is-node-running: "npm:^2.3.0" - peerDependencies: - "@edge-runtime/vm": "*" - "@opentelemetry/api": ^1.9.0 - "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0 - "@vitest/browser-playwright": 4.1.10 - "@vitest/browser-preview": 4.1.10 - "@vitest/browser-webdriverio": 4.1.10 - "@vitest/coverage-istanbul": 4.1.10 - "@vitest/coverage-v8": 4.1.10 - "@vitest/ui": 4.1.10 - happy-dom: "*" - jsdom: "*" - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - "@edge-runtime/vm": - optional: true - "@opentelemetry/api": - optional: true - "@types/node": - optional: true - "@vitest/browser-playwright": - optional: true - "@vitest/browser-preview": - optional: true - "@vitest/browser-webdriverio": - optional: true - "@vitest/coverage-istanbul": - optional: true - "@vitest/coverage-v8": - optional: true - "@vitest/ui": - optional: true - happy-dom: - optional: true - jsdom: - optional: true - vite: - optional: false - bin: - vitest: ./vitest.mjs - checksum: 10/020843460fe696c23be2a363634dde4daf54625f1c443c24066ba3f87c478b0ccfdd5124343ba30eb092f54902ffea09f4bed0af4a16a9ee805e494ee2dce34e - 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:^4.0.0": - version: 4.0.0 - resolution: "walk-up-path@npm:4.0.0" - checksum: 10/6a230b20e5de296895116dc12b09dafaec1f72b8060c089533d296e241aff059dfaebe0d015c77467f857e4b40c78e08f7481add76f340233a1f34fa8af9ed63 - languageName: node - linkType: hard - -"wcwidth@npm:1.0.1, 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:^8.0.1": - version: 8.0.1 - resolution: "webidl-conversions@npm:8.0.1" - checksum: 10/0f7007311f1fc257a8e406dd236f13b61fb57cf0fddb476aec33457d2d0add2d012d6df0eeb00934399238e3f3b9dad30f59dc6ac83024ae0ebd5a518bf365e8 - languageName: node - linkType: hard - -"whatwg-mimetype@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-mimetype@npm:5.0.0" - checksum: 10/a2d5da445f671ed34010b45283ffb9ba3c68c695b8ec91f7400cfc9149c35eb2bc47bd2c39bbe8e026786b955ace03402ba2e5cfde4955434a3ec3c511a85d0a - languageName: node - linkType: hard - -"whatwg-url@npm:^16.0.0": - version: 16.0.1 - resolution: "whatwg-url@npm:16.0.1" - dependencies: - "@exodus/bytes": "npm:^1.11.0" - tr46: "npm:^6.0.0" - webidl-conversions: "npm:^8.0.1" - checksum: 10/221cc15ef89288dc1fafdb409352c62ab12ba9ff7f0753e925d8799c87b20371f3bc762dc0a8a5b9c23cddc4b1860537fc6c1bcc9d816ace9b3d3c47212cd163 - languageName: node - linkType: hard - -"whatwg-url@npm:^17.1.0": - version: 17.1.0 - resolution: "whatwg-url@npm:17.1.0" - dependencies: - "@exodus/bytes": "npm:^1.15.1" - tr46: "npm:^6.0.0" - webidl-conversions: "npm:^8.0.1" - checksum: 10/52052ba12a63e7665ee49d84d251a3d4776be4777fb259155ea3ca9bc49cdbbd18cbb5fce50f187e8450ce81d7abbbc4c39cfb15207c6d11d5c2539f9b87d426 - 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 - -"which-command@npm:^0.1.0": - version: 0.1.0 - resolution: "which-command@npm:0.1.0" - bin: - which-command: cli.js - checksum: 10/19f71ba9de01d3013d158d54a2ce44511fc7ae190591c94504e0295cd038f535856f87847a86aadcf9736161869d73c7812a5f5e97ef86c760575d9327898ab1 - 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:^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 - -"which@npm:^6.0.0": - version: 6.0.0 - resolution: "which@npm:6.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10/df19b2cd8aac94b333fa29b42e8e371a21e634a742a3b156716f7752a5afe1d73fb5d8bce9b89326f453d96879e8fe626eb421e0117eb1a3ce9fd8c97f6b7db9 - 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.20260730.1": - version: 1.20260730.1 - resolution: "workerd@npm:1.20260730.1" - dependencies: - "@cloudflare/workerd-darwin-64": "npm:1.20260730.1" - "@cloudflare/workerd-darwin-arm64": "npm:1.20260730.1" - "@cloudflare/workerd-linux-64": "npm:1.20260730.1" - "@cloudflare/workerd-linux-arm64": "npm:1.20260730.1" - "@cloudflare/workerd-windows-64": "npm:1.20260730.1" - 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/3948d9c9ae3954820366011a8e6eda58d02632af498b7e86b096df1e589c6733819c46aa37ce00298bf5cba77dbea9ccb03f6586ccaf2870cd233a9f97954f4e - languageName: node - linkType: hard - -"wrangler@npm:4.118.0": - version: 4.118.0 - resolution: "wrangler@npm:4.118.0" - dependencies: - "@cloudflare/kv-asset-handler": "npm:0.5.0" - "@cloudflare/unenv-preset": "npm:2.16.1" - blake3-wasm: "npm:2.1.5" - esbuild: "npm:0.28.1" - fsevents: "npm:2.3.3" - miniflare: "npm:5.20260730.0-alpha" - path-to-regexp: "npm:6.3.0" - unenv: "npm:2.0.0-rc.24" - workerd: "npm:1.20260730.1" - peerDependencies: - "@cloudflare/workers-types": ^5.20260730.1 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@cloudflare/workers-types": - optional: true - bin: - cf-wrangler: bin/cf-wrangler.js - wrangler: bin/wrangler.js - wrangler2: bin/wrangler.js - checksum: 10/8b191a4728141ecd2711b9f26a8d4b9d2e3aea3a90cf53c6b1aceb7ef2d17db1fed8a4584b3a89e629c83b6f715999ab58697e38c25bb83d381a17f1b5155651 - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm: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.2.0": - 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, wrappy@npm:1.0.2": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 10/159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 - languageName: node - linkType: hard - -"write-file-atomic@npm:5.0.1": - 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:^6.0.0": - version: 6.0.0 - resolution: "write-file-atomic@npm:6.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - signal-exit: "npm:^4.0.1" - checksum: 10/8f6d9ff94963b392c425653728d7f7d883cc2208f3d6c94be97e1436ad3115d56106122f1aeee3925f21241ce14c72bfc56bbee0d260346cf7d7797e603ff917 - languageName: node - linkType: hard - -"ws@npm:8.21.0": - version: 8.21.0 - resolution: "ws@npm:8.21.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/088411956432c8f876158409d5a285cb9ad1382f593391f51d3a599bd0a5b277f876609ebd00fc3596321c4a4c9064d6fffe1ebad960e8ea7fd9ae25324f35c2 - 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.8, 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.9.0": - version: 2.9.0 - resolution: "yaml@npm:2.9.0" - bin: - yaml: bin.mjs - checksum: 10/9a95e8e08651c3d292ab6a5befeb5f57b76801caa097c75bb45c9a70ce19c1b11f57e87a6ef84a579ea070ed2c2c8ac541c88c0ae684d544d5f42c7e77d11b7b - 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": - 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-cjs@npm:^2.1.3": - version: 2.1.3 - resolution: "yoctocolors-cjs@npm:2.1.3" - checksum: 10/b2144b38807673a4254dae06fe1a212729550609e606289c305e45c585b36fab1dbba44fe6cde90db9b28be465ec63f4c2a50867aeec6672f6bc36b6c9a361a0 - languageName: node - linkType: hard - -"yoctocolors@npm:^2.1.2": - version: 2.2.0 - resolution: "yoctocolors@npm:2.2.0" - checksum: 10/8b2761daad30ca3b5b717fc12d9a30aea23f8d757d355b29b6b53c3a570de236fd85b17040c5196b18573fe38a4a981f48f111efa9a29c743e0878e26137b2b1 - languageName: node - linkType: hard - -"youch-core@npm:^0.3.3": - version: 0.3.3 - resolution: "youch-core@npm:0.3.3" - dependencies: - "@poppinss/exception": "npm:^1.2.2" - error-stack-parser-es: "npm:^1.0.5" - checksum: 10/d02c23d08755dce2461c82490d32592edebb8ea0f027d49e9acad53780e5f0e9721447726e1a8a67511c42638608a4e38aa5ac3146a53079811b2866c8518ad6 - languageName: node - linkType: hard - -"youch@npm:4.1.0-beta.10": - version: 4.1.0-beta.10 - resolution: "youch@npm:4.1.0-beta.10" - dependencies: - "@poppinss/colors": "npm:^4.1.5" - "@poppinss/dumper": "npm:^0.6.4" - "@speed-highlight/core": "npm:^1.2.7" - cookie: "npm:^1.0.2" - youch-core: "npm:^0.3.3" - checksum: 10/147912bd424e2f5266606890c8600717cc0b06e255704b78fa03d42c2ef217492b705d74d7cfffed45ecd5b800b719cf67300e8d11bc9041416c08cc72a0f254 - languageName: node - linkType: hard - -"zod@npm:4.4.3": - version: 4.4.3 - resolution: "zod@npm:4.4.3" - checksum: 10/804b9a42aa8f35f2b3c5a8dff906291cb749115f83ee2afe3576d70b5b5c53c965365c7f4967690647a9c54af9838ff232a85ff9577a0a36c44b68bc6cdefe36 - languageName: node - linkType: hard +# 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-fetch@3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +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.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +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" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +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@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +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@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +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"